<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Developing UX &#187; Featured</title>
	<atom:link href="http://developingux.com/topic/featured/feed/" rel="self" type="application/rss+xml" />
	<link>http://developingux.com</link>
	<description>Caleb Jenkins on Silverlight &#124; .NET &#124; Design &#124; Development &#124; Architecture &#124; Community</description>
	<lastBuildDate>Mon, 30 Aug 2010 02:43:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	
	<item>
		<title>Mentoring &#8211; a new business&#8230; and speaking!</title>
		<link>http://developingux.com/blog/2010/05/12/proaction-mentors-and-speaking-events/</link>
		<comments>http://developingux.com/blog/2010/05/12/proaction-mentors-and-speaking-events/#comments</comments>
		<pubDate>Thu, 13 May 2010 04:24:52 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[CommunityCast Events]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Proaction]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=937</guid>
		<description><![CDATA[It’s been a while since I’ve updated my blog so I thought that I should catch everyone up to speed. I gave Six Flags my two week notice 3 weeks ago.. and started a new company last week. Someone asked me how long it took me to put together my new company, 20 years of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.facebook.com/pages/Proaction-Mentors/113608382011785"><img style="border-bottom: 0px; border-left: 0px; margin: 0px auto 5px; display: block; float: none; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/05/image.png" border="0" alt="image" width="225" height="124" /></a> It’s been a while since I’ve updated my blog so I thought that I should catch everyone up to speed. I gave <a href="http://developingux.com/2009/07/21/improving-elsewhere/">Six Flags</a> my two week notice 3 weeks ago.. and started a new company last week. Someone asked me how long it took me to put together my new company, 20 years of hard work.  <img src='http://developingux.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-937"></span></p>
<p>Introducing Proaction Mentors… although it really could be written with an optional plural form:</p>
<h1 style="text-align: center;">Proaction Mentor(s)</h1>
<p align="left"> </p>
<p align="left">Obviously this is something that I’m extremely excited about! I’m also super busy with billable client work and speaking engagements (all good problems to have!) I’ll be blogging about Proaction more in the weeks to come, especially as the website launches, the business plan solidifies, and new announcements develop! (Stay up to date by Like’ing <a href="http://www.facebook.com/#!/pages/Proaction-Mentors/113608382011785">Proaction</a> on <a href="http://www.facebook.com/#!/pages/Proaction-Mentors/113608382011785">Facebook</a> and following us on <a href="http://twitter.com/proactionmentor">twitter</a>.</p>
<p align="left">In the mean time – I hope to see you at some of these upcoming events!</p>
<p align="left"><a href="http://www.agiledotnet.com/"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/05/image1.png" border="0" alt="image" width="244" height="64" align="left" /></a> Improving’s <a href="http://www.agiledotnet.com/">Agile .NET Conf</a> – Improving Enterprises (my good friends and former employer) hosted the Agile .NET Conference at Microsoft again this year. I was honored to be the only non-Improving person invited to speak! – April 30th</p>
<p><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/05/image2.png" border="0" alt="image" width="244" height="48" align="left" /> <a href="http://ddnugvs2010launch.eventbrite.com/">Dallas .NET User Group’s Visual Studio 2010 Community Launch</a>! – to celebrate the RTM (release to market) of Visual Studio 2010, the Dallas .NET UG is having an all out bash… 8 speakers in 1 night! Come see my talk:    <br /><strong>Silverlight 4 – World Domination! </strong>– May 13</p>
<p><a href="http://bigdesignconference.com/"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/05/image3.png" border="0" alt="image" width="244" height="62" align="left" /></a> <a href="http://bigdesignconference.com/">Big (D)esign Conference</a> is happening again! This time it’s over twice as BIG as last year! Seriously, my hat goes off to <a href="http://ryanplesko.com/">the</a> <a href="http://twitter.com/BrianKSullivan">organizers</a> and the local <a href="http://dfw-upa.org/">DFW UPA</a>! That put together an amazing conference last year that I was excited to be a part of (<a href="http://developingux.com/2009/05/24/silverlight-expert-big-design-conference-in-dallas/">Silverlight 3: Bringing Back the Sexy</a>) and this year, they’ve more that doubled the size and scope. Amazing! Hope you can make my strategic talk on “<a href="http://bigdesignconference.com/schedule/">The 10 Practices that every developer should start right now</a>”.  &#8211; May 28th &amp; 29th</p>
<p><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/05/image4.png" border="0" alt="image" width="244" height="85" align="left" /> <a href="http://www.dallastechfest.com/">Dallas Tech Fest</a> – What could be better than last year’s inaugural Tech Fest in Dallas? Why, the second year of Tech Fest of course! Tech Fests are unique in the way that they specifically work to pull in technologies from various stacks… not just .NET – expect to see .NET, Ruby, Java, Silverlight, Flex, iPhone development as well as a healthy open conference style area. I was a <em>little crazy </em>and submitted 5 different talks to this event, I’m certain I won’t do all of them… but I’m looking forward to seeing what <a href="http://timrayburn.net/">Tim</a> picks!- July 30th</p>
<p><strong>Update:</strong> This just in.. there is a “<em>rumor</em>” that I might present at a <strong>two day work shop style event in Dallas some time in June</strong>. Stay tuned!</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2010%2F05%2F12%2Fproaction-mentors-and-speaking-events%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2010/05/12/proaction-mentors-and-speaking-events/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Practice Software Patterns &#8211; Component Patterns</title>
		<link>http://developingux.com/blog/2010/03/10/practice-software-patterns/</link>
		<comments>http://developingux.com/blog/2010/03/10/practice-software-patterns/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 23:46:39 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[10-practices]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[software patterns]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=917</guid>
		<description><![CDATA[This post is the 6th in a series that started with the 10 practices that every developer needs to start right now The first time that someone taught me about Software Design Patterns it went something like this: Them: “… and so that is the pattern.” Me: “That’s it” Them: “Well, yeah.” Me: “But that’s how I’ve [...]]]></description>
			<content:encoded><![CDATA[<p>This post is the 6th in a <a href="http://developingux.com/topic/10-developement-practices/">series</a> that started with the <a href="http://developingux.com/2010/01/06/10-practices-every-developer-needs-right-now/">10 practices that every developer needs to start right now</a></p>
<p><a href="http://developingux.com/wp-content/uploads/2010/03/image.png"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/03/image_thumb.png" border="0" alt="image" width="534" height="268" /></a> The first time that someone taught me about Software Design Patterns it went something like this:</p>
<ul style="list-style-type: none">
<li>Them: “… and so that is the pattern.” </li>
<li>Me: “That’s it” </li>
<li>Them: “Well, yeah.” </li>
<li>Me: “But that’s how I’ve always done that.” </li>
<li>Them: “Well, then you’ve always been following that pattern” </li>
</ul>
<p>I find that is how a lot of people react when they first learn about patterns. “So a pattern is just giving a name to good software development” Well, yes and no. On the one hand – yes, a <strong>software pattern is recognizing common software challenges and the approaches that have worked in the past to over come those challenges</strong> – and naming it. On the other hand, don’t underestimate the power of giving something a name.</p>
<p><span id="more-917"></span></p>
<h3>Vocabulary</h3>
<p>There is power in a common vocabulary. Think about it, every profession has one. From the dentist that cleans your teeth to the short order cook at Denny’s; from the mechanic that works on your car to the contractor that built your house. Every profession has it’s own vocabulary that gives people a fast and efficient way to communicate.</p>
<p>So that instead of taking time to walk through all of the details of your architecture and application design, you can have a conversation that goes something like this “We’re writing a facade layer here, and utilizing a DI container to act as our Abstract Factory, accessing our persistence layer with a repository pattern utilizing Interception for logging and MVVM to composite all of our UI.”</p>
<p>OK, so I know that there were a lot of buzz words thrown in there, but I hope you’re getting the point &#8211; a lot can be communicated in a couple of sentences.</p>
<h3>Patterns</h3>
<p>Let’s face it – there is more to learn than any of us has time for. Patterns are like that. There’s a pattern for everything &#8211; like a bad Apple commercial, there’s a <em>pattern</em> for that. The important part is not learning every pattern under the sun – but learning the common patterns for the common challenges is where you’ll get the most bang for your buck.</p>
<h4>Component Patterns</h4>
<p>Strategy | Factory | Abstract Factory – all related.</p>
<p><strong>Factory.</strong> The goal of a factory pattern is to conceal the creation of an object from the consumers of the object. This is especially important for complex objects that take a lot of dependencies or configurations when you create them. Instead of repeating the set up code through out your application you move it to one place (the factory) and then call that from your code.</p>
<p><strong>take this (slightly contrived) code example…</strong></p>
<p><code> </code></p>
<p><code> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code>
<pre><pre class="brush: csharp;">
            SqlCommand cmd = new SqlCommand();

            SqlParameter parm1 = new SqlParameter();
            parm1.Direction = ParameterDirection.Input;
            parm1.ParameterName = &amp;amp;amp;amp;amp;quot;Id&amp;amp;amp;amp;amp;quot;;
            parm1.Value = 5;
            cmd.Parameters.Add(parm1);

            SqlParameter parm2 = new SqlParameter();
            parm2.Direction = ParameterDirection.Input;
            parm2.ParameterName = &amp;amp;amp;amp;amp;quot;State&amp;amp;amp;amp;amp;quot;;
            parm2.Value = &amp;amp;amp;amp;amp;quot;TX&amp;amp;amp;amp;amp;quot;;
            cmd.Parameters.Add(parm2);

            // etc...
       </pre></pre>
<p> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code> </code></p>
<p>It would be much nicer to implement a reusable method as so&#8230;</p>
<p><code> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code>
<pre><pre class="brush: csharp;">
      SqlCommand cmd = new SqlCommand();
            cmd.Parameters.Add(getInParm(&amp;amp;amp;amp;amp;quot;Id&amp;amp;amp;amp;amp;quot;, 5));
            cmd.Parameters.Add(getInParm(&amp;amp;amp;amp;amp;quot;State&amp;amp;amp;amp;amp;quot;, &amp;amp;amp;amp;amp;quot;TX&amp;amp;amp;amp;amp;quot;));

            // etc...
        }

        SqlParameter getInParm(string name, object value)
        {
            SqlParameter parm = new SqlParameter();
            parm.Direction = ParameterDirection.Input;
            parm.ParameterName = name;
            parm.Value = value;
            return parm;
        }

       </pre></pre>
<p> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code> </code></p>
<p>This probably seems like an obvious and simple example (because it is), but the point is that not all patterns are ground breaking or earth shattering, just simple approaches to make your code more usable, maintainable and testable.</p>
<p><strong>Abstract Factory.</strong> If you set up your factory to return an Interface instead of a concrete class then it is an abstract factory. This is especially useful when you want to return different implementations in different scenarios. For example, you might have an IDataLayer and in some cases you want to return a fake version for testing, or perhaps you need a local storage version for offline scenarios etc.. moving the creation of your data layer, it’s configuration and set up to a factory would make a lot of sense. By the way, this is also a text book definition of Object Oriented Polymorphism – the same interface with different behaviors with various implementations. And that brings us to the Strategy Pattern.</p>
<p>Take our example above, if we were to move that bit of code in to a shared data access helper class, we might want to consider a more generic approach.</p>
<p><code> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code>
<pre><pre class="brush: csharp;">
      IDbDataParameter getInParm(string name, object value)
       </pre></pre>
<pre> </pre>
<p> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code> </code></p>
<p><strong>Strategy Pattern.</strong> The original goal of the strategy pattern was the grouping various algorithms in to common interfaces. So, for example, working with <a href="http://en.wikipedia.org/wiki/Data_Encryption_Standard">DES</a>, <a href="http://en.wikipedia.org/wiki/Triple_DES">Triple DES</a> or <a href="http://en.wikipedia.org/wiki/Blowfish_(cipher)">Blowfish</a> encryption shouldn’t be any different than driving a V8 is different from driving a 4 cylinder car – what’s under the hood (the implementation) doesn’t matter as long as you know hot to use the steering wheel and pedals (Interface). No code examples here. Go take a look at encryption in .NET, or the common approaches that ADO uses for data access. Also, hang on, we’ll go in deeper to code examples in just a bit when we talk about composition over inheritance (which is closely related to Strategy Pattern)</p>
<p><strong>Up next:</strong> UI Patterns for Testability, Maintainability and Extensibility!</p>
<p>(Followed by Composition over Inheritance)</p>
<h4><span style="font-size: xx-small;">Images Credit: </span><a href="http://www.flickr.com/photos/webtreatsetc/4229661317/sizes/o/"><span style="font-size: xx-small;">http://www.flickr.com/photos/webtreatsetc/4229661317/sizes/o/</span></a></h4>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2010%2F03%2F10%2Fpractice-software-patterns%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2010/03/10/practice-software-patterns/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Speaking in March</title>
		<link>http://developingux.com/blog/2010/02/27/speaking-in-march/</link>
		<comments>http://developingux.com/blog/2010/02/27/speaking-in-march/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 17:12:11 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[CommunityCast Events]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[dallas]]></category>
		<category><![CDATA[dfw]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[INETA]]></category>
		<category><![CDATA[nddnug]]></category>
		<category><![CDATA[presenter]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=892</guid>
		<description><![CDATA[This is just a quick note that I’ll be presenting at two different events in the DFW area this month. Hope you can make it! North Dallas .NET Users Group – March 3rd First, Wednesday March 3rd, I’ll be at the North Dallas .NET Users Group talking about Model View View-Models (MVVM) for your Silverlight [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a quick note that I’ll be presenting at two different events in the DFW area this month. Hope you can make it!</p>
<p><a href="http://nddnug.net/"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image23.png" border="0" alt="image" width="525" height="394" /></a></p>
<h3>North Dallas .NET Users Group – March 3rd</h3>
<p>First, Wednesday March 3rd, I’ll be at the <a href="http://nddnug.net/">North Dallas .NET Users Group</a> talking about Model View View-Models (MVVM) for your Silverlight Applications. If you’ve ever seen my <a href="http://developingux.com/2008/12/18/dependency-injection-with-silverlight/">Dependency Injection for Silverlight</a> talk, this is pretty much the follow up to that. (above is a snapshot from the <a href="http://nddnug.net/videos/caleb-jenkins-silverlight-2/">last time</a> that I spoke there.)</p>
<h3>Technically Speaking DFW – March 27</h3>
<p>Have you ever wanted to be a <a href="http://technicallyspeaking.dfwnav.com/">technical presenter</a>, but you weren&#8217;t sure how to get started? Or do you want to take your technical presentation skills to the “next level”? This this is the event for you! I love the idea of events like this, and I was honored to be invited to participate. Maybe this will spark more interest in groups like <a href="http://presentermentor.org/">Presenter Mentor</a>?</p>
<p><a href="http://twitter.com/t_burger">Teresa Burger</a>, awesome community member and talented developer over at <a href="http://www.woot.com/">Woot!</a> is organizing this event. It’s $50 to attend, includes lunch, and is a full day of <a href="http://mindimensions.ideamappingsuccess.com/IdeaMappingBlogs/about/">Dave Gunby</a>, Microsoft’s <a href="http://chriskoenig.net/">Chris Koenig</a>, MVP extraordinaire <a href="http://timrayburn.net/">Tim Rayburn</a> and also <a href="http://developingux.com/about">yours truly</a>.</p>
<p align="center"><a href="http://mindimensions.ideamappingsuccess.com/IdeaMappingBlogs/about/"><img style="margin: 0px 5px 0px 0px" src="http://technicallyspeaking.dfwnav.com/images/DaveGunby.png" alt="Dave Gunby" width="100" height="140" /></a><a href="http://chriskoenig.net/"><img style="margin: 0px 5px 0px 0px" src="http://technicallyspeaking.dfwnav.com/images/ChrisKoenig.jpg" alt="Chris Koenig" width="105" height="140" /></a><a href="http://developingux.com"><img style="margin: 0px 5px 0px 0px" src="http://technicallyspeaking.dfwnav.com/images/calebjenkins_profile_crop.png" alt="Caleb Jenkins" width="143" height="140" /></a><a href="http://timrayburn.net/"><img style="margin: 0px" src="http://timrayburn.net/TimRayburn-Web.png" alt="" width="106" height="140" /></a></p>
<h3>Register for both!</h3>
<ul>
<li><a href="http://nddnug.net/">Register for the North Dallas DNUG</a> – Wednesday March 3rd (Free)</li>
<li><a href="http://technicallyspeaking.dfwnav.com/">Register for Technically Speaking DFW</a> – Saturday March 27 ($50)</li>
</ul>
<p>Yep, this is going to be a fun month! Hope to see you there!</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2010%2F02%2F27%2Fspeaking-in-march%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2010/02/27/speaking-in-march/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Secure Coding 101</title>
		<link>http://developingux.com/blog/2010/02/10/secure-coding-101/</link>
		<comments>http://developingux.com/blog/2010/02/10/secure-coding-101/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 06:21:27 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[developer practices]]></category>
		<category><![CDATA[secure coding]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=827</guid>
		<description><![CDATA[This post is the 5th in a series that started with the 10 practices that every developer needs to start right now When writing software, we often don’t think about the security implications of our actions. Probably because we write software to do something, we’re not always aware of what it shouldn’t do. Their are [...]]]></description>
			<content:encoded><![CDATA[<p>This post is the 5th in a <a href="http://developingux.com/topic/10-developement-practices/">series</a> that started with the <a href="http://developingux.com/2010/01/06/10-practices-every-developer-needs-right-now/">10 practices that every developer needs to start right now</a></p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image10.png"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb5.png" border="0" alt="image" width="527" height="243" /></a> When writing software, we often don’t think about the security implications of our actions. Probably because we write software to <em>do something</em>, we’re not always aware of what it <em>shouldn’t do</em>. Their are a lot of guidelines for writing secure code, and designing secure systems. Rather than going in to all of the areas, let me just hit on some of the especially important topics that I’ve come across…</p> <p><span id="more-827"></span></p> <p>In addition to this post, I’ve included a slide deck that I use when I give talks about writing secure code. A lot of the original slides I got from a talk that <a href="http://ronjacobs.com/">Ron Jacobs</a> did at TechEd. I hope you enjoy both!</p> <div id="__ss_3128295" style="text-align: center; width: 512px; height: 414px;"><a style="margin: 12px 0px 3px; display: block; font: 14px helvetica,arial,sans-serif; text-decoration: underline" title="Threat Modeling - Writing Secure Code" href="http://www.slideshare.net/calebjenkins/threat-modeling-writing-secure-code">Threat Modeling - Writing Secure Code</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=threatmodeling-100210175558-phpapp02&amp;stripped_title=threat-modeling-writing-secure-code" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=threatmodeling-100210175558-phpapp02&amp;stripped_title=threat-modeling-writing-secure-code" allowscriptaccess="always" allowfullscreen="true"></embed></object><br /> <div style="font-family: tahoma,arial; height: 26px; font-size: 11px; padding-top: 2px;">View more <a style="text-decoration: underline" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration: underline" href="http://www.slideshare.net/calebjenkins">Caleb Jenkins</a>.</div> <p> </p></div> <h3>Buffer Overflows and Overruns</h3> <p>OK… so I’m mostly going to deal with issues that affect .NET developers. .NET prevents <a href="http://en.wikipedia.org/wiki/Buffer_overrun">Buffer overflows</a> by not giving your code direct access to memory addresses and instead by managing memory access for you and by making sure that everything is type safe.</p> <p>Here’s my non-technical version of what a Buffer Overflow is. First, a Buffer overflow is something that affects unmanaged code (or unsafe C#). Let’s say that a memory address is designed to hold 9 bits of user input, and instead the user forces 10 bits a information in to it. Normally, the last bit of memory is a return address and tells the code where to go next. In a Buffer overflow attack, a different return address is forced in to that last slot so that the attack can control the flow of the code.</p> <p>For example, the code might say something like, “If the user is not authorized return to login” and instead the attack forces a return code so that it ends up doing something like this “If the user is not authorized go to the bank account withdrawal screen”. By simply changing the flow of an application, and attacker can do really bad things.</p> <p>Fixes:</p> <ol> <li>Use .NET (and get out of that unmanaged C++ code <img src='http://developingux.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</li> <li>Use safe libraries. Many of the C++ common libraries have been re-written to help prevent Buffer Overflow exposure. Make sure that you are using the updated libraries. </li> <li>Check out the “<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6aed14bd-4766-4d9d-9ee2-fa86aad1e3c9&amp;displaylang=en">Banned.h</a>” header file from Microsoft. It’s is a sanitizing resource which supports the SDL requirement to remove banned functions from a code. It lists all banned APIs <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6aed14bd-4766-4d9d-9ee2-fa86aad1e3c9&amp;displaylang=en">Download</a>. </li> <li>Use the <a href="http://msdn.microsoft.com/en-us/library/8dbf701c(VS.71).aspx">/GS Compiler switch</a>. This was introduced by Microsoft to automatically add safety checking to your code when it compiles. </li> </ol> <h3>XSS</h3> <p>XSS is an abbreviation for <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">Cross Site Scripting</a> attack. (I know, but CSS was already taken <img src='http://developingux.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) XSS attacks are something that has affected every major web site at one time or another.</p> <p><strong>Background:</strong> When you connect to a website, like amazon or ebay (or any other site that you log in to) it often uses a session cookie to know who you are, and what you are allowed to see (your account info for example). Cookies are not a problem in and of them selves, in fact, your browser makes sure that it only send cookies to the web site that it was issued from. See – your browser trusts the site that you are on.</p> <p><strong>What is it:</strong> In a XSS attack, a malicious user figures out how to load their JavaScript to a trusted site. So that when your browser sends them your cookie, the malicious JavaScript has access to your cookie and forwards it on to the attacker. Then the attacker can impersonate you and access your information.</p> <p>How it works: Have you ever searched for a random product on a site, like foo, and received a response message that said something like “your search for foo was not found.”? Try searching for “&lt;b&gt;foo&lt;/b&gt;”. What happened? If the message looks like this: “your search for <strong>foo</strong> was now found.”, then they are probably not sufficiently checking the user input. Now image searching for this:</p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image11.png"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb6.png" border="0" alt="image" width="240" height="29" /></a>If you get a pop up that say’s “oh noes!” then this site is definitely vulnerable.  You see, as far as your browser is concerned, this JavaScript is coming from the server that is generating the result page. Now imagine sending someone an email with a link to go check out this great deal on a new bike [inline]  <a onclick="alert('oh noes!');" href="#">http://newbikesforSale.com</a>[/inline]!</p> <p>The link above looks legitimate, but it’s actually a link that contains JavaScript to open an simple alert box. You can trust it (it won’t hurt you I promise), but in a XSS attack an attacker uses HTML mixed with JavaScript to embed their JS code in an email link, or more likely on a comment thread, in a blog review, or any place that will let it in.</p> <p><strong>Fix: </strong>All user input is considered evil until proven otherwise. The problem is that we haven’t traditionally considered search forms and product reviews as user input in to our systems, but they are. You can scrub user input easily enough by doing something like string SafeToDisplay = Server.HTMLEncode(userInput); but really you should look at incorporating some of the libraries that are specifically designed to handle these scenarios. Check out <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09&amp;displaylang=en">Microsoft’s Anti-Cross Site Scripting Library</a>, it’s very comprehensive and covers many more scenarios.</p> <h3>SQL Injection</h3> <p>All user input should be considered evil until proven otherwise. This has never been more true than it is with SQL Injection vulnerabilities.</p> <p><a href="http://xkcd.com/327/"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image12.png" border="0" alt="image" width="529" height="165" /></a></p> <p><strong>How it works:</strong> Imagine that you have an application with a log in: User name and password.     <br /><strong><a href="http://developingux.com/wp-content/uploads/2010/02/image13.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb7.png" border="0" alt="image" width="212" height="86" /></a></strong> <br />Pretty simple so for huh? Now think about the SQL that you would write to validate a user…  It *might* start off looking something like this:</p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image15.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb8.png" border="0" alt="image" width="356" height="75" /></a></p> <p>So far so good… as long as everyone enters a user name and password in to the correct textbox on the screen this should validate them perfectly…</p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image16.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb9.png" border="0" alt="image" width="244" height="76" /></a></p> <p>but what happens when you enter something unexpected in to one of the boxes..<a href="http://developingux.com/wp-content/uploads/2010/02/image17.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb10.png" border="0" alt="image" width="205" height="101" /></a></p> <p>what would the resulting SQL?    <br /><a href="http://developingux.com/wp-content/uploads/2010/02/image18.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb11.png" border="0" alt="image" width="244" height="51" /></a></p> <p>the problem here is that the text from the form is now being executed as part of the SQL statement itself. SQL injection just allowed this person to operate this application with the username BillG… I’m sure that wouldn’t be a problem!</p> <p><strong>Not just Log In Screens.</strong> Any place that user input is translated in to a query to the database is open to attack. Search fields are a notoriously overlooked place for SQL Injections, and not just for logging, at this point the attack can do anything that the application can do. Even worse, many application run as SA (Sql Administrator) just to make “life easy” on the developer. That opens up a whole new problem. Imagine a random user being able to log in to your system, add themselves as an administrator, shut down your server, rewrite your website, reformat your hard rive all from a search box. See the problem?</p> <p><strong>Fix</strong>: the fix is easy, don’t let user input run as SQL. You can prevent SQL Injection by moving away from concatenated string for building sql queries. if you need the flexibility of ad-hoc sql, then write your adhoc sql using <a href="http://www.codinghorror.com/blog/archives/000275.html">parameterized SQL</a>.  Otherwise you can move to <a href="http://msdn.microsoft.com/en-us/library/yy6y35y8(VS.80).aspx">stored procedures</a> or an <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a> like <a href="http://msdn.microsoft.com/en-in/data/cc298428(en-us).aspx">Linq to SQL</a>, Microsoft’s <a href="http://msdn.microsoft.com/en-in/data/ee720194(en-us).aspx">Entity Framework</a>, or <a href="https://www.hibernate.org/">nHibernate</a> that will automatically use parameterized sql for you.</p> <h4>White List vs Black List Principle</h4> <p>One thing that I want to call out at this point. It is very tempting to try and “sanitized” every user input instead of moving to one of the more robust solutions mentioned above. I had a friend (a very good developer) that was sanitizing all user input for “bad” words before he would process it. In his words, “we don’t have any products called drop, delete, execute… so I should be able to do a string.Replace on those words and then be fine.</p> <p>Here’s the problem with that. In Security there is a concept of White List vs Black Lists. A white list approach says, here is what I will allow, and throw away anything else. A Black list take the approach that says, “here is what I won’t allow, I’ll let in anything else that’s not on this list.” The problem with the black list approach is that security is a moving target, there are vulnerabilities today that we didn’t know about yesterday, there will be more tomorrow that I don’t know about today. Just because something isn’t on my “bad” list today, doesn’t mean that it shouldn’t be.</p> <p>I went to my friends bad word scrubber and entered this : ‘del<strong>delete</strong>ete” do you see the word delete in there? What will  happen after your scrubber removes it… you’ll be left with “delete”. He started using parameterized SQL.</p> <h3>Encryption</h3> <p>I once interviewed a really smart computer science guy that wanted to come work for our consulting company (primarily focus on business applications). Saying this guy was smart is an understatement. He was a Computer Science PhD candidate with cross disciplines in artificial intelligence and game theory. wow! The problem was that he had very little knowledge or experience writing actual applications. When I asked him about if we should write out own encryption for some application that we were working on, he got all excited and started to go in the details about what it would take to implement out own encryption. I’m pretty sure he had taken a class on this, wrote some thesis on it or something because he was really excited that I had asked him about this topic. Here the thing, never write your own encryption.</p> <p>Getting encryption done right is hard.. like really hard. In fact, if you are good at it, maybe you should go work for the government, or a university, or RSA directly, but you have no business trying to do that for a business application. Use the tried and true, multiple encryption, publically available libraries to do it right.</p> <h4>3-Types of encryption.</h4> <p><strong>Private Private Key</strong>, also known as a symmetrical encryption uses the same key to encrypt and unencrypt. Symmetrical encryption is very fast, so it’s great for encryption transmissions and it used for things like secure communication and SSL. the problem is that it’s less secure because you have to have a secure way to hand out the private key.</p> <p><strong>Public Private Key</strong>, also known as asymmetrical encryption uses two different keys. One key (the public key)<a href="http://developingux.com/wp-content/uploads/2010/02/ssl_handshake.png"><img style="border-right-width: 0px; margin: 5px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ssl_handshake" src="http://developingux.com/wp-content/uploads/2010/02/ssl_handshake_thumb.png" border="0" alt="ssl_handshake" width="232" height="244" align="right" /></a> is used for encryption, the private key is used for decryption. The benefit here, is that you can yell out for the world to here your public key, but only the person with the private key can do the decrypting. The problem is that it’s very slow and computationally expensive.</p> <p>So how can two computers talk securely to each other in an open environment like the Internet? The answer is a combination of the above. SSL, or secure socket layer uses a public key to securely transmit a “session” key that will be used for symmetrical encryption for the rest of the communication.</p> <p><strong>1-Way Hashes</strong> cannot be encrypted. How is that helpful? It’s very helpful. A hash can me used to make sure that two values are equal without actually knowing what the values are. For example, my application should never store plain text passwords. If they did it might be possible for those passwords to become compromised. By storing a 1-way hash instead the password cannot be retrieved even if the database (or a backup of the database) is compromised. How do I log user in to the system then? Simple, I take the password they give me, I has it using the same method and compare the two results.</p> <p>Digital Certificates – Digital Certificate use a combination of the above concepts to support secure communication and identification. We’re just not going to go in to all of that now. <img src='http://developingux.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p> <h3>Least Privilege Principle</h3> <p>Reduce your Attack Surface – if you don’t need a service, turn it off. If your application doesn’t need permission to do something, don’t supply it. By limiting the scope of what can be done, you also limit what can be broken if and when things go bad.</p> <p>Default to Fail – Here’s an example.</p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image19.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb12.png" border="0" alt="image" width="244" height="163" align="left" /></a> What’s wrong with this code? (ok, a lot <img src='http://developingux.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) But what we want to focus on is that if there is an exception along the way, it will default to the user being authenticated. The [valid] should have been set to false, until proven otherwise.</p> <p>Don’t reveal more than is helpful to the user. Be helpful, but you don’t have to thrown up every SQL exception on your users.. log that stuff, let the debug team look at it, but knowing what version of SQL server you’re running or what the stack address is completely useless to your users… but bad people love that stuff.</p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image20.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb13.png" border="0" alt="image" width="219" height="231" align="left" /></a>I love this screen shot. Is that error helpful to you? It says “Error 0x80090022” but it means “No smart card inserted in reader.</p> <p>Don’t give away your system internals, at the same time make sure that your user errors are helpful!</p> <h3>More resources…</h3> <p>OK.. as you can imagine there’s a lot more that we could cover, but instead take a look at some of these resources.</p> <p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=A48CCCB1-814B-47B6-9D17-1E273F65AE19&amp;displaylang=en">Threat Modeling Tool</a> – Threat modeling is all about identifying assets, vulnerabilities, resolutions, evaluating a business value on assets, then balance the cost of a resolution with real business value.</p> <p><a href="http://www.microsoft.com/security/sdl/getstarted/processtemplate.aspx">SDL Process Template for Team System</a> – SDL is the Security Development Lifecycle, it’s a set of practices and tools that help integrate secure development in to all aspects of SDLC (Software Development Life Cycle). This is Microsoft’s template to integrate SDL with Team Foundation Server (Microsoft’s Application Lifecycle Management Server).</p> <p><a href="http://www.microsoft.com/security/sdl/getstarted/tools.aspx">SDL Process Tools</a> – There’s a ton here, check it out.</p> <p><a href="http://msdn.microsoft.com/en-us/security/default.aspx">MSDN Security</a> – Read the blogs, latest news, and downloads regarding Microsoft security and development.</p> <p><a href="http://11011.net/software/vspaste"></a></p> <p>Happy Coding (securely)!</p> <p> </p> <p>Images Credit: <a href="http://www.flickr.com/photos/carbonnyc/2294144289/">http://www.flickr.com/photos/carbonnyc/2294144289/</a></p><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2010%2F02%2F10%2Fsecure-coding-101%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2010/02/10/secure-coding-101/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SOLID: Software that works.</title>
		<link>http://developingux.com/blog/2010/02/09/solid-development/</link>
		<comments>http://developingux.com/blog/2010/02/09/solid-development/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 06:06:04 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[dependencyinjection]]></category>
		<category><![CDATA[developer practices]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[solid]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=809</guid>
		<description><![CDATA[This post is a part of a series that I started with "10 Practices that Every Developer Needs to Start Right Now". Update: This post was picked up by DZone, go vote it up! Ok, before you dig in to the post, let’s get two things out of the way first.  1.Go read the authority [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a part of a <a href="http://developingux.com/topic/10-developement-practices/">series</a> that I started with "<a href="http://developingux.com/2010/01/06/10-practices-every-developer-needs-right-now/">10 Practices that Every Developer Needs to Start Right Now</a>".</p> <p><strong>Update</strong>: This post was picked up by DZone, <a href="http://dotnet.dzone.com/news/solid-software-works">go vote it up</a>!</p> <p><a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="solid_thumb" src="http://developingux.com/wp-content/uploads/2010/02/solid_thumb.jpg" border="0" alt="solid_thumb" width="511" height="409" /></a></p> <p>Ok, before you dig in to the post, let’s get two things out of the way first.  1.Go read the authority on <a href="http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">SOLID principles</a> from the man himself, <a href="http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">Uncle Bob Martin</a>.  2nd.Go get the very cool <a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx">Inspirational SOLID</a> images from the guys over at Los Techies. They released them under a Creative Commons License which I think is pretty cool! Alright, got that out of the way? Good. Let’s get started.</p> <p>Few things have come a long OO history that resonate so well with so many developers than the SOLID principle. One of the reasons they resonate with so many developers is because they communicate several practices that many developers have been doing all along. The beauty and power of the SOLID principals in in there ability to communicate, what I call <a href="http://developingux.com/2009/09/14/dependency-injection-on-microsoft-arcast-tv/">code architecture</a>, in such a memorable and practical way.</p> <p>Like any good thing, however, taken to an extreme can become a hindrance on any project. So, I’m going to tackle these principals like I tackle everything in this series… give you my take on it. So here you go: SOLID according to Caleb.</p> <p><span id="more-809"></span></p> <p>[SOLID Motivational Posters, by <a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx">Derick Bailey</a>, is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons Attribution-Share Alike 3.0 United States License</a>. <a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx">Get them here</a>.]</p> <p><a name="srp"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/SingleResponsibilityPrinciple2_5F00_71060858.jpg"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image8.png" border="0" alt="image" width="511" height="185" /></a></p> <h3>S – Single Responsibility Principal <a href="#srp">#</a></h3> <p>"There should never be more than one reason for a class to change." — Robert Martin, SRP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p> <p><strong>Abuse</strong>: I’ve seen this taken to an extreme. I’ve seen good clean readable code turned in to multiple classes (even multiple projects) to break up “responsibility”. The end result was much harder to maintain and even harder to read.</p> <p><strong>Applied</strong>: “One reason to change” does not mean that every class has one and only one thing (that would be called a method), it does mean that you should focus on the area (or areas) of responsibility that a class should have and then stick with those boundaries. <a href="http://en.wikipedia.org/wiki/Code_bloat">Code bloat</a> (overly large classes with overly large methods) is a real <a href="http://en.wikipedia.org/wiki/Code_smell">code smell</a> that you need to watch out for. The more things that a class is responsible for, the more likely you’ll have to change it and the harder it will be to test.</p> <p>Your code should be broken in to manageable pieces, reduce any unnecessary couplings… Practice writing Libraries not Frameworks.</p> <p> </p> <p><a name="ocp"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/OpenClosedPrinciple2_5F00_2C596E17.jpg"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image14.png" border="0" alt="image" width="511" height="247" /></a></p> <h3>O – Open Closed Principle <a href="#ocp">#</a></h3> <p>"Software entities should be open for extension, but closed for modification." — Robert Martin paraphrasing Bertrand Meyer, OCP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p> <p><strong>Abuses</strong> – I’ve worked on code bases that were so extensible, so configurable, so full of <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">AOP</a> indirection and configuration that following the flow of what they were actually doing was almost impossible.</p> <p><strong>Applied </strong>– Code is going to change, that’s a part of life. The Open Closed Principal is more about reducing how often you have to change your code and in how many places. In other words: Code to Interfaces and maintain your abstraction boundaries.</p> <p>I recently worked with a <a href="http://msdn.microsoft.com/en-in/data/cc298428(en-us).aspx">Linq to SQL</a> project where the <a href="http://msdn.microsoft.com/en-in/library/system.data.linq.datacontext(en-us).aspx">Data Context</a> object was being passed around through out all of the layers in the application. That meant that most of the application was impossible to unit test and if I were to change a column or table in the database I would have to go through the entire code base and find all of the places that broke. We fixed that by creating a specific data interface that all interactions had to go through, only passing domain objects (<a href="http://en.wikipedia.org/wiki/Data_Transfer_Object">DTO</a> Models). We kept the DB Context in the Data Layer implementation where it was super useful, but no longer forced us to recompile the entire source for simple data changes. I like how approach that Jeffery Palermo described and an <a href="http://jeffreypalermo.com/blog/the-onion-architecture-part-1/">Onion Architecture</a>.</p> <p>I also worked on another project where 8 layers of abstract classes were used to distinguish between three different types of physical devices… any change in the application behavior had to be propagated across all of the implementations. We fixed that by concealing the device differences behind a single command interface that was then injected in to the application “behaviors” via an abstract factory.</p> <h4>What did you just say?</h4> <p>So in other words… imagine having three different devices (blue, red, green) that all needed to be turned on (behavior), but the command to turn on each was different and defined by the manufacture… the code *might* look like this:</p> <pre><a href="http://developingux.com/wp-content/uploads/2010/02/image1.png"><img style="border-right-width: 0px; margin: 0px 15px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb1.png" border="0" alt="image" width="232" height="243" align="left" /></a></pre> <p>Now imagine that there were multiple points within your application where you were working with the devices… now, every time you need to support a new device you end up with this if/else statement being redone just about everywhere…</p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image2.png"><img style="border-right-width: 0px; margin: 5px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb2.png" border="0" alt="image" width="289" height="57" /></a></p> <p>By externalizing the device differences behind a factory and encapsulating them in an Interface you now only have one place to change to add a new device. You could reduce that further using an extension manager like <a href="http://mef.codeplex.com/">Microsoft MEF</a>, but we won’t go in to that right now.</p> <p> </p> <h3><a name="lsp"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/LiskovSubtitutionPrinciple_5F00_52BB5162.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image3.png" border="0" alt="image" width="511" height="218" /></a> L – Liskov Substitution Principle <a href="#lsp">#</a></h3> <p>"Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it." — Robert Martin, LSP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p> <p><strong>Abuses:</strong> I like to think of this principle as “Use Interfaces”.  I haven’t really seen abuses of this practice, but I have seen some bad implementations. The rough ones, are where developers rely on a <a href="http://msdn.microsoft.com/en-us/library/ms173150.aspx">base abstract class</a> instead of an <a href="http://msdn.microsoft.com/en-us/library/ms173156.aspx">Interface</a> also. The doesn’t sound like a problem until you start putting parameters in the constructor of the base class. Now any derived classed have to enforce those same dependencies even if you are creating an entirely different implementation.</p> <p><strong>Applied:</strong> Use Interfaces. If you find that a base class would meet some of your needs more closely, that’s fine, just make sure that you back that base class up with an Interface, and then code to the Interface.. you’ll thank me later.</p> <p>Side Note: Their are different schools of thought around backing domain models with Interfaces. I do, the main reason is that even if I end up using an ORM (like <a href="http://msdn.microsoft.com/en-in/data/aa937723(en-us).aspx">Entity Framework</a>, or <a href="http://msdn.microsoft.com/en-in/data/cc298428(en-us).aspx">LinqToSQL</a>) that “forces*” me to a specific domain model implementation, I can save myself a lot of headache later and make my models more mobile if I connect those domain models to an Interface.</p> <p>* – no toolkit should force your architecture or design, any implementation can be abstracted around, Domain Model Interfaces help move your DTO’s through layers of your application without carrying heavy dependencies with you.</p> <p> </p> <h3><a name="isp"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/InterfaceSegregationPrinciple_5F00_60216468.jpg"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image4.png" border="0" alt="image" width="511" height="185" /></a> I – Interface Segregation Principle <a href="#isp">#</a></h3> <p>"Clients should not be forced to depend upon interfaces that they do not use." — Robert Martin, ISP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p> <p>Let’s say you have a service class for working with Invoices, your IManageInvoices interface exposes three methods, Add(IInvoice), Delete(IInvoice) and Update(IInvoice). Because of deployment and security concerns you are going to create two different classes to implement this.</p> <p>One, InvoiceCreator will implement the Add method and run in untrusted environments. The other class, InvoiceUpdater, will implement the other two methods and will only run in secure, verified and authenticated context. So what should each class do with the other methods?</p> <p><strong>Violated: </strong>One “option” would be to implement them, but then throw a “Not-Implemented Exception” or set up Void methods that don’t actually do anything, both of those options are ugly and bad choices.</p> <p><strong>Applied: </strong>The better option is to split your Interface, create a ICreateInvoices Interface with the Add method, and a IUpdateInvoices interface with the other methods. That way, you are actually implementing the methods of your interface, and are not hiding are making implementation decisions that break your abstraction and require special knowledge of the class.</p> <p> </p> <h3><a name="di"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/DependencyInversionPrinciple_5F00_0278F9E2.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image5.png" border="0" alt="image" width="511" height="147" /></a> D – Dependency Inversion Principle <a href="#di">#</a></h3> <p>"(A) High level modules should not depend upon low level modules. Both should depend upon abstractions. (B) Abstractions should not depend upon details. Details should depend upon abstractions." — Robert Martin, DIP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p> <p>All code has dependencies, the question is how to you resolve those dependencies.</p> <p>Example: my class will access a service, I could write it like this:</p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb3.png" border="0" alt="image" width="345" height="190" /></a></p> <p>or like this:</p> <p><a href="http://developingux.com/wp-content/uploads/2010/02/image7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb4.png" border="0" alt="image" width="342" height="179" /></a></p> <p>Can you spot the difference? It’s subtle, yet very very powerful. In the first instance, you are using an Interface to define your Shipping Service (and that’s a good thing!), but then you are forcing your class to be dependent on the UPS shipping service… I don’t have anything again UPS, but I do know that company contracts are constantly changing, and just because <em>we were using UPS </em>when we designed and had the customer (business owner) sign off on the application, doesn’t mean that that’s who we are going to use when we go to production!</p> <p>You might be tempted just to replace the “new UPS” instantiation with an Abstract Shipping Factory ( shipService = factory.getShippingService() )… that wouldn’t necessarily be a bad idea, except now you’ve shifted your code from a UPS dependency to a factory dependency.</p> <p>Notice in the second option, we hand our class the implementation that we want to use through the constructor. That’s called constructor injection, we could have also used a property or method to set the shipping service. I like constructor injectors for anything that my class requires to operate. This allows us to define our IShipping service implementation completely independent of the class that’s consuming it.</p> <p>This also makes are code much easier to test by allowing us to creating a mock (fake) version of our IShipping service for testing the main class. We might even use something like <a href="http://ayende.com/projects/rhino-mocks.aspx">RhinoMocks</a> to help our automated unit tests even more, but we’ll save that discussion for another time.</p> <h4>No Framework Required</h4> <p>You may have noticed that this <strong>dependency injection is not dependent on any special tooling or frameworks</strong> (so we’re not introducing new dependencies just to get rid of another!)</p> <p>Dependency Injection or DI, is really a style of coding that makes your code more composable, testable and maintainable. DI Frameworks (or Containers) are specifically designed to be used in two stages.</p> <h4>Register, then Resolve</h4> <p>First, you register your Interface to Class mappings, then you can reference the container anytime and resolve an Interface to a concrete class. Containers can also provide other nice benefits like controlling the life cycle of an object (singelton, vs per thread, vs per request for example). Some DI frameworks also provide the ability register special handlers (or Interceptors) that get invoked whenever a method or a property is called. This in a concept known as AOP or Aspect Oriented Programming that is useful for cross-cutting concerns like automatic logging and security checks.</p> <p>For more information on Dependency Injection and Inversion of control I suggest checking out my <a href="http://developingux.com/di/">DI</a> in <a href="http://developingux.com/2008/12/18/dependency-injection-with-silverlight/">Silverlight slide deck</a>, as well as the <a href="http://ninject.org/">Ninject</a>, <a href="http://castleproject.org">Castle</a>, <a href="http://unity.codeplex.com/">Microsoft Unity</a> and <a href="http://structuremap.sourceforge.net/">Structure Map</a> projects.</p> <p>Enjoy!</p><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2010%2F02%2F09%2Fsolid-development%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2010/02/09/solid-development/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Introduction &#8211; 10 Development Practices</title>
		<link>http://developingux.com/blog/2010/01/16/introduction-10-development-practices/</link>
		<comments>http://developingux.com/blog/2010/01/16/introduction-10-development-practices/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 17:02:36 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[developer practices]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=747</guid>
		<description><![CDATA[If you are going to read through my “10 practices that every developer should start right now” series, then you probably want to know where these 10 practices came from, why I chose these 10 – really, what so important about secure coding anyway?   - I think that it’s important to know that these [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developingux.com/wp-content/uploads/2010/01/lights_ws.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px; display: inline; border-top: 0px; border-right: 0px" title="lights_ws" src="http://developingux.com/wp-content/uploads/2010/01/lights_ws_thumb.png" border="0" alt="lights_ws" width="533" height="214" /></a></p> <p><span style="font-size: large;">If</span> you are going to read through my “<a href="http://developingux.com/topic/10-developement-practices/">10 practices that every developer should start right now</a>” series, then you probably want to know where these 10 practices came from, why I chose these 10 – really, what so important about secure coding anyway? <img src='http://developingux.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />    - I think that it’s important to know that these aren’t just 10 random items to fill a couple of blog posts. These are all practices that have been thoroughly thought out. This list is something that I started to formulate over a year ago based on my experience as a consultant, working as a technical editor, and discussions with countless MVPs, other consultants and in my interviews with potential consultants...<span id="more-747"></span></p> <p><strong>Experience</strong>. First, these 10 practices have come from over 15 years of professional development work, working with countless customers when I was at Microsoft, as well as the numerous development shops and enterprise customers that I’ve been a consultant for over the last many years. These are, what I consider, to be the biggest bang for your buck, the low hanging fruit that you can quickly implement and the practices that will yield the greatest value in the shortest time.</p> <p><strong>Writing a Book.</strong> I once had the privilege of working as a Technical Editor on a C# 3.0 book. That experience was both rewarding <em>and</em> frustrating. It was rewarding to go through the process, engage with the executive editors, author and see the whose process of writing a technical book move forward. It was <em>also</em> frustrating to know that – while everything in the book was <em>technically</em> accurate – it often was not the <em>content</em> that I would have wanted to cover. These are the things that I want to talk about.</p> <p><strong>Hiring.</strong> Over the years, but especially during my time as a Principal consultant for <a href="http://improvingenterprises.com/">Improving Enterprises</a> and now as the Senior Software Architect for <a href="http://www.sixflags.com">Six Flags</a>, I’ve spent countless hours interviewing various – really smart people – that often fell short. (I’m a nice guy – but apparently a pretty heavy handed interviewer). I’ve discovered that the things that matter in software development – are often not taught, even in the best schools. These are the topics that I wish every CIS/ MIS department would start covering to some extent. I sometimes wished that I had a “quick read” book that I could hand to people on their way out and say “here, read this. This is what you should know before you try to work here.”</p> <p><strong>Scope</strong> – Obviously any one of these topics could be a whole book in and of itself. So none of these posts are going to be intended as a “complete” reference or anything like that. More like “Caleb’s thoughts on the matter.”… and hopefully some useful insights, and enough information to let you, Dear Reader, move forward and know where to go from here.</p> <p>So that’s my introduction. I hope that you’ll join me as we dig in to all 10 practices.</p> <p><a href="http://developingux.com/topic/10-developement-practices/">Enjoy the ride!</a></p><p>photo credit: <a href="http://www.flickr.com/people/wonderlane/">flickr</a></p><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2010%2F01%2F16%2Fintroduction-10-development-practices%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2010/01/16/introduction-10-development-practices/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>“draft whurley” Featured on Linux.com</title>
		<link>http://developingux.com/blog/2009/09/16/draft-whurely-featured-on-linux-com/</link>
		<comments>http://developingux.com/blog/2009/09/16/draft-whurely-featured-on-linux-com/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 15:14:04 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[whurley]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=712</guid>
		<description><![CDATA[Last Thursday I posted my thoughts about Microsoft’s OSS announcements (go digg it: 3 Reasons Microsoft Needs an Open Source Officer), namely the formation of the CodePlex Foundation (awesome) and the departure of Sam Ramji (bummer). My take is that this is a great opportunity for Microsoft to take open source projects at Microsoft up [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft"><img title="image" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="268" alt="image" src="http://developingux.com/wp-content/uploads/2009/09/image3.png" width="532" border="0" /></a>Last Thursday I posted my thoughts about Microsoft’s OSS announcements (go digg it: <a href="http://digg.com/d313u8n">3 Reasons Microsoft Needs an Open Source Officer</a>), namely the formation of the CodePlex Foundation (awesome) and the departure of Sam Ramji (bummer). My take is that this is a great opportunity for Microsoft to take open source projects at Microsoft up a notch and raise the stakes with a big bold move by bringing in someone like my friend <a href="http://whurley.com/">whurley</a> (William Hurley – currently the <a href="http://communities.bmc.com/communities/blogs/bmcpodcasts/tags/whurley">chief architect of open source strategy at BMC</a>). </p>  <p>This morning I turned on my computer to see that <a href="http://twitter.com/TechManTalking">Todd Weiss</a> and the folks at <a href="http://www.linux.com/">Linux.com</a> had featured this idea on their home page. Go check it out the <a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft">full article</a>!</p> <span id="more-712"></span> <div class="code2"> <h3>Related Reading</h3> <ul> <li>Be sure to check out <a href="http://arstechnica.com/open-source/news/2009/09/new-microsoft-backed-open-source-foundation-faces-questions.ars">ars techica’s article</a> on the Codeplex Foundation and <a href="http://codebetter.com/blogs/jeremy.miller/archive/2009/09/11/some-quick-thoughts-about-the-new-codeplex-oss-initiative.aspx">Jeremy’s Post</a> as well.</li> <li>Scott Bellware just chimed in on how the Codeplex Foundation is a "watershed moment, a turning point for the Microsoft platform and .NET community" - I couldn't agree more. Go <a href="http://blog.scottbellware.com/2009/09/analysis-codeplex-foundation-terms-of.html">check out his complete article</a>.</li> <li>Phil Haack is <a href="http://haacked.com/archive/2009/09/13/more-on-the-codeplex-foundation.aspx">shedding some more light on Codeplex</a> Foundation</li> <li>Red Monk's <a href="http://redmonk.com/sogrady/2009/09/11/codeplex/">Q&A on the CodePlex</a> Foundation</li> <li>Featured on Linux .com! <a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft">Who Will Fill Sam Ramji's Role as Microsoft's Open Source Leader?</a></li> </ul> </div><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2009%2F09%2F16%2Fdraft-whurely-featured-on-linux-com%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2009/09/16/draft-whurely-featured-on-linux-com/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>3 Reasons Microsoft Needs an Open Source Officer</title>
		<link>http://developingux.com/blog/2009/09/10/3-reasons-microsoft-needs-open-source-officer/</link>
		<comments>http://developingux.com/blog/2009/09/10/3-reasons-microsoft-needs-open-source-officer/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 04:46:23 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[whurley]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=687</guid>
		<description><![CDATA[Related Featured article on Linux.com ars techica’s article on the Codeplex Foundation Jeremy’s Post on CodeBetter Scott Bellware chimed in on this "watershed moment, a turning point for the Microsoft platform and .NET community" - I couldn't agree more. Phil Haack is shedding some more light on Codeplex Foundation Red Monk's Q&#038;A on the CodePlex [...]]]></description>
			<content:encoded><![CDATA[<div class="related">
<h3>Related</h3>
<ul>
<li>Featured <a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft">article on Linux.com</a></li>
<li><a href="http://arstechnica.com/open-source/news/2009/09/new-microsoft-backed-open-source-foundation-faces-questions.ars">ars techica’s article</a> on the Codeplex Foundation</li>
<li><a href="http://codebetter.com/blogs/jeremy.miller/archive/2009/09/11/some-quick-thoughts-about-the-new-codeplex-oss-initiative.aspx">Jeremy’s Post</a> on CodeBetter</li>
<li><a href="http://blog.scottbellware.com/2009/09/analysis-codeplex-foundation-terms-of.html">Scott Bellware chimed in</a> on this "watershed moment, a turning point for the Microsoft platform and .NET community" - I couldn't agree more.</li>
<li>Phil Haack is <a href="http://haacked.com/archive/2009/09/13/more-on-the-codeplex-foundation.aspx">shedding some more light on Codeplex</a> Foundation</li>
<li>Red Monk's <a href="http://redmonk.com/sogrady/2009/09/11/codeplex/">Q&A on the CodePlex</a> Foundation</li>
</ul>
</div>

<a href="http://digg.com/d313u8n"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 5px 0px; border-right-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2009/09/image1.png" border="0" alt="Digg this!" width="56" height="30" align="right" /></a> Today there were two big announcements from Microsoft regarding their involvement with the Open Source communities. First, was the formation of the <a href="http://codeplex.org/">CodePlex foundation</a>, an open source foundation for the
<blockquote>
<h4>Enabling the exchange of code and understanding among software companies and open source communities</h4>
</blockquote>
Awesome. Great. Fantastic. This is the natural progression of a lot of the open source work that’s been happening at <a href="http://www.codeplex.com/">CodePlex</a>, in the <a href="http://www.codeplex.com/aspnet">ASP.NET MVC</a> stack and a lot of <a href="http://www.codeplex.com/wpf">the</a> <a href="http://www.codeplex.com/Silverlight">other</a> <a href="http://www.ironruby.net/">OSS</a> <a href="http://ironpython.codeplex.com/">projects</a> that Microsoft has been initiating and <a href="http://blog.jquery.com/2008/09/28/jquery-microsoft-nokia/">contributing</a> to lately.

The other announcement was more disappointing, <a href="http://port25.technet.com/members/billhilf.aspx">Bill Hilf</a>, the general manager of Windows, <a href="http://port25.technet.com/archive/2009/09/10/Sam-Ramji-is-leaving-microsoft.aspx">announced</a> that <a href="http://port25.technet.com/members/Sam%20Ramji%20.aspx">Sam Ramji</a> would be leaving his post at Microsoft to be the interim president of the CodePlex Foundation (cool – but why interim?) and then he would be pursuing some other opportunity.
<p align="center"><a href="http://port25.technet.com/members/billhilf.aspx"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="Bill Hilf" src="http://developingux.com/wp-content/uploads/2009/09/Bill.jpg" border="0" alt="Bill" width="80" height="80" /></a> <a href="http://port25.technet.com/members/Sam%20Ramji%20.aspx"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="sam" src="http://developingux.com/wp-content/uploads/2009/09/sam.jpg" border="0" alt="Sam Ramji" width="80" height="80" /></a></p>

<span id="more-687"></span>
<blockquote>
<p align="left">Sam’s primary focus is to drive Microsoft’s Linux and Open Source Strategy, working together with Microsoft technology development teams and open source communities to build interoperable solutions</p>
</blockquote>
Horrible. Tragic. What a loss. At least, that’s what I thought at first. The truth is that Sam is leaving a much different Microsoft than the one he joined three years ago. A better, more open Microsoft. I agree with <a href="http://port25.technet.com/archive/2009/09/10/Sam-Ramji-is-leaving-microsoft.aspx">Bill’s assessment</a>,
<blockquote>Microsoft's open source strategy is no longer just locked in a single ‘lab' on campus - now OSS is an important part of many product groups and strategies across the company</blockquote>
Sam’s role seems to be that of an OSS advocate, working to build OSS awareness and acceptance from group to group within Microsoft. Well done. Mission *mostly* accomplished.

So where does that leave us? I believe that at certain times in history a company like Microsoft will be faced with opportunities. Opportunities to move boldly forward or slink back in to the status quo, and (to quote that great philosopher and social commentator <a href="http://en.wikipedia.org/wiki/Dr._Horrible's_Sing-Along_Blog">Dr. Horrible</a>) the status, <a href="http://www.drhorrible.com/">is not quo</a>. I believe that now is the time for Microsoft to up the ante.

Rather than replace Sam, with yet another “Senior Director” – how many of those are at Microsoft? – I believe it’s Microsoft’s time to embrace an OSS strategy that moves beyond the director level. They need to show the world a bold move, <a href="http://www.itwire.com/content/view/13779/53">similar to what BMC did</a> over 2 years ago. Microsoft needs an Open Source advocate with teeth.
<h3>Three reasons Microsoft needs an Open Source Officer</h3>
<ol>
	<li>The Timing is Right – The Momentum is there.
Change is in the air. Sam is moving on. The Codeplex foundation has launched, there’s a new Chief Architect in town, and Microsoft has embraced many aspects of OSS is so many areas of their business because they have realized that – when it makes sense and in the right environment, OSS is good for business and good for your customers.</li>
	<li>It’s a different world out there.
Not only has the world inside of Microsoft changed, so has the competition. Microsoft is increasingly competing in an <a href="http://www.visitmix.com/">open web world</a>, with <a href="http://www.visitmix.com/Search?Tag=Web%20Standards">open standards</a> against <a href="http://code.google.com/android/">open platforms</a>. More and more, these competitors also become their <a href="http://code.google.com/android/">partners</a> and <a href="http://dotnetnuke.codeplex.com/">customers</a>.</li>
	<li>Go big or go home.
I believe that it is the spirit of Microsoft to take on new challenges, to put there money where there mouth is, and to embrace a big future with a strong vision.</li>
</ol>
<a href="http://gapingvoid.com/"><img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://farm1.static.flickr.com/191/496200921_94b2379d82_m.jpg" alt="" /></a>

Who should they hire? Well, I’m sure there are a lot of qualified people in this space, and I’m not going to mention anyone specific by name here… but if you <a href="http://twitter.com/calebjenkins">follow my twitter feed</a> then you might have seen something that I <a href="http://twitter.com/CalebJenkins/status/3895969262">posted</a> earlier today.

<a href="http://twitter.com/CalebJenkins/status/3895969262"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2009/09/image.png" border="0" alt="image" width="499" height="220" /></a>

… and hey Microsoft, if you’re listening, I wasn’t the only one that thought that…

<a href="http://developingux.com/wp-content/uploads/2009/09/whurely.png"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="@whurely" src="http://developingux.com/wp-content/uploads/2009/09/whurely_thumb.png" border="0" alt="@whurely" width="378" height="819" /></a>
<p align="right">… I’m just sayin.</p>
<div class="code2">
<h3>Updates:</h3>
<ul>
<li>Be sure to check out <a href="http://arstechnica.com/open-source/news/2009/09/new-microsoft-backed-open-source-foundation-faces-questions.ars">ars techica’s article</a> on the Codeplex Foundation and <a href="http://codebetter.com/blogs/jeremy.miller/archive/2009/09/11/some-quick-thoughts-about-the-new-codeplex-oss-initiative.aspx">Jeremy’s Post</a> as well.</li>
<li>Scott Bellware just chimed in on how the Codeplex Foundation is a "watershed moment, a turning point for the Microsoft platform and .NET community" - I couldn't agree more. Go <a href="http://blog.scottbellware.com/2009/09/analysis-codeplex-foundation-terms-of.html">check out his complete article</a>.</li>
<li>Phil Haack is <a href="http://haacked.com/archive/2009/09/13/more-on-the-codeplex-foundation.aspx">shedding some more light on Codeplex</a> Foundation</li>
<li>Red Monk's <a href="http://redmonk.com/sogrady/2009/09/11/codeplex/">Q&A on the CodePlex</a> Foundation</li>
<li>Featured on Linux .com! <a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft">Who Will Fill Sam Ramji's Role as Microsoft's Open Source Leader?</a></li>
</ul>
</div>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2009%2F09%2F10%2F3-reasons-microsoft-needs-open-source-officer%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2009/09/10/3-reasons-microsoft-needs-open-source-officer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tweaking my site</title>
		<link>http://developingux.com/blog/2009/09/09/tweaking-my-site/</link>
		<comments>http://developingux.com/blog/2009/09/09/tweaking-my-site/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 21:53:30 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[Design and UX]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[about]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=681</guid>
		<description><![CDATA[I’m not done yet… but I do like the changes so far. Old                                                              New If you are watching my RSS feed then you might not have noticed the change. Ultimately I’m planning on merging my Health Blog and Developing UX into a single space. I’m still trying to figure out the best way to organize [...]]]></description>
			<content:encoded><![CDATA[I’m not done yet… but I do like the changes so far.
<p align="center"><a href="http://developingux.com/wp-content/uploads/2009/09/blog_old.png"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="blog_old" src="http://developingux.com/wp-content/uploads/2009/09/blog_old_thumb.png" border="0" alt="blog_old" width="241" height="295" /></a> <a href="http://developingux.com/wp-content/uploads/2009/09/blog_new.png"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="blog_new" src="http://developingux.com/wp-content/uploads/2009/09/blog_new_thumb.png" border="0" alt="blog_new" width="268" height="296" /></a>
Old                                                              New

If you are watching my RSS feed then you might not have noticed the change. Ultimately I’m planning on merging my <a href="http://getlessofme.com">Health Blog</a> and Developing UX into a single space. I’m still trying to figure out the best way to organize my content by categories. Development, Health, Family, Religion, Politics, Entrepreneurism are the categories that I’m thinking about, of course I’d still like UX, Silverlight, Speaking, CommunityCast, SixFlags, Microsoft in there… so I’ve still got some thinking to think about.

Of course, <a href="http://twitter.com/randypeterman/status/3834565655">not everyone</a> likes the change…

<code><img style="display: inline; margin: 0px 5px" src="http://a1.twimg.com/profile_images/89887904/avatar_normal.jpg" alt="randypeterman" align="left" /> <strong><a href="http://twitter.com/randypeterman">randypeterman</a> </strong>@<a href="http://twitter.com/CalebJenkins">CalebJenkins</a> if UX is your priority DO NOT do white/grey text on dark colors. 'cept when showing people what not to do.</code>

Well… I didn’t say that I was done yet.  What are your suggestions?<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2009%2F09%2F09%2Ftweaking-my-site%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2009/09/09/tweaking-my-site/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Add some (biz)Spark to your startup!</title>
		<link>http://developingux.com/blog/2009/05/26/bizspark-for-startups/</link>
		<comments>http://developingux.com/blog/2009/05/26/bizspark-for-startups/#comments</comments>
		<pubDate>Wed, 27 May 2009 02:47:31 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[CommunityCast Events]]></category>
		<category><![CDATA[Design and UX]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[BizSpark]]></category>
		<category><![CDATA[dallas]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=606</guid>
		<description><![CDATA[In June I’ll be the local Silverlight expert, leading a technology track on Rich Internet Applications (RIA) at a Microsoft’s BizSpark event, SparkStart. From the official announcement: SparkStart is a full day of business and technology discussion (open format) and learning event for startups (“startup bootcamp”). This event will also be a networking opportunity for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developingux.com/wp-content/uploads/2009/05/image10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://developingux.com/wp-content/uploads/2009/05/image-thumb10.png" width="496" height="90" /></a></p>  <p>In June I’ll be the local <a href="http://www.microsoft.com/silverlight/">Silverlight</a> expert, leading a technology track on Rich Internet Applications (<a href="http://en.wikipedia.org/wiki/Rich_Internet_application">RIA</a>) at a Microsoft’s <a href="http://www.microsoft.com/bizspark/">BizSpark</a> event, <a href="http://sparkstart.eventbrite.com/">SparkStart</a>.</p>  <p>From the <a href="http://blogs.flyover18.com/christhi/post/2009/04/29/Announcing-Sparkstart-e28093-bizspark-event-at-the-MTC-dallas.aspx">official announcement</a>:</p>  <blockquote>   <p>SparkStart is a full day of business and technology discussion (open format) and learning event for startups (“startup bootcamp”). This event will also be a networking opportunity for those startups who are new to the BizSpark program and not yet enrolled in the program and would like to mingle and learn from key business and technology influencers. It will also be an event for those startups who are recently enrolled and need to keep the momentum going by learning key strategies for success, both in business, and in technology.</p> </blockquote>  <p>I’m looking forward to checking out Microsoft’s new Technology Center in Las Colinas, TX – It’s an amazing building!</p>  <p><a href="http://developingux.com/wp-content/uploads/2009/05/image11.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://developingux.com/wp-content/uploads/2009/05/image-thumb11.png" width="497" height="175" /></a></p>  <p>It’s going to be an incredible event for startups and entrepreneurs to learn, network and get to know some of the incredible technologies that are now available. I’m especially looking forward to hanging out with some of the other people that will be presenting at the event. (too name a few)</p>  <ul>   <li>Local start up expert, <a href="http://twitter.com/amuse">Alex Muse</a></li>    <li>Social Media Expert, <a href="http://twitter.com/giovanni">Giovanni Gallucci</a></li>    <li><a href="http://blakestar.net/">Blake Burris</a> of Facebook development and <a href="http://twitter.com/cohabitat">CoHabitat</a> fame</li>    <li>Angel investment and venture consulting mastermind <a href="http://twitter.com/marc1919">Marc Nathan</a></li>    <li>Microsoft User Experience Architect <a href="http://twitter.com/uxarchitect">Christian Thilmany</a></li>    <li>Microsoft Architect <a href="http://twitter.com/briangorbett">Brian Gorbett</a></li> </ul>  <p><a href="http://sparkstart.eventbrite.com/"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://developingux.com/wp-content/uploads/2009/05/image12.png" width="210" height="98" /></a></p>  <p> Check out SparkStart on <a href="http://twitter.com/sparkstart">twitter</a> and read some of <a href="http://blogs.flyover18.com/christhi/?tag=/bizspark">Christian’s other related posts</a>. Be sure to <a href="http://sparkstart.eventbrite.com/">register</a>. It’s going to be an amazing day!</p>
<p>&nbsp;</p><p>&nbsp;</p><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdevelopingux.com%2Fblog%2F2009%2F05%2F26%2Fbizspark-for-startups%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;margin-top:5px;"></iframe>]]></content:encoded>
			<wfw:commentRss>http://developingux.com/blog/2009/05/26/bizspark-for-startups/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	<div class="post-cnt">
<p>Caleb Jenkins, is a recognized Silverlight expert, Software Mentor and Coach; he is the Founder and Principal Mentor for <a href="http://proactionmentors.com">Proaction Mentors</a>, he is also a National Speaker for INETA, a Technical Editor for Wrox Press and is a Microsoft MVP. You can follow him on <a href="http://twitter.com/calebjenkins/">Twitter</a> or <a href="http://www.feedburner.com/fb/a/emailverifySubmit?feedId=1320550&loc=en_US">subscribe to his blog updates</a>. <br /></p>

<p>Caleb lives in the Dallas, TX area where he continues to date his beautiful wife and busy himself playing Candy Land and xBox 360 with their four incredible children. Eventually he’ll post some of the gazillion interviews that he's recorded on CommunityCast.tv or blog more... or stop speaking of himself in the third person. <a href="/about/">more...</a><br /></p>

<p>If you're still reading this, then take a minute to <a href="http://feeds.feedburner.com/CalebJenkins">subscribe to my RSS feed</a> or sign up to <a href="http://www.feedburner.com/fb/a/emailverifySubmit?feedId=1320550&loc=en_US">receive updates by email</a></p></div>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.531 seconds -->
