<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://azurecoding.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>Azure Coding .NET</title><link>http://azurecoding.net/blogs/</link><description>Keep your head in the Cloud As You're Coding .NET</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 (Build: 30929.2835)</generator><item><title>Just Do It Part 1: 25 Steps</title><link>http://azurecoding.net/blogs/brownie/archive/2011/12/08/just-do-it-part-1-25-steps.aspx</link><pubDate>Thu, 08 Dec 2011 10:56:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:12193</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The stars have aligned and I have enough impetus to &lt;a target="_blank" href="http://azurecoding.net/blogs/brownie/archive/2011/11/28/just-it.aspx"&gt;Just Do It&lt;/a&gt;. On Tuesday, Microsoft announced the &lt;a target="_blank" href="http://www.zdnet.com/blog/microsoft/microsoft-previews-windows-8-app-store-launching-with-the-beta-in-late-february/11340?tag=mantle_skin;content"&gt;Windows 8 App Store beta&lt;/a&gt; (along with the Windows 8 beta) will arrive in February, and revealed the &lt;a target="_blank" href="https://buildwindowscontest.com/"&gt;Windows 8 First Apps contest&lt;/a&gt;. I&amp;rsquo;ve been following the &lt;a target="_blank" href="http://groups.google.com/group/lean-startup-circle"&gt;Lean Startup community&lt;/a&gt; over the past few years (even engaging in conversation) and purchased &lt;a target="_blank" href="http://www.amazon.com/Lean-Startup-Entrepreneurs-Continuous-Innovation/dp/0307887898/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1323307254&amp;amp;sr=1-1"&gt;Eric Ries&amp;rsquo; book&lt;/a&gt; day one (highly recommended). Today, marks day one of my new Micro ISV endeavor. I&amp;rsquo;m going to put to use a lot of the ideas I&amp;rsquo;ve been learning through the discussions in LSC and in the book. I am also going to follow Secret Geek&amp;rsquo;s &lt;a target="_blank" href="http://wiki.timesnapper.com/index.php?title=25_Steps_to_Build_Your_Own_Micro_ISV"&gt;25 Steps to Build Your Own Micro ISV&lt;/a&gt;. I&amp;rsquo;ve already &lt;a target="_blank" href="http://incipire.com"&gt;registered the domain&lt;/a&gt;, secured &lt;a target="_blank" href="http://posterous.com/"&gt;reliable&lt;/a&gt; &lt;a target="_blank" href="http://launchrock.com/"&gt;hosting&lt;/a&gt; (and &lt;a target="_blank" href="http://azure.com"&gt;here too&lt;/a&gt;), started &lt;a target="_blank" href="http://blog.incipire.com"&gt;writing content&lt;/a&gt;, and installed &lt;a target="_blank" href="http://analytics.google.com"&gt;traffic monitoring&lt;/a&gt;. I&amp;rsquo;m 20% of the way through the list in one night.&lt;/p&gt;
&lt;p&gt;Join me at &lt;a target="_blank" href="http://incipire.com"&gt;Incipire.com&lt;/a&gt; to find out what I&amp;rsquo;ve got brewing. And follow along with the blog at &lt;a target="_blank" href="http://blog.incipire.com"&gt;blog.incipire.com&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=12193" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/startup/default.aspx">startup</category></item><item><title>Just ___ It</title><link>http://azurecoding.net/blogs/brownie/archive/2011/11/28/just-it.aspx</link><pubDate>Mon, 28 Nov 2011 08:43:40 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:12100</guid><dc:creator>Mike Brown</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;There is a recurring theme that I’ve been coming across over the past few weeks. And a recurring message that I’ve been reminding myself.&lt;/p&gt;  &lt;h1&gt;Just Effin’ Do It&lt;/h1&gt;  &lt;p&gt;The worst kind of procrastination is procrastination that disguises itself as productivity. You know what I mean. Stop going on Stack Overflow to figure out the best approach to appropriately separate concerns in your n-tier, cloud based, social networking, NoSQL, DDD application. &lt;strong&gt;Just Code It&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Stop asking the Lean Startup Circle what the best approach to customer discovery is and whether you should fill in your Startup Canvas clockwise or Counter Clockwise. &lt;strong&gt;Just Start It&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Stop reading books on how to stop procrastinating or to become more productive. I’ve actually tweeted on how ironic it was for me to procrastinate by reading a book on stopping procrastination. &lt;strong&gt;Just Do It&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You know what it is. And the longer you sit there pretending to do it, it ain’t getting done. Put away your personal Kanban boards, and your Gantt charts, and your Pomodoro techniques, and all that crap that lets you pretend like you’re doing something without really doing something (zero inbox and GTD, I’m looking at you). You know how to get to zero inbox? Look at your inbox. anything that’s over a day old and you haven’t responded to…delete it. If it’s important, you’ll get a follow up. If it’s not important enough for the other person to follow up again, then why the hell are you prioritizing it?&lt;/p&gt;  &lt;p&gt;This post is me doing it. I have been neglecting my blog resorting to tweeting for sharing with the world. But I wasn’t scratching that itch that a full blog post would give me. I have about 20 queued posts that I haven’t completed because I wanted to make them perfect. And that is the problem, for some reason, I have this strange craving for perfection. It materializes in multiple ways. I overcame “Analysis Paralysis” by releasing this silly concept that my code is written in stone and has to be perfect the first time I write it. It’s called software for a reason. Once I accepted that &lt;a href="http://www.developerdotstar.com/mag/articles/reeves_design_main.html" target="_blank"&gt;Coding is Design&lt;/a&gt;, I realized that the best way to write the best code for a problem is to make it work. Then make it pretty. That’s my mantra now.&lt;/p&gt;  &lt;p&gt;Note I’m not advocating that we should eschew all specifications whatsoever. After a certain scale, you need to make sure everyone is on the same page, and you’re going to have to write specs to do that. “I might as well write the code at that point,” you might argue.&amp;#160; Trust me, if you’re making the technical decisions for a group of more than 6 developers, you’ll scale quicker if you write the specs and trust your developers to write the code. I’ve tried the other path, and it leads to burnout and frustration. You lose the bigger picture because you’re so focused on the details of a specific piece of code.&lt;/p&gt;  &lt;p&gt;I’ve listened to arguments from “Senior” developers saying otherwise. “Well I guess you can go and write specs, on my team, all of my developers are capable of making the right decisions.” It’s not a matter of your developers’ aptitude. A good codebase should be consistent and have no surprises. You should be able to tell by the conventions of that system where you’re likely to find what you’re looking for. Good code should be like a book. How jarring would it be if you were reading a John Steinbeck novel and halfway through Ernest Hemingway suddenly took the helm? What if Picasso took over half of the Sistine chapel and used his style? We limit the number of brains making technical decisions not because we don’t think the developers are capable. We know that it’s easier to maintain consistency when there are less decisions being made. “Well why not just use standards and guidelines?” So, you’re saying we should specify how the code should be written? That’s my point exactly.&lt;/p&gt;  &lt;p&gt;Anyway, now that I’ve diverted from my original path enough (read &lt;a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959" target="_blank"&gt;The Mythical Man Month&lt;/a&gt; for more on the topic of the Unified voice), let me get back to my point. Perfectionism. That is just another lie we tell ourselves when we want to procrastinate. In reality, you’re not going to get anything of substantial size done in one sitting. So just keep doing it, little by little, until it adds up to that big thing. But make sure you are honest with yourself. Ask, is this me Just Doing It? Or am I pretending to do it?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=12100" width="1" height="1"&gt;</description></item><item><title>Am I a Fanboy?</title><link>http://azurecoding.net/blogs/brownie/archive/2011/10/11/am-i-a-fanboy.aspx</link><pubDate>Tue, 11 Oct 2011 10:00:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:11662</guid><dc:creator>Mike Brown</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;{EAV:435579fc06d84e62}&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s pretty obvious that I like Microsoft products. A lot. I have an Xbox, Windows Phone, and AT&amp;amp;T U-Verse (running Microsoft Media Room). My platform of choice for technology is Microsoft (Windows, SQL Server, Hyper-V, Azure, .NET, Visual Studio, Systems Center, etc.). I am so quick to jump on an attack of Microsoft products that you would think the person was insulting my mom.&lt;/p&gt;
&lt;p&gt;From all outside appearances it would seem that yes I am a fanboy. And I will go on record and admit right here that indeed I am. But there&amp;rsquo;s a reason. Microsoft specializes in making what&amp;rsquo;s normally difficult in technology easy. Case in point let&amp;rsquo;s look at Novell Netware. Novell was the king of the Network OS space in the early 90s. Entering the world of Network Administration in 96 meant that I needed to learn Netware&amp;hellip;period. And learn it I did. Netware was powerful. You could do a lot with it. Once you learned HOW to do it. 96 was also the year that Microsoft introduced Windows NT 4. And it was the dawn of destruction for Netware. NT4 had a wizard for everything and it was obvious what any given setting would do. It was the release of Windows Server 2000 and Active Directory (Microsoft&amp;rsquo;s equivalent of Novel Directory Services) that put the nail in the coffin of Netware. Having had experienced the difficulty of installing and configuring NDS I was amazed at how easy Active Directory was to configure.&lt;/p&gt;
&lt;p&gt;We geeks pride ourselves on becoming masters over what many fear. And there is a tendency to look down our noses at those who use tools to accomplish what can be done by hand. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;I never use an HTML designer, I write it by hand.&amp;rdquo; &lt;/li&gt;
&lt;li&gt;&amp;ldquo;Visual Debuggers make programmers lazy.&amp;rdquo; &lt;/li&gt;
&lt;li&gt;&amp;ldquo;Why do I need a GUI to do the same thing I can do by command prompt.&amp;rdquo; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these arguments basically boil down to &amp;ldquo;I learned how to do this task the hard way, and so should you.&amp;rdquo; I do agree to an extent&amp;hellip;everyone should learn how to do things manually for those occasions when the tool messes stuff up. But why use a scrub-board when there&amp;rsquo;s a perfectly fine washing machine right there? The reason I like Microsoft&amp;rsquo;s products is that they simplify difficult tasks so that you can be more productive. From a programming stand point what does that mean? Here are a few examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Instead of mapping objects to a database by hand, I can use EF to do it for me. On the flip side, I still need to understand how it works so that when an error pops up (why isn&amp;rsquo;t this object that inherits from an abstract class getting mapped to my database) I know how to fix it. For 80% of the scenarios, it just works. For those final 20%, a solid foundation in database design is necessary. &lt;/li&gt;
&lt;li&gt;WCF RIA services lets me pretend that there isn&amp;rsquo;t a &amp;ldquo;cloud&amp;rdquo; between my rich client and my database. Again 80% of the time it will just work. The other 20%, understanding how WCF works, and good SOA design (because there IS a cloud between your rich client and database after all) is helpful. &lt;/li&gt;
&lt;li&gt;Just this week, having never configured a firewall more complex than what comes on my wireless router, I successfully installed Forefront Threat Management Gateway in a 3 Legged Network Configuration, and used it to publish a Remote Desktop Gateway from my internal network. Now I can connect to any machine on my network over RDP without having to VPN in first. (Oh yeah I got the VPN working as well for those times when the Gateway is overloaded.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are just a few examples of how Microsoft gets it right. Yes I can take the effort of building my own service framework that exposes my rich server-side model over the web to my Silverlight Client, but that is a detail which doesn&amp;rsquo;t add value to the product. The sooner you get to solving your customer&amp;rsquo;s problems the better. Microsoft has excelled at providing solutions that allow me to do just that. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=11662" width="1" height="1"&gt;</description></item><item><title>BUILDing the Future Part 1: Windows 8</title><link>http://azurecoding.net/blogs/brownie/archive/2011/10/10/building-the-future-part-1-windows-8.aspx</link><pubDate>Mon, 10 Oct 2011 01:00:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:11674</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I&amp;rsquo;ve been stewing on what came out of BUILD for the past few weeks. There&amp;rsquo;s a lot to talk about: WinRT, .NET vs. HTML vs. native, C# vNext, Visual Studio vNext, Windows Server 8, desktop vs. &amp;ldquo;Metro&amp;rdquo;. It&amp;rsquo;s hard to know where to get started. The most obvious place to me is the star of the stage. The bell of the ball. The Helen of Troy. Windows 8 itself. Forget about the development story (although there&amp;rsquo;s a big one that has caused much speculation and moaning and gnashing of teeth), what does Windows 8 mean for the market?&lt;/p&gt;
&lt;h2&gt;Dual Nature&lt;/h2&gt;
&lt;p&gt;In case you haven&amp;rsquo;t noticed there are two sides to Windows 8. There is the &amp;ldquo;classic&amp;rdquo; desktop that is pretty familiar to us. There are some nice additions here and there (ribbon on the explorer shell, improved file copy) but for the most part there&amp;rsquo;s nothing really to see here. No new driver upgrades necessary, all the old apps run just fine Windows 8 classic desktop is just a perfunctory upgrade to Windows 7. If that was the entire story there wouldn&amp;rsquo;t be much to see here. Until you press the start button&amp;hellip;&lt;/p&gt;
&lt;p&gt;The Start Button has been a Windows mainstay since Windows 95 was released. It has undergone several changes but has served the same functionality for the past 16 years as a program launcher. I remember sinking a lot of time into organizing my start menu so that I could easily find my applications that I needed. When Vista came along and provided start menu search, my primary interaction with the start menu became as a searcher. I didn&amp;rsquo;t care anymore about organizing the program shortcuts because I could just type &amp;lsquo;visual studio&amp;rsquo; and the start menu would find it for me. With Windows 7&amp;rsquo;s super app bar (or whatever they call it). I have more than enough room for my most common apps and the rest are a few keystrokes away from being found.&lt;/p&gt;
&lt;p&gt;Regardless of the changes that have occurred over the years there is no denying the significance of the Start button (try finding a non-mac keyboard without one). It has become synonymous with Windows. That&amp;rsquo;s why tying the new experience to the start button is a bold and powerful statement by Microsoft (the Building Windows 8 Blog &lt;a target="_blank" href="http://blogs.msdn.com/b/b8/archive/2011/10/03/evolving-the-start-menu.aspx"&gt;has a few posts&lt;/a&gt; on the &lt;a target="_blank" href="http://blogs.msdn.com/b/b8/archive/2011/10/04/designing-the-start-screen.aspx"&gt;topic of the Start Menu&lt;/a&gt;). There are a few subtle points to realize.&lt;/p&gt;
&lt;h2&gt;The Start Menu is the Default View&lt;/h2&gt;
&lt;p&gt;The first thing a user sees when she turns on her Windows 8 device is the Start Screen (very similar to the start screen for WP7). You have to &amp;ldquo;launch&amp;rdquo; the desktop view. This is a new canvas just waiting to be painted and Microsoft will be placing it (and potentially your app) in front of hundreds of millions of Windows users at power on. Think of that for a second. There are hundreds of millions of Windows 7 users right now. The adoption rates for new versions of Windows (barring Vista and me) have historically been high, so we can expect there to be a huge number of Windows 8 devices in users hands after launch.&lt;/p&gt;
&lt;h2&gt;Windows 8 Tablets are Hybrid Devices&lt;/h2&gt;
&lt;p&gt;Microsoft is creating an entirely new market with Windows 8. The Samsung device given out at Build is much more than a tablet, and much more than a Windows Desktop with touch. Today&amp;rsquo;s tablets (Android, iPad) are great at consumption and very light production. They are designed for the user on the go. The Samsung device with the new Start Menu is also designed for mobile users. Here&amp;rsquo;s the difference. Once you&amp;rsquo;re back at your desk, you can dock your Windows 8 tablet and it becomes a full Windows desktop. This seamless transition from tablet to computer is something that hasn&amp;rsquo;t been done in the tablet space yet. &lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think you heard me there. People buy PCs to get stuff done, they buy tablets to supplement their PCs. Windows 8 allows you to purchase one device to serve both purposes. The devices that pick up on that cue (like the Samsung or the Acer Iconia) will be the winners in the new market. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=11674" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Windows+8/default.aspx">Windows 8</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Strategy/default.aspx">Strategy</category></item><item><title>Slide Deck and Code Sample for St. Louis DoDN</title><link>http://azurecoding.net/blogs/brownie/archive/2011/10/09/slide-deck-and-code-sample-for-st-louis-dodn.aspx</link><pubDate>Sun, 09 Oct 2011 05:31:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:11064</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;strong&gt;Editor&amp;#39;s note:&lt;/strong&gt; I wrote this back in August, shortly after the STLDoDN but for some reason my blog decided not to make it public. &lt;/p&gt;
&lt;p&gt;This past weekend I spoke at the &lt;a target="_blank" href="http://www.stlouisdayofdotnet.com/2011"&gt;St. Louis Day of .NET&lt;/a&gt;, presenting a talk on MVVM. I was honored to actually have my session double-booked speaking on both Friday and Saturday. The first session, I showed some pre-canned code that showed the concepts I was covering. In the second session, I tried a different approach: I refactored a simple task management application to show how the patterns come into play as an application evolves. I demonstrated the basic View Model, Delegate Command, and Event Aggregator. I&amp;rsquo;ve uploaded the &lt;a target="_blank" href="http://mvvmu.codeplex.com/releases/71355/download/268870"&gt;slide deck&lt;/a&gt; and &lt;a target="_blank" href="http://mvvmu.codeplex.com/SourceControl/changeset/view/e14e35e432b6"&gt;code&lt;/a&gt; to Codeplex under the &lt;a target="_blank" href="http://mvvmu.codeplex.com/"&gt;MVVM Unleashed&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;As part of creating the slide deck, I came across some excellent &lt;a target="_blank" href="http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/"&gt;&amp;ldquo;Motivational Posters&amp;rdquo; created by Derrick Bailey&lt;/a&gt; to visualize the SOLID principles. I used the same technique to make additional posters for YAGNI and DRY &lt;/p&gt;
&lt;p&gt;&lt;a href="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/yagni_5F00_21AB978E.jpg"&gt;&lt;img height="484" width="604" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/yagni_5F00_thumb_5F00_6E032B2F.jpg" alt="yagni" border="0" title="yagni" style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/dry_5F00_53C2C20B.jpg"&gt;&lt;img height="484" width="604" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/dry_5F00_thumb_5F00_18FB1935.jpg" alt="dry" border="0" title="dry" style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Feel free to use the code, slide deck, and new posters as you see fit (of course you might want to change the personal information about me if you&amp;rsquo;re presenting it).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=11064" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Samples/default.aspx">Samples</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/WPF/default.aspx">WPF</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/MVVM+Unleashed/default.aspx">MVVM Unleashed</category></item><item><title>Quick Tip: Entity Framework DB Initialization with ASP.NET Providers</title><link>http://azurecoding.net/blogs/brownie/archive/2011/06/11/quick-tip-entity-framework-db-initialization-with-asp-net-providers.aspx</link><pubDate>Sat, 11 Jun 2011 13:20:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:10538</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I have a database with the ASP.NET providers already installed&amp;hellip;I don&amp;rsquo;t have them represented in my Object Model for Entity Framework 4.1 but I don&amp;rsquo;t want to put them on a separate Database from my main application data.&lt;/p&gt;
&lt;p&gt;The solution was rather easy: &lt;/p&gt;
&lt;p&gt;public class UpdateDatabaseSchemaStrategy:IDatabaseInitializer&amp;lt;KharaSoftIncipireWebContext&amp;gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public void InitializeDatabase(KharaSoftIncipireWebContext context)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var script = ((IObjectContextAdapter) context).ObjectContext.CreateDatabaseScript();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.Database.ExecuteSqlCommand(script);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;I just asked the ObjectContext for the DBScript and call ExecuteSQLCommand using it. This is great for development where I&amp;rsquo;m rapidly pushing changes to the object model and want to see it in action. I just delete all the application tables and don&amp;rsquo;t have to worry about recreating the provider tables every round.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:f2692f5b-e6e1-4108-93d4-316c0c6b546a" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=10538" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Quick+Tip/default.aspx">Quick Tip</category></item><item><title>Silverlight: The Rumors of My Death Have Been Greatly Exaggerated!</title><link>http://azurecoding.net/blogs/brownie/archive/2011/06/11/silverlight-the-rumors-of-my-death-have-been-greatly-exaggerated.aspx</link><pubDate>Sat, 11 Jun 2011 03:16:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:10522</guid><dc:creator>Mike Brown</dc:creator><slash:comments>15</slash:comments><description>&lt;h4&gt;Update 3: Things are very interesting. Look for a &amp;quot;what we know&amp;quot; post over the next few days.&lt;/h4&gt;
&lt;h4&gt;Update 2: Thanks to MyDigitalLife forum user NaiveUser we have hard evidence that &lt;a href="http://forums.mydigitallife.info/threads/26404-Windows-8-(7955)-Findings-in-M3-Leak/page20"&gt;XAML is indeed supported through DirectUI&lt;/a&gt;. Also with his process explorer dump it looks like GDI and User are still around. &lt;/h4&gt;
&lt;h4&gt;Update: According to &amp;quot;Ricky&amp;quot; who identifies himself as a Microsoft Employee. WPF doesn&amp;#39;t rely on DWM. It uses DirectX natively. Performance issues&amp;nbsp;aren&amp;#39;t caused from User/GDI limitations but more resource issues when rendering a large number of items on screen. That does not invalidate the rest of the discussion...just a minor flub or two on my part.&lt;/h4&gt;
&lt;p&gt;So the Net is all abuzz about the freshly unveiled &amp;ldquo;Windows 8&amp;rdquo; and it&amp;rsquo;s impact on the Microsoft developer ecosystem. A lot of people feel that the fact that Silverlight, WPF, and .NET weren&amp;rsquo;t mentioned in the demo implied they wouldn&amp;rsquo;t be supported. I must admit that was my first knee-jerk reaction as well. Let&amp;rsquo;s take a step back for a second and analyze what&amp;rsquo;s going on. &lt;/p&gt;
&lt;p&gt;Windows 8 Immersive UI has been shown to support HTML5 + JS for writing apps. But here&amp;rsquo;s the kicker&amp;hellip;Microsoft doesn&amp;rsquo;t control the HTML5 standard. There is no way they are going to have their premiere platform limited by an external standard. They&amp;rsquo;ve already gone through that with Java in the late 90s. &amp;ldquo;Embrace and Extend&amp;rdquo; just doesn&amp;rsquo;t cut it today. So naturally there HAS to be another framework for developing against Windows 8. Make no mistake, the &amp;ldquo;classic desktop&amp;rdquo; is essentially the equivalent of Mac OS X support for legacy apps, the only thing that Windows 8 spells death for is User and GDI. If you look closely at the demo, the Classic shell is a Window within MoSH.&amp;nbsp; If you are developing against frameworks targeting them, then it&amp;rsquo;s time to upgrade your skills.&lt;/p&gt;
&lt;p&gt;HTML5 + JS is an interesting combination. HTML5 is markup, JavaScript is code. &lt;a target="_blank" href="http://www.charlespetzold.com/wpf/"&gt;Applications = Code + Markup&lt;/a&gt; get my drift? By teaching us XAML and having us focus on declarative UIs, Microsoft is now free to swap out the how because our code only says &amp;ldquo;what we want&amp;rdquo;. If anything, the only people who should be worried are those still using Windows Forms for development.&lt;/p&gt;
&lt;p&gt;Microsoft has been trying to make this break for quite a while. Did you know that the IE Engine, Trident, was originally designed to be a replacement for GDI/User? Microsoft was attempting to provide a declarative UI platform for Windows since Windows 95. The problem back then was performance. They could not get the horsepower needed to render the full desktop and all the applications at a suitable speed under Trident. So they backed off. However, we got the remnants of the effort in IE3 and the Active Desktop. Remember when Microsoft said in their anti-trust suit that IE was a core part of Windows. They weren&amp;rsquo;t lying. Trident shipped with Windows 95 Desktop Update and Windows 98 not as a gimmick but because there was so much written in the OS that leveraged it, stripping it out would have involved a lot of rewriting.&lt;/p&gt;
&lt;p&gt;Fast forward to Longhorn. Again, Microsoft was attempting to bring a declarative UI layer to Windows core. From that effort we got the DWM and WPF (&lt;span style="text-decoration:line-through;"&gt;which sits atop DWM&lt;/span&gt;). They stopped short of fully stripping out User and GDI, but they telegraphed their punch so to speak. With Silverlight, and Windows Phone 7, Microsoft took off the glove. You get XAML and the .NET framework that they allow. No Windows Forms, no GDI, no User unless you break out of the sandbox and perform all kinds of obscene acts. Effectively the past 5 years has served to wean developers off what came before and start learning the future of Windows development.&lt;/p&gt;
&lt;p&gt;There are still performance issues in WPF&amp;hellip;there are performance issues in Silverlight on Windows Phone. This is because when you go far enough down it&amp;rsquo;s not turtles all the way. It&amp;rsquo;s still the same old stuff that Windows has been hobbled with since version 1. User and GDI. &lt;/p&gt;
&lt;p&gt;Until now. Windows 8 introduces DirectUI. And with Direct UI the gauntlet has been thrown down. It&amp;rsquo;s time to stop doing things in code and on the processor that the GPU is best equipped to handle. It&amp;rsquo;s time to learn how to tell the framework &lt;strong&gt;what&lt;/strong&gt; we want it to do instead of telling it how to do it. It&amp;rsquo;s time to realize that whether it&amp;rsquo;s called Silverlight, WPF, Jupiter, or Uranus, the future of Windows Client development is declarative. HTML just happens to fit the model&amp;hellip;but XAML was &lt;strong&gt;born&lt;/strong&gt; to do it. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fbit.ly%2fl3UNlu"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%253a%252f%252fbit.ly%252fl3UNlu&amp;amp;bgcolor=0070FF" alt="kick it on DotNetKicks.com" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=10522" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Html5/default.aspx">Html5</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/DirectUI/default.aspx">DirectUI</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Windows+8/default.aspx">Windows 8</category></item><item><title>There’s No Free Lunch</title><link>http://azurecoding.net/blogs/brownie/archive/2011/05/27/there-s-no-free-lunch.aspx</link><pubDate>Fri, 27 May 2011 12:14:16 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:10351</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In light of Hammet’s recent resignation from the MEF team, I decided to finish up this post discussing other self-indulgent monologues that have been floating through the net. There was a recent post (well not so recent anymore, I first started writing this a few months ago) where someone decided to publicly reject his MVP award. I think he’s gotten enough traffic from the fact that he was linked from a popular newsletter so I’m not going to add to it here. Let’s put aside the fact that he could have told his lead during his review period that he wasn’t interested in renewing. What I have issues with is his overgeneralization of the program and it’s participants. Let’s look at some of the fallacies in his self-indulgent gibberish.&lt;/p&gt;  &lt;h3&gt;I’m No Expert, So MVPs Aren’t Experts&lt;/h3&gt;  &lt;p&gt;Expertise is a relative term. Case in point when I was invited to become moderator on the MSDN Forums, I didn’t feel at the time that I had contributed significantly. I was told by the Program Manager that fewer than 2% of the visitors answer more than two questions that are accepted (I had about 20 within a month). The MVP program has around 4000 awardees worldwide. Their criteria in selection is like KFC’s secret formula, but I’m pretty sure somewhere in there is “shows deeper knowledge than the average user of the product.”&lt;/p&gt;  &lt;p&gt;Also the award is given strictly for your community participation during the year leading up to your award. It doesn’t say anything about what you do after receiving it. Strictly speaking the MVP program recognizes people who are enthusiastic about Microsoft products and voluntarily share their enthusiasm with the community. That’s all there is to the program. On average, an MVP will be a good person to ask for a quick “how do I…” question in their field of Technical Expertise (what they were given the award for). Because it’s likely they have come across the answer. &lt;/p&gt;  &lt;p&gt;Also, different teams have different criteria for acceptance. I had written a lot of blog posts; was a moderator in the forums, answering a good number of questions; and spoke at several user groups and regional conferences for two and a half years before I was given an MVP award. So while YOU may not consider yourself an expert, don’t imply that your own incompetence applies to the rest.&lt;/p&gt;  &lt;h3&gt;The Product Teams/Microsoft Don’t Listen&lt;/h3&gt;  &lt;p&gt;First of all, from what I read, this guy was an MVP in Developer Security. As I understand it, there is no product team attached to that specific expertise (I could be mistaken). Most MVP areas are attached to a product team (for instance my award is in Client App Development which is attached to the WPF team). Through the program there are opportunities to engage with the team (in addition by the time I was awarded, I had already been engaging team members) both at the MVP summit and through occasional teleconferences.&amp;#160; They listen…they may not move as fast as you want them to but they listen.&lt;/p&gt;  &lt;p&gt;It’s funny that he brought up the EF vote of no confidence. The V1 of EF was not equal to NHibernate. Of course NHibernate has been in development since 2003 and started as a port of Java Hibernate which had been around for a few years itself. So expecting a V1 to be on par with an 8 year old product is a bit over the top. The team focused on features that would cover 80% of the usage scenarios. Those scenarios were enabled by a convenience layer (the EDM Designer, the ObjectContext Generator are not the Framework itself). Looking at the core framework, it was apparent that a future release could provide a convenience layer to enable the scenarios they were clamoring for (pure POCO entities). The next release, took a step closer to that goal and 4.1 supports it fully. Now it’s up to NH to catch up with EF in terms of LINQ support.&lt;/p&gt;  &lt;p&gt;What people seem to forget is that Microsoft is a product company and they need to support a wide array of developers. Like it or not, for better or worse, the majority of .NET developers are not immersed in the world of advance patterns, TDD, SoC, etc. The majority have a database and want to quickly have a working application that uses it. What they also forget is that even though it SEEMS Microsoft has unlimited resources. They really don’t. Even if they did, we all know how the mythical man month works by now. No matter how much money is thrown at a project, only so much can get delivered within a given time frame. The team had to prioritize which features had to be in V1 and which could wait until a later delivery. It’s not a matter of not listening. It’s a matter of how much can be done in a given amount of time.&lt;/p&gt;  &lt;p&gt;I’ve had experiences where I felt the team has listened to my feedback…I’ve also had experiences where I felt that because of my expertise, my feedback was marked as outside of the target zone. It was only after pushing back that no, this isn’t just for me this is my customer who is very much in your target zone speaking, did I get my opinion listened to. The FixWPF.com website is similar to the EFVoNC except it’s less political posturing and more of a request to address known issues within the framework.&lt;/p&gt;  &lt;p&gt;Of particular note is his comment about the response to telling his lead that he didn’t want the award anymore:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The most surprising thing to me was when I told my MVP lead that I was not interested in participating in the program. The response was: “No problem. Thanks for letting me know Dave. Good luck in the future”. I expected maybe a bit more of a “Why?” response but I am not surprised that MS does not care about what other people think. Maybe, because I have become harder on MS that they are happy to be rid of me. Who knows.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Seriously, what did he expect them to do crawl on their knees begging him to stay? Again, he could have let them know BEFORE he was awarded so that his seat could be given to someone who deserved it.&lt;/p&gt;  &lt;h3&gt;Beside the Free MSDN Subscription, There’s No Value&lt;/h3&gt;  &lt;p&gt;I’ve got to give a full quote here because I can’t believe I saw this in writing:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Unfortunately it costs a lot of time and money to contribute to the community. If I give a talk I have spent 40 to 200 hours preparing (yes 200 hours on a 1 hour talk) plus the costs to travel to another city, food, and accommodation. MS’s reward is a MSDN subscription and half of a hotel room if I attend the summit (there used to be more benefits but they have been rolled back to save costs). It would probably be more affordable for me to purchase an MSDN subscription on my own and stop speaking entirely. I have gained no additional work from the MVP program, no additional speaking gigs, and have not made relatively few connections to others because of the MVP program.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There are a number of benefits outside of the MSDN Subscription that come with the MVP Award. No one is going to come pounding on your door to make you take advantage of them. I don’t want to go into too much detail here but suffice it to say that as much value as I receive from the MSDN Subscription (and believe me I wouldn’t give that up for the world), I wouldn’t even put it as the 5th most valuable benefit I get from the program. If the Subscription is the most valuable benefit you receive from the MVP program, you’re doing it wrong.&lt;/p&gt;  &lt;p&gt;Also spending 200 hours prepping a talk for a presentation is sad. I think I would quit speaking too if it took me that long. The fact that he says spending that time and effort just for an MVP award isn’t worth it is sadder. While it’s nice to get the recognition, the award is not why I do what I do. And I’ve had the exact opposite experience. I’ve gained additional work through the program and connections made there, I’ve been invited to submit to more conferences (and not just the open call for Mix), and I’ve networked my butt off with the program. How could you go to the summit and NOT &lt;a href="http://azurecoding.net/blogs/brownie/archive/2010/03/01/2010-mvp-summit-recap.aspx" target="_blank"&gt;make new connections&lt;/a&gt; unless you’re a social leper?&lt;/p&gt;  &lt;h3&gt;Fin&lt;/h3&gt;  &lt;p&gt;It seems to me this is just a pure misunderstanding of what the award entails. Dave obviously felt that the award would come with keys to the kingdom and his word should be the rule of the land. The reality is that the door has been slightly opened for you, it’s up to you to barge in and take advantage of the opportunities.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=10351" width="1" height="1"&gt;</description></item><item><title>Recruiter Etiquette 101</title><link>http://azurecoding.net/blogs/brownie/archive/2011/05/26/recruiter-etiquette-101.aspx</link><pubDate>Thu, 26 May 2011 11:00:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:10331</guid><dc:creator>Mike Brown</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;I was inspired by another blogger (specific blog and name slips my mind right now) who was fed up with emails from recruiters that make it evident they aren&amp;rsquo;t trying to personalize their efforts. This will probably become a series because I get a lot of recruitment letters. So as not to appear mean, just providing some professional critique, I will alter names and and companies out of these messages.&lt;/p&gt;
&lt;p&gt;This one comes from Jack Flowers from Critical Mass Technologies (remember all names are fictitious, if there is a recruiter named Jack Flowers at a Critical Mass Technologies, I&amp;rsquo;m &lt;strong&gt;NOT&lt;/strong&gt; talking about you):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Michael:&lt;/p&gt;
&lt;p&gt;I am contacting you in regards to an opportunity with our company in the [Midwest City] area.&lt;/p&gt;
&lt;p&gt;Please let me know if you would be interested.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Jack Flowers&lt;/p&gt;
&lt;p&gt;Recruiter&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It also included a link to Critical Mass&amp;rsquo;s website, Jack&amp;rsquo;s phone numbers, the company byline and some best place to work in the state award. First instinct was to delete (I get about 20 of these a week). Instead I decided to let Jack know why I wasn&amp;rsquo;t interested:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Jack,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Imagine you received an unsolicited two-line email that said the following:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;I&amp;rsquo;m contacting you in regards to being a candidate for an opportunity with your company in the Indianapolis area. Please let me know if you would be interested&amp;rdquo;&lt;/p&gt;
&lt;p&gt;What would happen to that email? You&amp;rsquo;ve provided me no information about your company, or the opportunity. So no you haven&amp;rsquo;t piqued my interest at the moment.&lt;/p&gt;
&lt;p&gt;--Mike&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don&amp;rsquo;t &lt;strong&gt;think&lt;/strong&gt; I was very mean with the statement. I attempted to point out why this Jack&amp;rsquo;s email didn&amp;rsquo;t make the cut to get a response from me. It&amp;rsquo;s like Jack expected me to follow the link (which I did and it appears to be a run of the mill technology consulting firm) and dive around the company&amp;rsquo;s job board to guess which project Jack had in mind for me. I guess that works for some people. I wonder how it would work as a pick up line:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Hi, I have an opportunity to sleep with me tonight. Let me know if you&amp;rsquo;re interested.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I saw a response from Jack and was hoping that it would contain more information:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Michael:&lt;/p&gt;
&lt;p&gt;Sorry to hear that.&amp;nbsp; We are an amazing company and should your interest ever be piqued to hear more, do give me a call.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Jack Flowers&lt;/p&gt;
&lt;p&gt;Recruiter&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Guess my message flew right over Jack&amp;rsquo;s head. Against my better judgment I replied to Jack after looking at the company site and seeing some information about Jack. It appears Jack had worked at a company that I had a lot of good experience with. Here&amp;rsquo;s the ironic part about Jack&amp;rsquo;s profile (emphasis mine)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Jack&amp;#39;s role is to locate, interview and hire top talent to Fusion. &lt;strong&gt;Written as well as verbal communication is crucial to Jack&amp;rsquo;s success&lt;/strong&gt; as is networking within the IT community. Writing is a hobby of Jack&amp;#39;s and he once [worked for a company that I am familiar with and fond of]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I took some time to compose a thoughtful response explaining why Jack was failing to attract me.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Jack,&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to help you here because you seem like a nice person (I read on the Critical Mass Blog that you used to write for Acme Corp. They were one of the first ___ companies out there. [Insert anecdote about my experience with Acme Corp here]) What I was getting at is that you haven&amp;rsquo;t told me anything about Critical Mass or how you think I might be a good fit for you or what would attract a person like me to your company. To me the employment process is a two way activity, somewhat similar to dating. I get 20 emails just like yours a week. And countless more that provide just a cursory description of the job and/or company. And normally, I delete them because I don&amp;rsquo;t have the time.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure what made me respond to you, or to look at your website because I normally don&amp;rsquo;t do either. But here we are. In the real world, you don&amp;rsquo;t get a second chance to make a good impression. Here&amp;rsquo;s your third. Tell me about Critical Mass. How did you find me? What about my profile, resume, background, etc. makes you feel that I would be a good fit with your organization? I know that it&amp;rsquo;s possible that you get responses to your original email (otherwise I doubt you would be where you are now). But think about who it is who would respond to that message. It&amp;rsquo;s possible you&amp;rsquo;ll get a few good candidates that way. But more likely you&amp;rsquo;ll find someone who will jump on the first opportunity presented because they said yes. The very best candidates aren&amp;rsquo;t even going to give your message a second look. True, the effort of writing a customized email to an individual candidate takes more time but it will also make you focus on whether that person is worth the effort or not. Having less candidates in the pipe is a good thing because you&amp;rsquo;re spending less time communicating with a candidate who&amp;rsquo;s likely to go nowhere in the recruitment process.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d suggest asking some of your tech staff to help screen resumes for you. They would help you cut through the chaff and find a higher ratio of qualified candidates. If you&amp;rsquo;d like I could help screen for a nominal rate. Either way, I&amp;rsquo;ll be waiting for your response.&lt;/p&gt;
&lt;p&gt;--Mike&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I could be wrong with my interpretation but I did not attempt to come across as arrogant. I just told Jack again that it takes a little more to attract me. I&amp;rsquo;m not a cheap date. I even took the first step in finding out more about Jack and gave Jack something to start the conversation off with. I was sincerely hoping to start a meaningful discussion there. I guess I didn&amp;rsquo;t do well with my written communication skills:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Michael:&lt;/p&gt;
&lt;p&gt;Thank you for your response and for your insight.&amp;nbsp; I have been very successful here at Critical Mass for 7 years and for a number of years in this industry to need advice on how to do my job.&amp;nbsp; I have hired many quality people to our firm (we have about 240 consultants on staff) and will continue to do so to need or want advise from someone that I have reached out to&amp;nbsp; speak with about an opportunity.&lt;/p&gt;
&lt;p&gt;I am sure that you are successful with your current role and would be insulted if I tried to tell you without knowing the first thing about your role or company, how &amp;ldquo;better&amp;rdquo; to do that.&lt;/p&gt;
&lt;p&gt;Best of luck to you.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Jack Flowers&lt;/p&gt;
&lt;p&gt;Recruiter&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;First let me remind you that the only alterations I did to these are changing/obscuring names. So the multiple grammatical errors (possibly because Jack was insulted that I tried to tell him &amp;ldquo;without knowing the first thing about his role or company&amp;rdquo;) are all Jack&amp;rsquo;s. There&amp;rsquo;s those written communications skills Jack touts on display again. Let&amp;rsquo;s forgive the fact that Jack &lt;strong&gt;assumed&lt;/strong&gt; (rightly in this case) that I had no recruiting experience. Jack missed the point of my prior email altogether. So I sent a final reply to explain to Jack what I was getting at:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As I said, I&amp;rsquo;m sure that the way you&amp;rsquo;ve been doing things work. I sense hostility in your response, all I was trying to do was give constructive criticism. As I mentioned, for me with fifteen years of experience and recruiters sending emails left and right it takes a little more to capture my attention. That was my second attempt to ask you to provide a little more information than you did. Obviously you preferred to take offense to a suggestion on how to streamline your recruitment process rather than sell me on your company.&lt;/p&gt;
&lt;p&gt;I know a number of highly qualified individuals. And to a man they say that unless they are in dire straits the kind of email you sent me goes straight in the trash. Keep on spamming out one-line emails. I&amp;rsquo;m sure you&amp;rsquo;re getting a lot of &amp;ldquo;quality&amp;rdquo; recruits that way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes I did get a little acerbic with my last comment. But as I said, it&amp;rsquo;s insulting to me that employers expect an essay showing that I&amp;rsquo;ve researched them and how much you&amp;rsquo;ll be a great fit with their culture but they&amp;rsquo;ll have the nerve to send out the employment equivalent of &amp;ldquo;Nice shoes. Let&amp;rsquo;s !&amp;rdquo; and expect me to jump at the chance. And here&amp;rsquo;s Jack&amp;rsquo;s last response&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;No hostility intended as I am far too busy talking to and hiring quality people to our company to be bothered by unwanted criticism.&amp;nbsp;&amp;nbsp; Just wanted to respond back and will not be doing so after this email is sent.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure there is someone reaching out to you that gets lucky enough to &amp;ldquo;capture&amp;rdquo; your attention.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Jack Flowers&lt;/p&gt;
&lt;p&gt;Recruiter&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In fact, I&amp;rsquo;ve engaged with a number of recruiters who were considerate enough not to waste my time with a two sentence email. The type of projects I work on make those engagements quite lucrative for both parties (the recruiter and me). I understand how the business works and I&amp;rsquo;m a bit discriminating in whom I&amp;rsquo;ll work through. It makes me question what kind of company would want to hire a person who jumps on the first email that mentions some vague unknown &amp;ldquo;opportunity&amp;rdquo;. I guess that&amp;rsquo;s how the industry works. And people wonder why IT projects fail at such alarming rates. Final note: as everyone knows, just because you&amp;rsquo;re good at what you do, doesn&amp;rsquo;t mean you can&amp;rsquo;t take the time to be better.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=10331" width="1" height="1"&gt;</description></item><item><title>IQueryable&lt;T&gt; and IUnitOfWork Revisited</title><link>http://azurecoding.net/blogs/brownie/archive/2011/05/25/iqueryable-lt-t-gt-and-iunitofwork-revisited.aspx</link><pubDate>Wed, 25 May 2011 10:43:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:10328</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;So I&amp;rsquo;m on a pretty cushy government contract (turns out that if you want to have a low stress job in software development, taking a public sector job is the way to go) right now. Microsoft stack all the way down except&amp;hellip;Oracle on the backend (*doh*). I have become an EF Code First Zen Master (cutting my teeth on the various CTPs as they were released) and love how well it stays out of my way. My IQueryable&amp;lt;T&amp;gt;/IUnitOfWork combo that I &lt;a target="_blank" href="http://azurecoding.net/blogs/brownie/archive/2010/09/22/irepository-lt-t-gt-and-iunitofwork.aspx"&gt;blogged about before&lt;/a&gt; have become my bread and butter in creating rich domain models mapped to a database. I was really dreading giving that advantage up. I got approval from the manager to use &lt;a target="_blank" href="http://nhforge.org/"&gt;NHibernate&lt;/a&gt; which provides a great LINQ implementation out of the box and decided to try it out using NH.&lt;/p&gt;
&lt;p&gt;If you recall, because of the design, the only element of the combo that even cares about persistence is the concrete unit of work implementation. So far I have an InMemoryUnitOfWork (for mocking/testing purposes), and an EfUnitOfWorkBase (that manipulates a DbContext), now I need to make an NhUnitOfWork.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NhibernateUnitOfWorkBase:IUnitOfWork
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; ISession _session;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; NhibernateUnitOfWorkBase(ISession session)
        {
            _session = session;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Commit()
        {
            _session.Flush();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Attach&amp;lt;T&amp;gt;(T obj) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;
        {
            _session.Update(obj);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Add&amp;lt;T&amp;gt;(T obj) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;
        {
            _session.Save(obj);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; IQueryable&amp;lt;T&amp;gt; Get&amp;lt;T&amp;gt;() &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; _session.Query&amp;lt;T&amp;gt;();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Remove&amp;lt;T&amp;gt;(T item) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;
        {
            _session.Delete(item);
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        }
    }&lt;/pre&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it. I tested it out by making swapping the EfUnitOfWork in &lt;a target="_blank" href="http://azurecoding.net/blogs/brownie/archive/2011/04/18/this-is-azure-coding-after-all.aspx"&gt;Pigskin&lt;/a&gt; with this one and configuring the mapping for NHibernate (which for the most part only needed a few explicit configurations). Bada-bing, bada-boom, I&amp;rsquo;ve switched O/RMs just like that. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=10328" width="1" height="1"&gt;</description></item><item><title>Bigotry and Software</title><link>http://azurecoding.net/blogs/brownie/archive/2011/05/21/bigotry-and-software.aspx</link><pubDate>Sat, 21 May 2011 14:22:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:10292</guid><dc:creator>Mike Brown</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;This may sound like it&amp;rsquo;s a post about race/gender tensions in the industry. I&amp;rsquo;m not quite ready to tackle that topic just yet. What I&amp;rsquo;m talking about is language/platform bigotry. And to me it&amp;rsquo;s as idiotic as cultural bigotry. I&amp;rsquo;ve sat back and listened to various arguments against Windows and Microsoft products for years. Sometimes when I see that the person actually would be open to logical discourse, I will engage with them. Many times it&amp;rsquo;s not even worth discussion: they are as blinded by unmitigated hatred for all things Microsoft as a neo-Nazi is toward&amp;hellip;well practically everyone but themselves. I used to write it off as some kind of technology non-conformist club. Then I saw &lt;a target="_blank" href="http://blog.expensify.com/2011/03/25/ceo-friday-why-we-dont-hire-net-programmers/"&gt;this post&lt;/a&gt; on the expensify blog.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll save you the trouble of following the link by summarizing it here: anyone who uses the Microsoft platform for development can&amp;rsquo;t possibly be a good developer or the chances are very slim that they are. Let&amp;rsquo;s look at his reasoning, item by item with a clear head. Actually the argument is so full of metaphors it&amp;rsquo;s hard. Something about .NET being the McDonald&amp;rsquo;s of the development world and he wants a 1.7 oz. burger instead of a 1.6 oz. burger (personally I&amp;rsquo;d have to question anyone who thinks a burger smaller than six oz. is satisfying). His argument is that .NET developers can&amp;rsquo;t think outside the box enough for the needs of a startup. He says that the .NET platform is designed for incremental changes not the revolutionary leaps that a startup needs. He argues that although .NET allows you to get started quickly, the framework makes it difficult to step outside of the scenarios it&amp;rsquo;s designed for. .NET development to him is a matter of clicking a few buttons and out pops a fully working application. He also argues that the .NET community doesn&amp;rsquo;t embrace open source. He also says that the majority of startups don&amp;rsquo;t use .NET for development (somehow implying that it validates his statement that .NET is not a good platform for startups). In addition he makes some claims that make it patently obvious that he hasn&amp;rsquo;t even used Microsoft platforms beyond surfing the web and making powerpoint slides &lt;span style="color:#ff0000;"&gt;(my notes in red)&lt;/span&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Big things, like obscuring the networking stack under so many countless layers of abstraction that it&amp;rsquo;s virtually impossible to even imagine what bytes are actually going over the wire &lt;span style="color:#ff0000;"&gt;(ever hear of &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.net.sockets.aspx"&gt;System.Net.Sockets&lt;/a&gt;)&lt;/span&gt;. And a thousand other things in between: programming tools that generate a dozen complex files before you even write your first line of code&lt;span style="color:#ff0000;"&gt; (if only there was an &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/sw2c06y2(v=VS.80).aspx"&gt;empty project template&lt;/a&gt; in visual studio&amp;hellip;oh wait there is now let me import the frameworks, create a global.asax page, write my web.config file, setup my MVC routes, add jQuery.js, and my CSS file, and a MasterPage &lt;strong&gt;now&lt;/strong&gt; I can start writing code.)&lt;/span&gt;, expensive servers that force a remote GUI terminal on you to do essentially anything despite a few keystrokes being perfectly adequate for everybody else &lt;span style="color:#ff0000;"&gt;(if only there were a way to remotely manage my windows server or some kind of &lt;a target="_blank" href="http://technet.microsoft.com/en-us/windows/dd443653.aspx"&gt;remote shell&lt;/a&gt;) &lt;/span&gt;, &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It almost sounds like he&amp;rsquo;s complaining that .NET makes it convenient to do common things. Oh my God I wonder how good of a housekeeper that person is&amp;hellip;they use a washing machine instead of scrubbing their clothes on a scrub-board in a tub of water. Gotta question how well that guy drives&amp;hellip;his car has anti-lock breaks, power steering, and traction control. Even more pathetic is that everything he claims Microsoft tools don&amp;rsquo;t have IS RIGHT THERE! Now let&amp;rsquo;s discuss the rest of his hole-ridden argument.&lt;/p&gt;
&lt;p&gt;First let&amp;rsquo;s talk about the &amp;ldquo;revolutionary&amp;rdquo; expensify application. It generates expense reports from online credit card statements. I&amp;rsquo;m sorry but that doesn&amp;rsquo;t quite pass my &amp;ldquo;wow&amp;rdquo; test. Revolutionary is a computer that can &lt;a target="_blank" href="http://www.bing.com/videos/search?q=watson+jeopardy&amp;amp;qpvt=watson+jeopardy&amp;amp;FORM=VDRE"&gt;beat Jeopardy champions&lt;/a&gt; at their own game, or a &lt;a target="_blank" href="http://kinecthacks.net/"&gt;$150 piece of hardware&lt;/a&gt; that enables gesture-based interaction, even a &lt;a target="_blank" href="http://www.heroku.com/"&gt;service that lets you do a git push&lt;/a&gt; and see your website running a &lt;a target="_blank" href="http://appharbor.com/"&gt;few minutes later in the cloud&lt;/a&gt;. There&amp;rsquo;s nothing I&amp;rsquo;d call revolutionary about &lt;a target="_blank" href="https://www.mint.com/"&gt;screen scraping a credit card statement&lt;/a&gt; and parsing it. And that&amp;rsquo;s what I really want to get to. Doing something that&amp;rsquo;s been solved already is the PERFECT time to pick a tool that does all the crappy stuff for you and lets you get to adding value quicker.&lt;/p&gt;
&lt;p&gt;The argument that it&amp;rsquo;s hard to break out of the box on the .NET platform had more merit 3-4 years ago for web applications (Web Forms did require a lot of skill to implement new controls or even override behavior on existing controls). And WPF wiped out that argument for the desktop more than 5 years ago. Today, that argument doesn&amp;rsquo;t hold water. Web or desktop, the .NET platform is all about doing the tedious work for you and getting out of the way so you can add your &amp;ldquo;ground breaking&amp;rdquo; changes.&lt;/p&gt;
&lt;p&gt;Speaking of &lt;a target="_blank" href="http://www.asp.net/mvc"&gt;ASP.NET MVC&lt;/a&gt;, it&amp;rsquo;s &lt;a target="_blank" href="http://aspnet.codeplex.com/releases/view/58781"&gt;open source&lt;/a&gt;. As is &lt;a target="_blank" href="http://www.mono-project.com/Main_Page"&gt;Mono&lt;/a&gt; (the .NET implementation that Attachmate is apparently killing). &lt;a target="_blank" href="http://ironruby.net/"&gt;Iron Ruby&lt;/a&gt; is an open source implementation of Ruby for the .NET platform including full integration with Visual Studio. &lt;a target="_blank" href="http://nhforge.org"&gt;Hibernate&lt;/a&gt;, &lt;a target="_blank" href="http://www.springframework.net/"&gt;spring&lt;/a&gt;, &lt;a target="_blank" href="http://quartznet.sourceforge.net/"&gt;quartz&lt;/a&gt;, and dozens of other open source frameworks have been ported to .NET. There are over 5000 open source projects listed on &lt;a target="_blank" href="http://www.codeplex.com/"&gt;Codeplex&lt;/a&gt; as stable. &lt;a target="_blank" href="http://monodevelop.com/"&gt;MonoDevelop&lt;/a&gt; and &lt;a target="_blank" href="http://www.sharpdevelop.com/OpenSource/SD/Default.aspx"&gt;SharpDevelop&lt;/a&gt; are open source IDEs built on and targeting .NET. To say that the .NET community doesn&amp;rsquo;t foster open source is either ignorant (as in not being aware) or deceitful (knowing and purposely pretending not to). Either way, it makes me question the technical acumen of someone making those statements.&lt;/p&gt;
&lt;p&gt;Moving on to the argument that most startups don&amp;rsquo;t use .NET. It&amp;rsquo;s very easy to see why. When given a choice between two platforms, most decision makers in a startup will choose the &amp;ldquo;free&amp;rdquo; one. Think of it this way&amp;hellip;if I&amp;rsquo;m a college kid making Facebook, I probably don&amp;rsquo;t have 10000 dollars to buy an MSDN subscription. In addition, most web hosts charge a premium for .NET hosting. What it boils down to is that the low adoption rate for .NET in the startup world is a sign of frugality, not a reproach of the technical merit of the platform. Microsoft is doing a lot to lower the barrier of entry. The &lt;a target="_blank" href="https://www.dreamspark.com/default.aspx"&gt;Dreamspark&lt;/a&gt; program provides free MSDN subscriptions to students (this subscription includes usage on the Azure platform). &lt;a target="_blank" href="http://www.bizspark.com"&gt;Bizspark&lt;/a&gt; provides 3 years of MSDN Subscriptions for multiple developers to startups plus corporate use licenses for Windows, Office, and other Microsoft apps for running the business. While it may be true that today .NET isn&amp;rsquo;t the dominant platform in the startup community, Microsoft has removed the cost barrier. If more people are aware of these programs, let&amp;rsquo;s see which one they choose.&lt;/p&gt;
&lt;p&gt;Finally, we come to the argument that .Net experience on a resume makes a developer suspect. This is why I used the term bigotry. It&amp;rsquo;s very little different from saying that a black person or a woman will have to work harder to prove themselves worthy of a job with your company. Of course choice of development platform isn&amp;rsquo;t a protected status; but it is a POOR discriminator for what makes a &amp;ldquo;good&amp;rdquo; developer versus a &amp;ldquo;bad&amp;rdquo; developer. &lt;/p&gt;
&lt;p&gt;As a startup I want to know what kind of experience a developer has had with scale (unless you have no intention of being successful, it&amp;rsquo;s a bit important). Using Ruby, PHP, or Java doesn&amp;rsquo;t guarantee you know anything more than the next guy about scalability. Using .NET doesn&amp;rsquo;t mean you know any less. Also important is how well the candidate is at algorithms and optimization (again a 1 second query over ten thousand records turns into practically 2 minutes over a million). Ruby, PHP, and Java doesn&amp;rsquo;t make you any better at this than .NET. So basically the things that matter &amp;ndash; algorithms, scalability, creativity &amp;ndash; the stuff that makes your startup different is not impacted by choice of platform. In fact, I would be more impressed by a developer who found creative solutions to work around limitations of the .NET framework.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t care what platform you&amp;rsquo;ve used, I care about what challenges you&amp;rsquo;ve taken on. I care what attitude you take about your profession. Do you punch in 9-5 and don&amp;rsquo;t think about computers after (nothing inherently wrong just obviously not the right mindset for a startup) or are you so passionate that you write code just to keep your skills sharpened like a razor. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p align="left"&gt;&lt;strong&gt;Sidenote:&lt;/strong&gt; Many corporate developers take the 9-5 attitude. Microsoft is the leading platform in the corporate world. Standard corporate development doesn&amp;rsquo;t break outside the box. I actually think this is what he&amp;rsquo;s trying to say but instead of saying that he makes flawed arguments about the technical capabilities of the Microsoft stack. .NET isn&amp;rsquo;t allergic to Open Source&amp;hellip;corporate and government IT is allergic to Open Source. There are many .NET developers who don&amp;rsquo;t follow the corporate mold. You&amp;rsquo;d be better off looking for and hiring them than some guy who shuns Microsoft because all the cool kids are on Macs programming Ruby.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I care that you&amp;rsquo;re not some know-it-all *** who thinks that you&amp;rsquo;re the smartest programmer on the planet even if you are (software is a team sport, you can bring individual performers together all you want, until they learn how to work as a team, you&amp;rsquo;re not going to win a championship). And I definitely care that you take the time to actually research your assumptions before you make them, or that when you realize you&amp;rsquo;re wrong you&amp;rsquo;re man (or woman) enough to accept it. These things are more important to a startup than what platform you&amp;rsquo;re using. &lt;/p&gt;
&lt;p&gt;That and having someone at the helm that actually has a clue of what he&amp;rsquo;s talking about.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=10292" width="1" height="1"&gt;</description></item><item><title>This IS Azure Coding After All</title><link>http://azurecoding.net/blogs/brownie/archive/2011/04/18/this-is-azure-coding-after-all.aspx</link><pubDate>Mon, 18 Apr 2011 09:42:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:10054</guid><dc:creator>Mike Brown</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Today&amp;rsquo;s post is going to take a decidedly different angle. I&amp;rsquo;m going to actually talk about coding for Windows Azure. I know, I know. After two years of posts with nary an Azure sample in sight, why should I start now? I feel that now more than ever, making the decision to leverage the Azure platform is for all practical purchases a non-decision. Creating an application to deploy to Azure is as easy as creating an application to any other webhost. In some regards it&amp;rsquo;s easier.&lt;/p&gt;
&lt;p&gt;What prompted me to take the plunge was &lt;a target="_blank" href="http://www.codeproject.com/Competitions/460/Windows-Azure-Marketplace-The-DataMarket-Contest.aspx"&gt;Code Project&amp;rsquo;s Azure DataMarket Contest&lt;/a&gt;. After looking around at the available datasets, I came across the Stats, LLC NFL and MLB Stats feeds. I&amp;rsquo;ve wanted to learn ASP.NET MVC3 for a while, and make a Windows Phone App while making a program that takes advantage of all that Azure has to offer&amp;hellip;I can&amp;rsquo;t find much better than an NFL Statistics app. (It also might give me a chance to learn some data-mining/data warehousing skills). Not to mention there was a nice prize involved.&lt;/p&gt;
&lt;p&gt;So without further ado, let me introduce &lt;a target="_blank" href="http://pigskin.kharasoft.net/"&gt;Pigskin&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/newpigskin_5F00_08118317.png"&gt;&lt;img height="470" width="644" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/newpigskin_5F00_thumb_5F00_28D545FE.png" alt="newpigskin" border="0" title="newpigskin" style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Right now Pigskin shows &lt;a target="_blank" href="https://datamarket.azure.com/dataset/d0564ad0-ef56-43b6-a552-941b29e55e41"&gt;NFL game by game statistics&lt;/a&gt; from the &lt;a target="_blank" href="https://datamarket.azure.com/"&gt;Azure Datamarket&lt;/a&gt;. The only data currently in place is from the 2010 season. I will be adding MLB Live and Game By Game stats as well soon (and perhaps changing the name since Pigskin doesn&amp;rsquo;t really make sense when talking about baseball). Rather than pulling data on each request and formatting it, I currently dump the data into a SQL Azure database and use Entity Framework queries to pull the information into a format ready for consumption by the web page. Because of the generic nature of the data structures, the queries take some time to run so I&amp;rsquo;m adding code to take advantage of the AppFabric Caching service and will also use the Azure Table Storage to dump the views into a format that is de-normalized and more efficient for reading. &lt;/p&gt;
&lt;p&gt;The interesting thing is how rapidly I have been able to iterate and add features to the site using the Microsoft stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ASP.NET MVC 3 &lt;/li&gt;
&lt;li&gt;Entity Framework 4.1 Code First API &lt;/li&gt;
&lt;li&gt;Windows Azure &lt;/li&gt;
&lt;li&gt;SQL Azure &lt;/li&gt;
&lt;li&gt;Azure Datamarket &lt;/li&gt;
&lt;li&gt;Azure Blob Storage &lt;/li&gt;
&lt;li&gt;Azure Table Storage &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Case in point here is one of the earlier versions of the same Game Details screen&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/oldpigskin_5F00_2D6B50B8.png"&gt;&lt;img height="388" width="644" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/oldpigskin_5F00_thumb_5F00_12BEB49F.png" alt="oldpigskin" border="0" title="oldpigskin" style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can see it was very much a vanilla ASP.NET MVC site and I had only exposed a few key points of data. I went from this page to the new design very rapidly. This included updating the color schemes and layout and displaying more data from the database. Interesting fact, I didn&amp;rsquo;t change the schema at all between the two revisions, and the new version gets all of its data with a single query.&lt;/p&gt;
&lt;p&gt;I will be making the code for Pigskin available under the MS-PL so that the community can see the guts of the application and learn how to leverage Azure for their next great app. I will update this post when I make the code available. I will also be following up with a series of blog posts discussing various aspects of the application.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=10054" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Azure/default.aspx">Azure</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/DataMarket/default.aspx">DataMarket</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Pigskin/default.aspx">Pigskin</category></item><item><title>How “Done” Is WPF?</title><link>http://azurecoding.net/blogs/brownie/archive/2011/03/02/how-done-is-wpf.aspx</link><pubDate>Thu, 03 Mar 2011 02:00:35 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:9583</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Recently, Michael Neel (&lt;a href="http://twitter.com/#!/vinull" target="_blank"&gt;@vinull&lt;/a&gt; on twitter) made an interesting statement on Twitter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I love WPF but it still feels only 50% implemented - Ex. why is there no built in support for closing a tab in the TabControl?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It sparked off a long discussion on a private mailing list. I joined in the conversation very belatedly with this post:&lt;/p&gt;  &lt;p&gt;Funny thing, you don&amp;#39;t hear web developers complaining that Ruby on Rails or ASP.NET MVC doesn&amp;#39;t come with control x or feature y out of the box. I&amp;#39;ve said it many times that WPF is more akin to a web framework than a desktop framework. People coming from Winforms where everything is RAD RAD RAD expect a rich toolbox primed and ready for them because it&amp;#39;s a pain in the ass to implement your own feature if Winforms is missing it. The simple fact is that with WPF it is easier to customize a control to fit your needs. Web Developers are used to this (well as long as they aren&amp;#39;t coming from Web Forms). WPF developers with experience are used to this as well. I&amp;#39;ve come to realize that the difficulty in learning WPF is more of a difficulty in unlearning Winforms.    &lt;br /&gt;&amp;#160; &lt;br /&gt;With regards to an official MVVM framework, while Microsoft could develop a prescriptive framework for MVVM (in fact Acropolis was an aborted effort at such), I don&amp;#39;t think it&amp;#39;s worthwhile. ASP.NET MVC was necessary because Web Forms, despite the loud arguments to the contrary abstracted too much to support such a thing. Case in point the Web Client Software Factory used MVP instead of MVC because Web Forms pretends to be stateful. ASP.NET MVC is to web forms what WPF is to Win Forms. The Separated Presentation is more explicit for consumers of the web framework than for WPF...but as has been discussed MVVM is the CORE of WPF.    &lt;br /&gt;&amp;#160; &lt;br /&gt;Looking at both perspectives, I feel that WPF is where it needs to be with regard to controls and pattern support. Could there be more? Sure but features aren&amp;#39;t free. I&amp;#39;d prefer the time be spent improving the foundation (e.g. performance, airspace, better DirectShow integration) as only Microsoft can do. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=9583" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/WPF/default.aspx">WPF</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/MVVM/default.aspx">MVVM</category></item><item><title>How to Convince Management to Clear Some Technical Debt</title><link>http://azurecoding.net/blogs/brownie/archive/2011/02/07/how-to-convince-management-to-clear-some-technical-debt.aspx</link><pubDate>Mon, 07 Feb 2011 15:28:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:9401</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This is a common question I hear. The general sentiment expressed is “I want to do things the right way, but management won’t approve.” The person asking the question usually leaves out the details of what clearing out technical debt entails. Digging deeper, you usually find that the person wants to spend a few weeks cleaning up code. No one in their right mind would sign off on that.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Sure Bill, we’re a month out from delivery but you’ve convinced me that it’s worth while to let you spend the next two weeks re-working existing code instead of adding new features to the system.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now Bill has grandiose schemes about building a rich domain layer using IOC and fluent interfaces with loosely coupled REST services and an event driven CQRS infrastructure. Once he gets that in place, he can start “refactoring” the old code to use the new super-duper framework. Then going forward, development will be so much faster! &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[Two weeks later:] “Bill, show me what you’ve been working on, we’re really excited about the opportunities to speed up development this will bring.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Bill shows his manager a basic O/RM that he built by hand because it would have taken too long to integrate one of the existing solutions. Unfortunately, it only works in a very specific scenario and relies on a direct mapping between properties on the class and columns on the database. He tries to show his manager how it works with a simple demo (he didn’t have time to do test driven development so he cant just show a test suite). And of course it crashes spectacularly. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Oh, I forgot to check for IsDbNull for nullable columns.” Bill realizes he painted himself into a corner. “This will take a day or two to fix.”&lt;/p&gt;    &lt;p&gt;“We don’t have a day or two, we need you working on features, the deadline is approaching.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Frustrated because he was so close to getting everything working, Bill goes back to working on stories, lamenting that the work would be so much easier if his manager would just give him time to fix the framework.&lt;/p&gt;  &lt;p&gt;If this sounds familiar to you, stop! &lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;YOU’RE DOING IT WRONG&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;First of all, I think people get the wrong idea when they hear the term technical debt. Poorly written code is not technical debt, bad code is more like a technical slum. You know what I’m talking about:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Thousand line functions &lt;/li&gt;    &lt;li&gt;God classes that do everything &lt;/li&gt;    &lt;li&gt;Poorly named variables and functions &lt;/li&gt;    &lt;li&gt;Five levels of if nesting &lt;/li&gt;    &lt;li&gt;Feeping creaturitis &lt;/li&gt;    &lt;li&gt;Pattern fever &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If this is what you deal with on a daily basis, you don’t have technical debt, your code should be condemned. You’ve still got an impending deadline and more work to do, so throwing it out is not an option. But cleaning up as you go is. When writing code, Uncle Bob suggests that we follow the simple boy scout rule: Leave each campsite better than when you arrived. Our task when faced with unmanageable, hideous code is simple, clean up as we go along. &lt;/p&gt;  &lt;p&gt;Take that one thousand line function that you need to comprehend in order to fix a bug. Instead of just trying to wedge the fix in there and pray that it works, cover the function with unit tests and refactor it into smaller methods. (Resharper’s extract method refactoring comes in very handy for this task.) At the very worst if you break something it will be a lot easier to isolate and track down the bug. Assuming you have successfully performed the refactoring, go ahead and write a unit test for the bug fix and make it go green. (This is the gist of Michael Feathers’ &lt;u&gt;Working Effectively with Legacy Code&lt;/u&gt;).&lt;/p&gt;  &lt;h2&gt;But I have REAL Technical Debt&lt;/h2&gt;  &lt;p&gt;So you’ve been writing Clean Code with good unit test coverage and the like but haven’t been refactoring where appropriate? Well the same rules apply to you, except you might have a slightly easier path than the guy in the code slum. When you touch existing code for a bug fix or to add a feature, look at ways to make it better. If you have test coverage, you can refactor with impunity, before or after you make the change (just be sure to add tests for the new/changed functionality).&lt;/p&gt;  &lt;h2&gt;That’s Great but How Do I Get Approval&lt;/h2&gt;  &lt;p&gt;Plain and simple, you don’t. When a manager asks for your estimate for a task (you DO give input into how long a task will take? If not you have bigger problems than technical debt), make sure you take into account the time it will take to refactor/clean up the code you’ll be dealing with. No one is going to give you cart blanche to go on an architectural fiasco. But it should be expected that you are improving the code you work on instead of just sticking a finger in a leaky damn.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=9401" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Personal+Development/default.aspx">Personal Development</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Agile/default.aspx">Agile</category></item><item><title>Inspiration for MVVM Unleashed</title><link>http://azurecoding.net/blogs/brownie/archive/2011/01/13/inspiration-for-mvvm-unleashed.aspx</link><pubDate>Thu, 13 Jan 2011 05:51:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:9054</guid><dc:creator>Mike Brown</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;There are a number of timeless books that you’ll hear mentioned in technology circles. They are respected as treasure troves of information for the software craftsman looking to hone his skill. I have a confession to make. While I have referenced these books and discussed their ideas in conversations. Many of them I hadn’t taken time to read. There are a few that I had read cover to cover e.g. Gang of Four &lt;a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201633612" target="_blank"&gt;Design Patterns&lt;/a&gt;, Fowler’s &lt;a href="http://www.amazon.com/gp/product/0321127420?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321127420" target="_blank"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt; (which I referenced heavily in my &lt;a href="http://msdn.microsoft.com/en-us/magazine/ee336308.aspx" target="_blank"&gt;MSDN Article&lt;/a&gt;). And some that I had read enough to get a good understanding (Eric Evans &lt;a href="http://www.amazon.com/gp/product/0321125215?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321125215" target="_blank"&gt;Domain Driven Design&lt;/a&gt;). And still others that I flat out hadn’t read. Like &lt;a href="http://www.amazon.com/gp/product/0132350882?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0132350882" target="_blank"&gt;Clean Code&lt;/a&gt;; &lt;a href="http://www.amazon.com/gp/product/0321213351?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321213351" target="_blank"&gt;Refactoring to Patterns&lt;/a&gt;; &lt;a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=020161622X" target="_blank"&gt;The Pragmatic Programmer&lt;/a&gt;; and Uncle Bob’s &lt;a href="http://www.amazon.com/gp/product/0135974445?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0135974445" target="_blank"&gt;Principles, Patterns, and Practices&lt;/a&gt;. I took two weeks off at the end of 2010 and downloaded the last four to my Kindle (well I bought the physical edition of triple P because it’s not available on Kindle in either the Java or C# edition).&lt;/p&gt;  &lt;p&gt;I started by reading the intros to all of the books and their first chapters. Then I honed in on Clean Code and Refactoring to Patterns since I feel that they harmonize well with the approach I’m taking with my book. I’ve finished Clean Code fully and am a quarter of the way through Refactoring to Patterns (taking copious notes using Kindle’s markup feature). I was pleasantly surprised to find that I had already internalized a lot of the ideas discussed in Clean Code. It was nevertheless enlightening because it made some of the lessons that I had learned more explicit.&lt;/p&gt;  &lt;p&gt;My interest in Refactoring to Patterns came from my inference of what the book would be about from it’s title. It looks like Kerievsky followed the principle of least surprise in naming his book because right off the bat, he said exactly what I had been thinking and planning for MVVM Unleashed:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If you’d like to become a better software designer, studying the evolution of great software designs will be more valuable than studying the great designs themselves. For it is in the evolution that the real wisdom lies. The structures that result from the evolution can help you, but without knowing why they were evolved into a design, you’re more likely to misapply them or over-engineer with them on your next project.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Of course I highlighted that passage and &lt;a href="https://kindle.amazon.com/post/1ZGKZEVETJNXO" target="_blank"&gt;made a comment about it&lt;/a&gt;. I’ve seen MVVM misused very tragically misused. I’ve seen countless cases of people saying that they don’t see the big benefit of MVVM. I’ve encountered misunderstandings of just what MVVM is and what it isn’t. The goal of my book is to impart the knowledge of MVVM, the associated patterns, and its benefits by helping my readers “discover” MVVM for themselves. It’s a lofty goal, but in my eyes it’s attainable. Of course I could just be swinging my sword at a windmill but time will tell.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=9054" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Personal+Development/default.aspx">Personal Development</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/WPF/default.aspx">WPF</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/MVVM+Unleashed/default.aspx">MVVM Unleashed</category></item><item><title>Follow Up on ADHD</title><link>http://azurecoding.net/blogs/brownie/archive/2010/12/21/follow-up-on-adhd.aspx</link><pubDate>Tue, 21 Dec 2010 17:00:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:8744</guid><dc:creator>Mike Brown</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Back in August, I blogged about &lt;a target="_blank" href="http://azurecoding.net/blogs/brownie/archive/2010/08/16/adhd-and-hyperfocus.aspx"&gt;my discovery that I might have ADHD&lt;/a&gt;. Last night, I was chatting with a colleague and he mentioned that he pointed a friend to my previous post who proceeded to see his doctor, received a diagnosis, and is now on medication for ADD. I was mortified because I realized that I hadn&amp;rsquo;t shared my discoveries since writing that post. Let me rectify that situation here.&lt;/p&gt;
&lt;p&gt;I still haven&amp;rsquo;t had an official diagnosis, but after a lot of research on the topic, I do believe that I have ADD. I picked up a number of books discussing adult ADD written by psychiatrists and each of them suggests that rather than &amp;ldquo;treating&amp;rdquo; the condition, it would be better to learn how to adjust for the condition. In fact a number refer to ADD as a gift. Let&amp;rsquo;s start with some background on the condition and discuss what led to my decision not to seek medical treatment for ADD.&lt;/p&gt;
&lt;h2&gt;What Is ADD?&lt;/h2&gt;
&lt;p&gt;Officially, ADD is recognized as a condition in children only. It was believed that you &amp;ldquo;grow out&amp;rdquo; of the condition. However, a number of psychiatrists have recognize that it persists well into adulthood and beyond. According to what I read, the condition is not one of inattentiveness but rather boredom. The ADD brain can process input very rapidly and as such craves more stimulus. Outwardly, it appears that the person isn&amp;rsquo;t paying attention, in reality he can probably repeat the conversation word for word, he has just moved on to processing other things. &lt;/p&gt;
&lt;p&gt;Students in a structured curriculum with this condition will have difficulty because of the repetitive nature of the drills in school. For example, I had a difficult time finishing homework because it was boring to me, not because I didn&amp;rsquo;t understand it but because I didn&amp;rsquo;t feel like doing the same thing 30 times. I would get bad grades in class but do excellent on tests. On a side note, if your child has been diagnosed with ADD (or if you suspect he/she has it), consider alternative education methods, such as the Montessori program, that are more conducive for the ADD student.&lt;/p&gt;
&lt;p&gt;The flip side of ADD is what&amp;rsquo;s coined by many as hyper-focus. Basically, what happens is that if a person with ADD is participating in an activity that truly captures his attention, he will become so focused on the activity that he loses perception of anything around him. Some people describe this phenomenon as &amp;ldquo;entering the zone&amp;rdquo;. &lt;a href="http://en.wikipedia.org/wiki/Mihaly_Csikszentmihalyi"&gt;Mih&amp;aacute;ly Cs&amp;iacute;kszentmih&amp;aacute;lyi&lt;/a&gt; (pronounced Chick-sent-me-hi) described the phenomenon as &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Flow_(psychology)"&gt;Flow&lt;/a&gt;. This is actually something that has interested me heavily even before I discovered ADD.&lt;/p&gt;
&lt;h2&gt;Recommended Reading&lt;/h2&gt;
&lt;p&gt;Here is a list of the books I picked up during my research of my condition.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0684801280/ref=oss_product"&gt;Driven To Distraction : Recognizing and Coping with Attention Deficit Disorder from Childhood Through Adulthood &lt;/a&gt;Edward M. Hallowell, John J. Ratey&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0345442318/ref=oss_product"&gt;Delivered from Distraction: Getting the Most out of Life with Attention Deficit Disorder &lt;/a&gt;Edward M. Hallowell M.D., John J. Ratey M.D.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/1572245654/ref=oss_product"&gt;The Gift of Adult ADD: How to Transform Your Challenges &amp;amp; Build on Your Strengths &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0743264487/ref=oss_product"&gt;You Mean I&amp;#39;m Not Lazy, Stupid or Crazy?!: The Classic Self-Help Book for Adults with Attention Deficit Disorder &lt;/a&gt;Kate Kelly, et al&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/1583913580/ref=oss_product"&gt;ADD-Friendly Ways to Organize Your Life &lt;/a&gt; Judith Kolberg, Kathleen Nadeau&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you believe you may have ADD, I&amp;rsquo;d recommend picking them up (at the very least pick up The Gift of Adult ADD) and reading through them. Discuss with your physician and family and make a fully enlightened decision weighing the pros and cons of taking or refraining from pharmaceutical treatment.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=8744" width="1" height="1"&gt;</description></item><item><title>Why MVVM Unleashed?</title><link>http://azurecoding.net/blogs/brownie/archive/2010/12/20/a-new-ui-principle-zero-code-behind.aspx</link><pubDate>Mon, 20 Dec 2010 17:00:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:8740</guid><dc:creator>Mike Brown</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;As the year comes to a close, I’m taking the last two weeks off from my normal job as a consultant to enjoy time with my family, celebrate the holidays, relax and unwind, and get &lt;a href="http://azurecoding.net/blogs/brownie/archive/2010/12/11/mvvm-unleashed.aspx"&gt;started on my book&lt;/a&gt;. In preparation for writing, I have been poring over a number of works that have helped me grow in my career (either by assimilating the knowledge from second hand summary or by reading them directly). Right now I’m ripping through &lt;a href="http://www.amazon.com/gp/product/0132350882?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0132350882" target="_blank"&gt;Clean Code&lt;/a&gt; on my Kindle (&lt;a href="http://www.amazon.com/gp/product/0135974445?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0135974445"&gt;Principles, Patterns, and Practices&lt;/a&gt; isn’t available for Kindle, but the hard copy is on its way).&lt;/p&gt;  &lt;p&gt;One of my primary motivations for writing MVVM Unleashed is that although I see a lot of development teams attempting to leverage MVVM and its associated patterns, the results are not as promising as one would hope. It seems they understand the mechanics involved but don’t understand the principles or reasoning behind those mechanics. A colleague of mine compared using patterns blindly is akin to unskilled card counting. In the end, you would have been better off not doing it.&lt;/p&gt;  &lt;p&gt;Many object-oriented design patterns exist to help uphold object-oriented principles. We commonly know them as &lt;a href="http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod" target="_blank"&gt;SOLID&lt;/a&gt;. Let me fix that. Many OO design patterns are distilled from efforts to simplify code. (Once is an event, twice is a coincidence, three times is a pattern.) Martin Fowler wrote an entire book on &lt;a href="http://www.amazon.com/gp/product/0321213351?ie=UTF8&amp;amp;tag=ivolvedbusine-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321213351" target="_blank"&gt;refactoring to patterns&lt;/a&gt; -- in fact that’s the name. One could imagine that many of the patterns we take for granted started off as a refactoring from code that broke one or more of the principles to code that adheres to them.&lt;/p&gt;  &lt;p&gt;I’ve found that the best way to truly learn a pattern is to “discover” it for yourself. For an example, I point to my personal “discovery” of the &lt;a href="http://kharasoft.wordpress.com/2007/10/16/the-delegating-command/" target="_blank"&gt;Delegating Command pattern&lt;/a&gt;. Although I later found out that a few people had written about it before me, it was a new pattern for me at the time. Because I had a fundamental understanding of the reason for the pattern’s existence, I knew how and when to apply it.&lt;/p&gt;  &lt;p&gt;As a mentor, I used a “self discovery” method to introduce junior developers to advanced concepts. At the start of a project, I’d introduce them to a coding style leveraging a few simple patterns that enabled them to get traction with the code. After some time, they would come to me with something that was concerning them about the code. A friction or code smell, if you will. It was then that I would introduce to them a technique or pattern to address that specific problem. Eventually, they began to look for patterns on their own that addressed new smells that arose.&lt;/p&gt;  &lt;p&gt;Not only did this approach teach the junior developer different patterns and how to use them; it taught why the pattern was useful; how to refactor code; and how to approach iterative development. I never made tasks to go back and refactor the code that had been written without the pattern. I just gave the advice that the next time that code is visited for whatever reason, take the opportunity to tidy it up for the next guy.&lt;/p&gt;  &lt;p&gt;This is the approach that I am taking with MVVM Unleashed. Rather than giving the reader a tool chest, I am going to show the reader when, why, and how to use each tool to address a specific problem. Hopefully, this will impart a fundamental understanding of the technique and result in UI code that is as clean and maintainable as the code beneath it.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=8740" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/MVVM+Unleashed/default.aspx">MVVM Unleashed</category></item><item><title>MVVM Unleashed</title><link>http://azurecoding.net/blogs/brownie/archive/2010/12/11/mvvm-unleashed.aspx</link><pubDate>Sat, 11 Dec 2010 23:10:27 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:8503</guid><dc:creator>Mike Brown</dc:creator><slash:comments>11</slash:comments><description>&lt;p&gt;As a (relatively) early adopter of WPF and Silverlight, I am also a heavy proponent of the MVVM (or Model-View-View Model) pattern. As a consultant, I have seen a few attempts at using MVVM that bely a basic, but not full understanding of the mechanics of the pattern and how to truly leverage it. Whenever possible, I have given instruction on the pattern and demonstrated basics of how to use it. I have wanted to go deeper into the topic but haven’t had the time to dedicate to truly doing it justice. &lt;/p&gt;  &lt;p&gt;Earlier this year, I wrote an &lt;a href="http://msdn.microsoft.com/en-us/magazine/ee336308.aspx" target="_blank"&gt;article for MSDN magazine&lt;/a&gt; talking about WCF RIA Services and how to apply “best practices” with the framework. There was a lot more that I wanted to cover but couldn’t in that article because I had limited space. So I decided to pitch the topic as a book. My friend &lt;a href="http://blog.galasoft.ch/" target="_blank"&gt;Laurent Bugnion&lt;/a&gt;, author of Silverlight 2 Unleashed (and its follow-up Silverlight 4 Unleashed) and all around awesome guy, put me in touch with his editor. After a few cycles of revisions to an outline that covered the topics in my article in further depth and added more topics to be covered, my editor asked if it were possible to highlight MVVM in the title somehow. I responded, “Why don’t we just write a book on MVVM?” So then I was off to create a new outline that covers MVVM including the patterns that support it and how to leverage the same core code base to move between WPF, Silverlight, and Windows Phone.&lt;/p&gt;  &lt;p&gt;On Thursday, I received news that my proposal had been approved and will be in the Unleashed series. I’m very excited about the opportunity to really dive into the concepts of MVVM and the reasoning behind the pattern. I want to cover both the “how”s and “why”s of leveraging MVVM. As such the format is going to be interesting. Essentially, I will expose the patterns in context of the problems they are intended to solve. I’m very happy with the current layout and feel there will be a lot of content packed in. Being in the Unleashed series puts me in some serious company like Adam Nathan (WPF Unleashed), Laurent, Brennon Williams (Expression Unleashed), Pavan Podilla (WPF Control Development), and Daniel Vaughn (Windows Phone 7 Unleashed) (and those are just within the WPF/Silverlight community). I welcome the challenge to create a book that can stand proudly on the shelf – or preferably on your desk – with these other fine works. Now if you’ll excuse me…these pages aren’t going to write themselves.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=8503" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Articles/default.aspx">Articles</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Personal+Development/default.aspx">Personal Development</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/WPF/default.aspx">WPF</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/MVVM/default.aspx">MVVM</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Book/default.aspx">Book</category></item><item><title>My Windows Phone 7 and I</title><link>http://azurecoding.net/blogs/brownie/archive/2010/11/23/my-windows-phone-7-and-i.aspx</link><pubDate>Tue, 23 Nov 2010 14:00:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:8200</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;If you follow me on &lt;a href="http://twiter.com/browniepoints" target="_blank"&gt;twitter&lt;/a&gt;, you already know I have a Windows Phone 7. You also probably know that I’m mostly pleased with it. For the record, I chose the HTC HD7 partially because I wanted to stay with T-Mobile but mostly because it’s the biggest frackin’ screen available for the platform. I’m not yet past the honeymoon phase with the phone but I can give some early impressions on the device itself, and Windows Phone 7 in general.&lt;/p&gt;  &lt;h2&gt;The Good&lt;/h2&gt;  &lt;p&gt;First off, the platform is delightful and inspiring to me as a developer. Starting with the little things like the way my Xbox live avatar playfully peeks around in the games hub to the subtle vacuum animation when you discard an e-mail draft; and moving to the more obvious features, like the Zune integration not only allowing me to sync with my desktop Zune Software but also letting me use my Zune Pass subscription to download and listen to almost any song on the service over the wire. The Windows Phone does a &lt;strong&gt;lot&lt;/strong&gt; of things right.&lt;/p&gt;  &lt;p&gt;From the moment I powered up my phone and entered my Live ID, things just started lighting up. I had connected my Live ID and Facebook accounts so my phone started pulling in all of my contacts from Windows Live and Facebook &lt;strong&gt;and&lt;/strong&gt; suggested contacts that should be linked. My wife’s Cliq did something similar using the Moto Blur interface over Android. When I added my business email account through Google Apps it pulled contacts and calendar appointments from Google. I wondered why there isn’t Twitter integration in the people hub, but it might be for the best, Facebook updates tend to be lest transient than tweets. Linkedin would be a nice addition though.&lt;/p&gt;  &lt;p&gt;For some reason when I went to the games hub, I had to re-enter my Live ID to connect it to my Xbox Live Account. After that my avatar started visiting me on the Games Hub tile and I was able to see my Achievements on the Games hub. Which by the way is pretty awesome in and of itself. Windows Phone has launched with a pretty nice lineup of Xbox Live Enabled games (no multiplayer yet but Achievements yes and we all know the only reason to play games is for the achievements). I was impressed with Need For Speed Undercover (not enough to buy it) and how they implemented steering, turbo boosts, and drifting using the tilt sensors and simple gestures on the phone. Apparently you can brake too but that feature was wasted on me. There was also some innovation from Ubisoft in bringing the core aspects of Assassin’s Creed to a mobile game. All in all, there are quite a few entertaining games from the major publishers. And if that weren’t enough there are a number of games from independent developers on the phone. And everything looks great on that 4.3 inch screen.&lt;/p&gt;  &lt;p&gt;Moving past the games hub there are a number of applications that came pre-installed on my device including the standard e-mail, messaging, calendar, etc. I was also delighted to find Netflix, T-Mobile TV,&amp;#160; HTC Hub (a collection of apps that are exclusively for the HTC devices), and the T-Mobile Family Room (which looks very useful but only if your family has another Windows Phone from T-Mobile). &lt;/p&gt;  &lt;p&gt;The most impressive app that came pre-loaded was the Office Hub. These aren’t just watered down viewers for Word, Excel, and PowerPoint. You can actually use them to edit your documents. Also, the SharePoint integration is pretty useful for document collaboration. It would be nice to have a way to sync to SkyDrive but I’m sure that’s coming.&lt;/p&gt;  &lt;p&gt;The browsing experience on the phone is delightful. Most of the time you can read a site without zooming in landscape (due to the size of the screen). When you do need to zoom, a double tap usually causes an intelligent zoom so that a div spreads the width of the screen. I haven’t &lt;strong&gt;had&lt;/strong&gt; to use the pinch gesture for zooming, but testing it out, it is very responsive. A lot of devices that support pinch to zoom gestures have a noticeable lag between when the gesture is performed and when the UI responds. That doesn’t exist here.&lt;/p&gt;  &lt;p&gt;The 16 GB of storage is pretty sizeable. I currently have a good chunk of my music library, a few movies that I ripped, and a number of games and apps installed and I still have room to spare. It’s not going to replace a dedicated Media player in terms of raw storage but seriously who needs to have 300 hours of music on hand at all times? Besides, if I have a sudden urge to listen to a song I didn’t sync to the phone, chances are I can bring it down and listen to it in a few seconds using my Zune Pass subscription. &lt;/p&gt;  &lt;p&gt;There’s no physical keyboard on the HD7 but I don’t miss it at all. I had become proficient with the on screen keyboard for my prior phone with a 2.5” screen. I can practically touch type on the HD7’s virtual keyboard. And in the rare case I do fudge a key, the autocomplete comes to the rescue.&lt;/p&gt;  &lt;h2&gt;The Bad&lt;/h2&gt;  &lt;p&gt;The biggest complaint I have about the phone is its piss-poor battery life. This might be due to my usage patterns, but I haven’t been able to go a full day without needing a recharge. Truth be told, I had battery problems with my last phone (an HTC G1) as well. Using a 1250mAh battery for the HD7 is probably more to blame though. It’s not really problematic for me. Between the office, home, and car, I’m never far from a recharge. I’ll let you know how it holds up during my first plane trip.&lt;/p&gt;  &lt;p&gt;The speaker phone is all but useless for me. My wife complains about the echo whenever I turn it on. It’s unfortunate because I’m really conscious about holding it to my ear so I tend to use the headphones when talking on the phone.&lt;/p&gt;  &lt;p&gt;I hate that I have to waste a tile on the phone app. My G1 had a dedicated button for that feature, it would be nice if Microsoft had included that button as one of the required face buttons (it &lt;strong&gt;is &lt;/strong&gt;a phone after all guys). This is a problem that’s universal with the platform, not just the HD7.&lt;/p&gt;  &lt;p&gt;Multiple pages for tiles would have been nice. I don’t have many apps installed but I’ve pinned my most important contacts on the start page. I have to scroll to get to most of my apps. Let me setup “pages” and select what tiles go where (see how Android and iPhone does it).&lt;/p&gt;  &lt;p&gt;I would like to use my Microsoft Points to buy Windows Phone Apps. I use them to buy XBLA games and music for Zune. With Windows Phone 7 coming from the same division, I’d expect to be able to use them for Phone apps as well.&lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;&lt;a href="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/image_5F00_05ADFDA2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" align="left" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/brownie/image_5F00_thumb_5F00_5D8B28B5.png" width="497" height="484" /&gt;&lt;/a&gt;The Ugly&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;You never realize how big a 4.3” screen is until you go back to looking at a 2.5” screen. I turned on my G1 to get some data off of it and couldn’t believe how small everything looked. Looking at the picture to the left, you can see that the entire G1 almost fits within the HD7’s &lt;strong&gt;screen&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;T-Mobile supports 4G speeds, but my phone doesn’t. I’d imagine that the T-Mobile TV feature would be more useful with the faster speed afforded by 4G.&lt;/p&gt;  &lt;p&gt;Too bad Netflix doesn’t let you cache movies for a trip. Between music, and games, movies are the only in-flight entertainment I’m missing on the phone. Thankfully, I can easily sync the movies I’ve ripped from my DVD collection with the phone.&lt;/p&gt;  &lt;p&gt;Between the excellent browsing experience and the integration between the people hub and Facebook, the separate Facebook app practically redundant. It’s pretty sad too because the Facebook app is pretty well done.&lt;/p&gt;  &lt;h2&gt;Overall&lt;/h2&gt;  &lt;p&gt;The HD7 and Windows Phone 7 do a lot of things right. This phone and the platform are the perfect pair. While it has it’s fair share of shortcomings *ahem* battery *ahem* most of the issues can be addressed with software updates. Hopefully, T-Mobile and HTC keep up the level of support with the HD7 that they’ve done with their other devices.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=8200" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category></item><item><title>Recursive Generics</title><link>http://azurecoding.net/blogs/brownie/archive/2010/11/10/recursive-generics.aspx</link><pubDate>Wed, 10 Nov 2010 13:47:17 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:8095</guid><dc:creator>Mike Brown</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Did you know it is possible to constrain a generic type parameter to be a subclass of the generic in question? I discovered this trick a while ago and recently leveraged it in my own MVVM framework (more on that later). Basically, I used it to create a generic base ViewModel object that used the &lt;a href="http://azurecoding.net/blogs/brownie/archive/2009/02/23/static-reflection-say-what.aspx" target="_blank"&gt;static reflection&lt;/a&gt; trick for raising property changed notifications. Here is how it looks&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public class ViewModelBase&amp;lt;T&amp;gt;:INotifyPropertyChanged     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; where T:ViewModelBase&amp;lt;T&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; protected void NotifyPropertyChanged(Expression&amp;lt;Func&amp;lt;T,object &amp;gt;&amp;gt;propertyExpression)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var prop = propertyExpression.Body as MemberExpression;      &lt;br /&gt;&amp;#160;&amp;#160; #if DEBUG      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(prop==null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new ArgumentException(&amp;quot;The passed in expression must be a Property Accessor&amp;quot;, &amp;quot;propertyExpression&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160; #endif      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(PropertyChanged!=null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PropertyChanged(this,new PropertyChangedEventArgs(prop.Member.Name));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public event PropertyChangedEventHandler PropertyChanged;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So if I have a subclass of ViewModelBase it would specify itself like so&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;public class SomeViewModel:ViewModelBase&amp;lt;SomeViewModel&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This allows the T in Expression&amp;lt;Func&amp;lt;T,object&amp;gt;&amp;gt; to refer strongly to SomeViewModel and see the properties on the SomeViewModel class. While I’ve only had to use this technique in a few cases. It’s handy to know that even though it seems quirky, it is possible to do.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=8095" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/WPF/default.aspx">WPF</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/MVVM/default.aspx">MVVM</category></item><item><title>Your Software Raid Party</title><link>http://azurecoding.net/blogs/brownie/archive/2010/11/06/your-software-raid-party.aspx</link><pubDate>Sat, 06 Nov 2010 14:38:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:8028</guid><dc:creator>Mike Brown</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;In World of Warcraft, certain party configurations make participating in large quests (raids) easier. In many cases, a poorly constructed team will lead to certain disaster. Similarly, in software development, having the correct team composition will make certain projects more approachable and in certain cases are necessary for success. I’ve been on a few successful (and a few unsuccessful) projects in my day and here is what I feel makes a good software team.&lt;/p&gt;  &lt;h3&gt;The Code Slinger (high DPS)&lt;/h3&gt;  &lt;p&gt;This guy can pump out (quality) code like a fire hose spraying water. Give him a task, blink 3 times and it’s done. One might argue that’s all you need but you want your code slinger slinging code, not participating in design meetings. You want to feed him more tasks to do so he can eat them up and be ready for more tasks.&lt;/p&gt;  &lt;h3&gt;The Team Champion (tank)&lt;/h3&gt;  &lt;p&gt;Stakeholders will have changing priorities, new tasks, bug, and feature requests, and they will fire them at your team rapidly. Your champion is responsible for acting as the first line of defense to make sure that the team can focus on what they do best instead of dealing with accepting and prioritizing change requests.&lt;/p&gt;  &lt;h3&gt;The Infrastructure Guy (support)&lt;/h3&gt;  &lt;p&gt;TFS, Virtual Machines, Continuous Integration, Automated Deployment. These things aren’t going to set themselves up. Your infrastructure guy is there to make sure the team has what they need when they need it. He bends these tools to the needs of the team so that they can do what comes naturally to them rather than having to contort to the needs of the tools.&lt;/p&gt;  &lt;h3&gt;The Librarian (healing)&lt;/h3&gt;  &lt;p&gt;Your librarian is responsible for knowing or finding solutions. He takes raw requirements and turns them into designs. But he is also there to help the rest of the team get over hurdles by either pointing them in the right direction or providing outright answers to their problems. Because of his role, he has his finger on the pulse of the project and can determine when a more general solution that can be reused throughout the project can be applied.&lt;/p&gt;  &lt;h3&gt;Team Composition&lt;/h3&gt;  &lt;p&gt;Other than code slingers, most projects only need one of the other roles. In many cases the Infrastructure guy can be leveraged on multiple teams. Together, these players augment each other’s skills and makes project success more likely.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=8028" width="1" height="1"&gt;</description></item><item><title>Presentation Notes from Tech Days 2010 Toronto</title><link>http://azurecoding.net/blogs/syntaxc4/archive/2010/10/24/presentation-notes-from-tech-days-2010-toronto.aspx</link><pubDate>Mon, 25 Oct 2010 03:17:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:7887</guid><dc:creator>Cory Fowler</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;On Wednesday October 26th, I will be presenting the Windows Azure Session at &lt;a href="http://www.techdays.ca/speakers?Venue=Toronto" target="_blank"&gt;Tech Days 2010 in Toronto, Canada&lt;/a&gt;. As a summary to my presentation, I am providing the links to not only the resources for my talk, but some of the concepts that I elude to in my presentation.&lt;/p&gt;  &lt;h2&gt;Act 1: The Brownfield&lt;/h2&gt;  &lt;p&gt;I can’t wait to see the glowing smiles in the audience when I announce that it &lt;strong&gt;is&lt;/strong&gt; possible to Migrate your legacy applications to the Cloud.&lt;/p&gt;  &lt;p&gt;However to take advantage of the benefits of Cloud Infrastructure, some code changes may be necessary. Not to worry, here are a few links that will help you along the way:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Using &lt;a href="http://www.microsoft.com/windowsazure/"&gt;Windows Azure&lt;/a&gt; Table Storage to &lt;a href="http://netindonesia.net/blogs/wely/archive/2010/09/22/implementing-session-state-management-in-windows-azure-with-azure-storage.aspx" target="_blank"&gt;Replicate Session State&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.smarx.com/posts/web-page-image-capture-in-windows-azure" target="_blank"&gt;Running an Executable&lt;/a&gt; File from within a Role. &lt;/li&gt;    &lt;li&gt;&lt;a title="Cloud Cover Show" href="http://channel9.msdn.com/Shows/Cloud+Cover/Cloud-Cover-Episode-27-Combining-Roles-and-Using-Scratch-Disk" target="_blank"&gt;Writing to the Scratch Disk&lt;/a&gt; in a Windows Azure VM (not recommended, doesn’t scale). &lt;/li&gt;    &lt;li&gt;&lt;a href="http://support.microsoft.com/kb/2006191/en-us" target="_blank"&gt;ASP.NET Membership Tables for SQL Azure&lt;/a&gt; (formerly found in aspnet_regsql.exe) &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Guidance on Migrating Legacy Applications&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-ca/magazine/ff899321.aspx" target="_blank"&gt;August Issue&lt;/a&gt; of MSDN Magazine: &lt;a href="http://msdn.microsoft.com/en-ca/magazine/ff872379.aspx" target="_blank"&gt;Tips for Migrating your Applications to the Cloud&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Microsoft Patterns and Practice Team: &lt;a href="http://msdn.microsoft.com/en-us/library/ff728592.aspx" target="_blank"&gt;Moving Applications to the cloud on the Windows Azure Platform&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Act 2: The Greenfield&lt;/h2&gt;  &lt;p&gt;Whether you’re working on a brand new Application, or retro fitting your existing Application with some new practices there are a few things that you’ll want to be aware of.&lt;/p&gt;  &lt;h3&gt;Using Storage Services&lt;/h3&gt;  &lt;h4&gt;Making Storage Thread Safe with SyncLock&lt;/h4&gt;  &lt;p&gt;When using Managed code to access Storage Services, it is a &lt;strong&gt;Best Practice&lt;/strong&gt; to use a Sync Lock to surround the code which is attempting to Create a Blob, Table or Queue. Here’s a small sample from &lt;a title="Channel9 Courses - Introduction to Windows Azure" href="http://channel9.msdn.com/Learn/Courses/Azure/WindowsAzure/IntroToWindowsAzureLab/Exercise-1-Building-Your-First-Windows-Azure-Application" target="_blank"&gt;Building your first Windows Azure Application&lt;/a&gt; on Channel 9 Windows Azure Platform Training Course.&lt;/p&gt;  &lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: true; light: true; ruler: true; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;static bool _isInitialized = false;
static object _gate = new object();
static CloudBlobClient _blobClient;

private void InitializeStorage()
{
	if(_isInitialized) return;

	lock(_gate)
	{
		// Initialize Storage
		_isInitialized = true;
	}
}&lt;/pre&gt;

&lt;h4&gt;Enforcing Access Rights on Blobs&lt;/h4&gt;

&lt;p&gt;Depending on your application it may be necessary to &lt;a href="http://msdn.microsoft.com/en-us/library/dd179354.aspx" target="_blank"&gt;Set Access Control for Containers&lt;/a&gt;. &lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: true; light: true; ruler: true; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;_blobContainer.SetPermissions(new BlobContainerPermissions()
{
	PublicAccess = BlogContainerPublicAccessType.Blob
}); // Set the Blob Container to Allow Public Access to Blobs&lt;/pre&gt;

&lt;h2&gt;Next Steps&lt;/h2&gt;

&lt;table cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a title="Apress Books - Windows Azure Platform" href="http://www.apress.com/ecommerce/goto?userid=102943&amp;amp;link=book%2Fview%2F9781430224792&amp;amp;key=80592c4bd09035a242ebab65eb98ef35" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="1SK212294" border="0" alt="1SK212294" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/syntaxc4/1SK212294_5F00_249153D5.jpg" width="111" height="141" /&gt;&lt;/a&gt;&lt;/td&gt;

      &lt;td&gt;&lt;a title="O&amp;#39;Reilly Books - Programming Windows Azure" href="http://oreilly.com/catalog/9780596801984/" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="516004" border="0" alt="516004" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/syntaxc4/516004_5F00_4006300B.jpg" width="111" height="141" /&gt;&lt;/a&gt;&lt;/td&gt;

      &lt;td&gt;&lt;a title="Wrox Publishing - Cloud Computing with the Windows Azure Platform" href="http://www.wrox.com/WileyCDA/WroxTitle/Cloud-Computing-with-the-Windows-Azure-Platform.productCd-0470506385.html" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="cloud-computing-with-the-windows-azure-platform" border="0" alt="cloud-computing-with-the-windows-azure-platform" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/syntaxc4/cloud_2D00_computing_2D00_with_2D00_the_2D00_windows_2D00_azure_2D00_platform_5F00_66681356.jpg" width="111" height="143" /&gt;&lt;/a&gt;&lt;/td&gt;

      &lt;td&gt;&lt;a title="CoDe Magazine" href="http://code-magazine.com/Index.aspx" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="CoDe_Cloud" border="0" alt="CoDe_Cloud" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/syntaxc4/CoDe_5F00_Cloud_5F00_6CAEE9E4.jpg" width="111" height="144" /&gt;&lt;/a&gt;&lt;/td&gt;

      &lt;td&gt;&lt;a title="MSDN Magazine" href="http://msdn.microsoft.com/en-ca/magazine/default.aspx" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ff899321_0810msdn_cover(en-us,MSDN_10)" border="0" alt="ff899321_0810msdn_cover(en-us,MSDN_10)" src="http://azurecoding.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/syntaxc4/ff899321_5F00_0810msdn_5F00_coveren_2D00_usMSDN_5F00_10_5F00_5031F804.png" width="111" height="149" /&gt;&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;If you’re interested in &lt;a href="http://microsoft.com/windowsazure/getstarted" target="_blank"&gt;Getting Started&lt;/a&gt; with Windows Azure, These Links can get you going:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://hmbl.me/2HBGZJ" target="_blank"&gt;Visual Studio Express&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2H9IIG" target="_blank"&gt;Windows Azure Tools &amp;amp; SDK&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2H9JLU" target="_blank"&gt;TCO Calculator&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2HEJNM" target="_blank"&gt;Sign up for Windows Azure&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2HEJ5T" target="_blank"&gt;Windows Azure Forums&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Resources&lt;/h2&gt;

&lt;p&gt;For Best Practices and other Training review these links:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://hmbl.me/2H9I0A" target="_blank"&gt;Windows Azure Home&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2H9QXK" target="_blank"&gt;Windows Azure Team Blog&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2HEPIY" target="_blank"&gt;SQL Azure Team Blog&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2HAX5Q" target="_blank"&gt;Channel 9 Cloud Cover&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2HBGA5" target="_blank"&gt;MS Dev Windows Azure&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2UVNS6" target="_blank"&gt;Tech Ed 2010 Cloud Sessions&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://hmbl.me/2HK84Y" target="_blank"&gt;Paging Azure Tables&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=7887" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/syntaxc4/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://azurecoding.net/blogs/syntaxc4/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://azurecoding.net/blogs/syntaxc4/archive/tags/Conferences/default.aspx">Conferences</category></item><item><title>IRepository&lt;T&gt; and IUnitOfWork</title><link>http://azurecoding.net/blogs/brownie/archive/2010/09/22/irepository-lt-t-gt-and-iunitofwork.aspx</link><pubDate>Wed, 22 Sep 2010 04:40:00 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:7470</guid><dc:creator>Mike Brown</dc:creator><slash:comments>7</slash:comments><description>&lt;p&gt;As I was going through my personal coding exercises, I stumbled across a refinement of my repository and unit of work implementations that allows for two things.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;My Repository is totally free of persistence concerns. &lt;/li&gt;    &lt;li&gt;I get effort free in memory persistence for testing. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The trick for me was finally grokking unit of work and shifting everything related to actual persistence back to it. Let’s look at some code for what I’m talking about. First let’s look at my IRepository interface:&lt;/p&gt;  &lt;pre class="brush: csharp" name="code"&gt;using System;
using System.Collections.Generic;
using System.Linq.Expressions;

namespace KharaSoft.Utilities
{
    public interface IRepository&amp;lt;T&amp;gt;
    {
        IEnumerable&amp;lt;T&amp;gt; FindAll();
        IEnumerable&amp;lt;T&amp;gt; FindBy(Func&amp;lt;T, bool&amp;gt; predicate);
        void Add(T item);
        void Remove(T item);

        bool Contains(T item);
        int Count { get; }
    }
}&lt;/pre&gt;

&lt;p&gt;And now the IUnitOfWork interface:&lt;/p&gt;

&lt;pre class="brush: csharp" name="code"&gt;using System;
using System.Linq;

namespace KharaSoft.Utilities
{
    public interface IUnitOfWork:IDisposable
    {
        void Commit();
        void Attach&amp;lt;T&amp;gt;(T obj)
            where T:class;
        void Add&amp;lt;T&amp;gt;(T obj)
            where T : class;
        IQueryable&amp;lt;T&amp;gt; Get&amp;lt;T&amp;gt;()
            where T : class;
        bool Remove&amp;lt;T&amp;gt;(T item)
            where T : class;
    }
}&lt;/pre&gt;

&lt;p&gt;The relation between the two interfaces may not be obvious at first, but it will be evident when you see my RepositoryBase&amp;lt;T&amp;gt;.&lt;/p&gt;

&lt;pre class="brush: csharp" name="code"&gt;using System;
using System.Collections.Generic;
using System.Linq;

namespace KharaSoft.Utilities
{
    public abstract class RepositoryBase&amp;lt;T&amp;gt;:IRepository&amp;lt;T&amp;gt;
        where T:class 
    {
        protected IUnitOfWork _context;
        public int Count
        {
            get { return _context.Get&amp;lt;T&amp;gt;().Count(); }
        }
        public void Add(T item)
        {
            _context.Add(item);
        }
        public bool Contains(T item)
        {
            return _context.Get&amp;lt;T&amp;gt;().FirstOrDefault(t =&amp;gt; t == item) != null;
        }
        public void Remove(T item)
        {
            _context.Remove(item);
        }
        public IEnumerable&amp;lt;T&amp;gt; FindAll()
        {
            return _context.Get&amp;lt;T&amp;gt;();
        }
        public IEnumerable&amp;lt;T&amp;gt; FindBy(Func&amp;lt;T, bool&amp;gt; predicate)
        {
            return _context.Get&amp;lt;T&amp;gt;().Where(predicate);
        }
    }
}&lt;/pre&gt;

&lt;p&gt;RepositoryBase does not have to be Abstract. I made it that way because most of my repositories have named queries. Also I don’t demonstrate how the _context field is populated, I leave that decision up to you but highly recommend some form of IOC. Now all that is left to do is implement your IUnitOfWork as a wrapper around your O/RM of choice. Here is a simple implementation for EntityFramework’s code first CTP.&lt;/p&gt;

&lt;pre class="brush: csharp" name="code"&gt;using System;
using System.Data.Entity;
using System.Linq;
using KharaSoft.Utilities;

namespace KharaSoft.Utilities.Data.EntityFramework
{
    public abstract class EfDataContextBase : DbContext, IUnitOfWork
    {
        public IQueryable&amp;lt;T&amp;gt; Get&amp;lt;T&amp;gt;()
            where T : class
        {
            return Set&amp;lt;T&amp;gt;();
        }

        public bool Remove&amp;lt;T&amp;gt;(T item) where T : class
        {
            try
            {
                Set&amp;lt;T&amp;gt;().Remove(item);
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public void Commit()
        {
            base.SaveChanges();
        }
       
        public void Attach&amp;lt;T&amp;gt;(T obj)
            where T:class 
        {
            Set&amp;lt;T&amp;gt;().Attach(obj);
        }

        public void Add&amp;lt;T&amp;gt;(T obj) where T : class
        {
            Set&amp;lt;T&amp;gt;().Add(obj);
        }
    }
}&lt;/pre&gt;

&lt;p&gt;EfDataContextBase is abstract because the convention based mapping for code-first requires named EntitySets (or DbSets in this case) on the DbContext in order to work its magic. Once you have that in place you get all the unicorn magic (as &lt;a href="http://www.hanselman.com/blog/SimpleCodeFirstWithEntityFramework4MagicUnicornFeatureCTP4.aspx" target="_blank"&gt;Scott Hanselman calls it&lt;/a&gt;) automagically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Caveat Emptor:&lt;/strong&gt; This is a VERY simple implementation. I know there’s some nasty bug just waiting to bite me in the butt with this code. I’m still early in my reps with iterating on this solution. However it does show a way to make a very clean abstraction away from the persistence mechanisms allowing for a more pure code base. The only thing that needs to change in order to support a different O/RM is to implement IUnitOfWork for that particular O/RM (and configure your IOC to use the new implementation). Also, as I mentioned the InMemory implementation can be used for testing purposes. I’ll leave the details of my InMemoryIow for another post.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=7470" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Software+Engineering/default.aspx">Software Engineering</category></item><item><title>ADHD and Hyperfocus</title><link>http://azurecoding.net/blogs/brownie/archive/2010/08/16/adhd-and-hyperfocus.aspx</link><pubDate>Mon, 16 Aug 2010 13:46:30 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:7231</guid><dc:creator>Mike Brown</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;While looking at a recent posting by &lt;a href="http://jesseliberty.com/2010/08/12/random-walks-for-windows-phone-7" target="_blank"&gt;Jesse Liberty&lt;/a&gt;, he mentioned his tendency to “hyper focus” because of his ADD. I had heard of the term before but had never associated it with ADD. So I did a search. I came across &lt;a href="http://www.additudemag.com/adhd/article/612.html" target="_blank"&gt;this article on the topic&lt;/a&gt;, and I&amp;#39;m pretty certain I have ADHD. When I was a kid, I had taken my bike to a local arcade and was playing a game of spy hunter. By the time I finished playing it some creep had stolen my bike which was not five feet from me.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I was so focused on the game that I didn&amp;#39;t realize someone was jostling with my bike and taking it out the door right next to me. I&amp;#39;ve had similar experiences (while programming, playing video games, playing sports) where similar lapses in awareness of my surroundings occurred.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;For instance, I remember working overnight at a previous job cranking out code like a mad man when a co-worker tapped me on the shoulder at 6:30 in the morning. I was so startled that I had my fist cocked back before I realized who it was. The sad thing is that this has impacted a lot of my professional career. What’s worse is that until about 4 years ago, I also had sleep apnea (I stop breathing while asleep and have to wear a machine that forces air into my lungs) on top of ADHD. So I was sleepy all the time AND easily distracted. As you might imagine, I went through quite a few jobs in my early career.&lt;/p&gt;  &lt;p&gt;Fortunately, once I got rid of the sleeping problem, I was in a career that intrigued me enough to get over MOST of the obstacles of ADD. I LOVE solving problems with technology. Unfortunately, once I’ve solved the problem, the actual implementation is not as interesting to me as the next problem. You see where this is going? So I think it’s time for me to talk with my doctor about this and see what my options are.&lt;/p&gt;  &lt;p&gt;It’s scary because I’ve seen kids on ritalin and the like and it seems to take away their personality. Also, that hyper focus thing turns into an asset at times. However, I think there is a lot to be gained from getting this monkey off my back. Especially since I’m managing my own business now.&lt;/p&gt;  &lt;h2&gt;Why Am I Sharing This?&lt;/h2&gt;  &lt;p&gt;If me sharing my story can help one person avoid some of the catastrophes I’ve run into, then I’ve done my part. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=7231" width="1" height="1"&gt;</description><category domain="http://azurecoding.net/blogs/brownie/archive/tags/Personal+Development/default.aspx">Personal Development</category></item><item><title>Learning F# Using Project Euler</title><link>http://azurecoding.net/blogs/brownie/archive/2010/05/14/learning-f-using-project-euler.aspx</link><pubDate>Fri, 14 May 2010 21:29:08 GMT</pubDate><guid isPermaLink="false">6e97e1e3-dc93-4c0d-b73f-e698f7d56013:6626</guid><dc:creator>Mike Brown</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;I’ve decided that immersion is the best way for me to learn new programming concepts. My exposure to WPF came 4 years ago when I started at a new employer and was told that my first assignment was to learn the application codebase and create a WPF Datagrid that could display data from our application (the view of the data was dynamically composed using metadata from an &lt;a href="http://en.wikipedia.org/wiki/Entity-attribute-value_model" target="_blank"&gt;EAV&lt;/a&gt; database). Needless to say, the effort helped bring me up to speed quickly with both the internal codebase and WPF.&lt;/p&gt; &lt;!--more--&gt;  &lt;p&gt;I want to learn F# and have been looking for a way to immerse myself in it. Enter &lt;a href="http://projecteuler.net/" target="_blank"&gt;Project Euler&lt;/a&gt;, an online collection of math/computer science puzzles. I’m using F# to solve the problems one by one, purposefully using the functional aspects of the language rather than the OO aspects. Here is my solution for the first problem in F#&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;let list =      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [1..999]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; |&amp;gt;List.map(fun n -&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if n % 3 = 0 || n % 5=0 then      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; n      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; |&amp;gt;List.sum&lt;/p&gt;    &lt;p&gt;printfn &amp;quot;Sum of integers %d&amp;quot; list&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m trying to figure if there’s a way for me to remove the if…then…else clause (possibly using pattern matching). But I guess it’s a good start for now.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://azurecoding.net/aggbug.aspx?PostID=6626" width="1" height="1"&gt;</description></item></channel></rss>
