<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-6280494154561851040</atom:id><lastBuildDate>Thu, 21 Apr 2011 23:27:05 +0000</lastBuildDate><category>Hurricane</category><category>Community</category><category>Mentors</category><category>D2SIG</category><category>Geek Dinner</category><category>BDD</category><category>Test-Driven Development</category><category>ALT.NET</category><category>Tron</category><category>DDD</category><category>Movies</category><category>Typemock</category><category>Goals</category><category>Regions</category><category>Refactoring</category><category>Programming</category><category>Silverlight</category><title>Code From Within</title><description>A developer's take on just about everything.  Grains of salt included with every post.</description><link>http://codefromwithin.blogspot.com/</link><managingEditor>noreply@blogger.com (R. Eric Geiger)</managingEditor><generator>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CodeFromWithin" /><feedburner:info uri="codefromwithin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>CodeFromWithin</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FCodeFromWithin" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FCodeFromWithin" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FCodeFromWithin" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/CodeFromWithin" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FCodeFromWithin" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FCodeFromWithin" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FCodeFromWithin" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FCodeFromWithin" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FCodeFromWithin" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-1038305721239473288</guid><pubDate>Tue, 10 Feb 2009 04:52:00 +0000</pubDate><atom:updated>2009-02-09T22:54:37.567-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Refactoring</category><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">Regions</category><title>Letting Go Of Regions</title><description>&lt;p&gt;I’ve stopped using &lt;a href="http://msdn.microsoft.com/en-us/library/9a1ybwek(VS.71).aspx" target="_blank"&gt;regions&lt;/a&gt; in my code.&amp;#160; And, to be honest, I’ve never looked back.&amp;#160; I don’t need them, don’t even miss them.&amp;#160; In fact, the more I go on coding without attempting to group my methods, properties, etc., into sections of magically collapsible text, the more convinced I am that regions are unnecessary.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Requisite Caveats:&lt;/strong&gt; Before I go too far, let me clarify: I’m talking about regions in user-generated code.&amp;#160; My concern is really about developers making decisions about how they organize their own code for purposes of readability.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;And yes, I’ve used them in the past – repeatedly – in the manners listed below.&lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;They Distract From Refactoring&lt;/h4&gt;  &lt;p&gt;I look at regions as pseudo-refactoring tools.&amp;#160; All too often, their usage is the result of logic like “Hmm, this file is pretty big and unwieldy...&amp;#160; I know, I can use regions to get it under control.”&amp;#160; Leading to what I consider the fallacy of thinking that by condensing code inside the editor, we’ve made it more manageable.&amp;#160; When in fact, we haven’t done anything.&lt;/p&gt;  &lt;p&gt;Big files are blazing neon red flags that &lt;em&gt;real&lt;/em&gt;&amp;#160;&lt;a href="http://en.wikipedia.org/wiki/Refactoring" target="_blank"&gt;refactoring&lt;/a&gt; opportunities are at hand.&amp;#160; Using regions, however, can trick some developers into thinking that &lt;em&gt;n&lt;/em&gt;-thousand lines of code in a single file is really maintainable, because well, see, we’ve got them all organized into nicely labeled areas.&amp;#160; They’re a distraction from the real work that needs to be done.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_2CMVK5mjBt4/SZEIgpieySI/AAAAAAAAAFE/Sh4Wb_VSno8/s1600-h/image24.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_2CMVK5mjBt4/SZEIhBwVIxI/AAAAAAAAAFI/Xiic-VpAqNg/image_thumb14.png?imgmax=800" width="555" height="406" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Regions don’t make the file smaller, but they can mislead you into thinking this much code is maintainable.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Personally, I feel that when a file is growing to about 300 or more lines, something is amiss.&amp;#160; Whether it’s something like an &lt;a href="http://en.wikipedia.org/wiki/Single_responsibility_principle" target="_blank"&gt;SRP&lt;/a&gt; violation, a lack of optimization, or just that’s it becoming the “miscellaneous” file, a big class usually means big trouble.&amp;#160; I’m happy with &lt;em&gt;small&lt;/em&gt;.&amp;#160; Small is readable; it’s maintainable; it typically doesn’t need regions to stay organized.&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;They Conceal Surprises And “Ugly” Code&lt;/h4&gt;  &lt;p&gt;Regions can be, and often are, used to hide ugly and/or mysterious code.&amp;#160; The really scary stuff (general cruft, old commented-out lines, or my personal favorite… the “surprise!” code that tends to throw reviewers for a loop) that you &lt;em&gt;know&lt;/em&gt; you don’t ever want to see again.&amp;#160; And maybe that you don’t want anyone else to see, either.&lt;/p&gt;  &lt;p&gt;I’m of the belief that ugly code should &lt;em&gt;never&lt;/em&gt; be hidden.&amp;#160; You don’t want a “people under the stairs” scenario; that stuff will fester, rot, and mutate… and it will always come back to haunt you.&amp;#160; It has to be exposed; literally dragged out into the center of your editor, kicking, writhing, and screaming, so that it can be healed and cared for.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_2CMVK5mjBt4/SZEIh8qJwnI/AAAAAAAAAFM/i_Is6XJgDQs/s1600-h/image53.png"&gt;&lt;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="Collapsed regions are fine, right?" border="0" alt="Collapsed regions are fine, right?" src="http://lh6.ggpht.com/_2CMVK5mjBt4/SZEIiBsQMCI/AAAAAAAAAFQ/DBsSGUPs2no/image5_thumb2.png?imgmax=800" width="540" height="200" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Regions can cleverly disguise code that’s loaded with surprises.&amp;#160; Or, at least not what you’d expect when you read their captions…&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2CMVK5mjBt4/SZEIinoz76I/AAAAAAAAAFU/Ukx_YMgfg5U/s1600-h/image1.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Regions can have surprises in them" border="0" alt="Regions can have surprises in them" src="http://lh5.ggpht.com/_2CMVK5mjBt4/SZEIjObvz7I/AAAAAAAAAFY/-SkohjUKsbo/image_thumb.png?imgmax=800" width="552" height="350" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;…and then expand them out to find, well, hopefully something good.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;Make Your Code Readable&lt;/h4&gt;  &lt;p&gt;Readability has &lt;em&gt;nothing&lt;/em&gt; to do with regions, in my opinion.&amp;#160; It has everything to do with making your code sensible, logical, and straightforward.&lt;/p&gt;  &lt;p&gt;The best way to keep your code organized is to think critically about what you’re writing.&amp;#160; Don’t rely on editor shortcuts; they can become very addictive habits that are hard to break free from.&amp;#160; I put regions in this category; they trick you into thinking you’ve made your code more readable, but in reality you’ve done very little.&amp;#160; Far worse, you’ve inadvertently hidden stuff that other developers may need to see one day.&lt;/p&gt;  &lt;p&gt;What do you think?&amp;#160; Let me know if you still use regions.&amp;#160; Do you consider them necessary?&amp;#160; And, if so, where have they helped you the most?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-1038305721239473288?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=xb5ICf_idms:AMcBX1YKEyI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=xb5ICf_idms:AMcBX1YKEyI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=xb5ICf_idms:AMcBX1YKEyI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=xb5ICf_idms:AMcBX1YKEyI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/xb5ICf_idms/letting-go-of-regions.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_2CMVK5mjBt4/SZEIhBwVIxI/AAAAAAAAAFI/Xiic-VpAqNg/s72-c/image_thumb14.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2009/02/letting-go-of-regions.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-1139333491032012004</guid><pubDate>Tue, 27 Jan 2009 05:33:00 +0000</pubDate><atom:updated>2009-01-26T23:34:39.809-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ALT.NET</category><category domain="http://www.blogger.com/atom/ns#">Community</category><title>What Is “Community” To You?</title><description>&lt;p&gt;A question for all the developers out there: What is “community” to you?&lt;/p&gt;  &lt;p&gt;I thought about that question, and my own answer, after attending the the January Houston &lt;a target="_blank" href="http://altdotnet.org/"&gt;ALT.NET&lt;/a&gt; Geek Dinner.&amp;#160; To me, ALT.NET is about fostering the developer community, but I know not everyone sees it that way.&amp;#160; This got me wondering about how developers define the term for themselves.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;All I know about the developer community, to be perfectly honest, is what I’ve conjured up in my head.&amp;#160; So the rest of this post… and consider this fair warning… is nothing more than my perception, and probably a distorted one at that.&lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;It’s a necessity&lt;/h4&gt;  &lt;p&gt;Developers &lt;em&gt;need… &lt;/em&gt;in fact, &lt;em&gt;crave&lt;/em&gt; community.&amp;#160; The stereotype of the geek who doesn’t talk to anyone, stays in their cube or office all day, only comes out for coffee or a [mandatory] meeting, and generally is unable to communicate very well with other bipedal organisms… I refuse to perpetuate it.&amp;#160; I’m not sure how that image got started, or how the connection between “writing software” and “being socially isolated” got made, but I cannot subscribe to it.&amp;#160; And moreover, I think most serious developers… who care deeply about their profession… feel the same way.&lt;/p&gt;  &lt;p&gt;Rather than solitary and isolating, I choose to see software development as a social experience.&amp;#160; And not because there is the potential to have what we write end up in the hands of other people; some of whom are going to give us feedback, wanted or otherwise.&amp;#160; It’s actually because of the developer user groups, events, and conferences.&amp;#160; I find it amazing that all these fundamentally social gatherings, focused in one way or another on development, even &lt;em&gt;exist.&lt;/em&gt;&amp;#160; I see them as natural manifestations… as proof, really… of the need for developers to connect and exchange information.&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;It’s a social fabric&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;The developer community is a hodge-podge at best.&amp;#160; It’s not just a single group that, say, meets once per quarter and proclaims “Yep, we’re pretty much &lt;em&gt;it”.&amp;#160; &lt;/em&gt;It’s an amalgam of individuals, groups, and entities.&amp;#160; It’s a chorus of voices, via blogs, tweets, speaking engagements, magazines, coworkers and colleagues, that all work to shape and expand our craft.&amp;#160; They all do this in different ways, of course, but the net effect is the same.&lt;/p&gt;  &lt;p&gt;I enjoy reading lots of blogs (and I &lt;em&gt;would &lt;/em&gt;say “books”, but I’ve been unintentionally remiss on book-reading), attending conferences, going to &lt;a target="_blank" href="http://www.hdnug.org/hdnug/home.aspx"&gt;HDNUG&lt;/a&gt; meetings, and just about anything else that allows me to meet and hear other developers.&amp;#160; Reading blogs is critical, in my opinion; so much so that I consider it a bare minimum for community involvement.&amp;#160; I have a long list of feeds and I make use of a good &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Aggregator"&gt;RSS aggregator&lt;/a&gt; (I’ve been extremely loyal, or maybe just too lazy to change from, &lt;a target="_blank" href="http://www.newsgator.com/"&gt;Newsgator&lt;/a&gt;).&amp;#160; &lt;em&gt;Confession: There are podcasts and &lt;/em&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Video_podcast"&gt;&lt;em&gt;vidcasts&lt;/em&gt;&lt;/a&gt;&lt;em&gt; that I’d like to really digest, but I have a difficult time getting into continuous, heavy &lt;/em&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Audio-visual"&gt;&lt;em&gt;AV&lt;/em&gt;&lt;/a&gt;&lt;em&gt; use.&amp;#160; I’m much, much better at reading than I am at listening to podcasts.&amp;#160; But that is something I want to work on.&lt;/em&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;I use &lt;a target="_blank" href="http://twitter.com/home"&gt;Twitter&lt;/a&gt;, which is a relatively new tool for me; I’ve found it immensely valuable.&amp;#160; I’ve watched countless fascinating discussions happen in real-time.&amp;#160; And every user I follow has had something useful to say.&lt;/p&gt;  &lt;p&gt;Beyond micro-blogging, I rely on social networks (like &lt;a target="_blank" href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt;), IM, wikis (well, at least one for now), this blog, and even email as ways of staying in touch with other developers.&amp;#160; My goal is to use every tool I can find (and that suits me) to help establish and maintain connections.&amp;#160; I think that’s how the developer community works; we’re technologists at heart, but we’re &lt;em&gt;social&lt;/em&gt; ones, so we use a variety of tools to that end.&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;It cultivates learning&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;Good developers, of all skill and knowledge levels, understand the necessity of continuous improvement.&amp;#160; They willingly foster the learning process, support those who want to learn, and always remain open to new ideas.&amp;#160; For me, that exemplifies the goal of the community: encourage its members to improve.&amp;#160; It’s not about ego, “supreme coders” on parade, or being in an “everyone-else-is-doing-it-wrong” clique.&amp;#160; (And if that’s all you find around you, look elsewhere until you find something more positive.)&lt;/p&gt;  &lt;p&gt;What I want out of the developer community is to learn more than I can on my own.&amp;#160; So I expect that it will demonstrate a sincere commitment to developer education.&amp;#160; In my view, those with the knowledge I seek can tolerate giving more than a few “Getting started…” presentations, a dozen or so rudimentary questions, as long as it helps raise the awareness of everyone in the audience.&amp;#160; &lt;em&gt;Of course, it shouldn’t always be about 101-type experiences; a healthy association pushes its members to grow; not just stay on the remedial track.&lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;It’s not for everyone, but it should be&lt;/h4&gt;  &lt;p&gt;Despite all that I’ve said, it’s true that there are many talented, highly proficient, even brilliant, developers out there who probably don’t give one whit about any sort of community.&amp;#160; They get by just fine with maybe a few books, whitepapers, and near-perfect recall of their Computer Science courses, thank-you-very-much.&amp;#160; &lt;/p&gt;  &lt;p&gt;The only problem I have with that kind of developer is that they end up being “hidden” resources; their knowledge and experience stays locked away inside their brains.&amp;#160; They could benefit a lot more people than just the ones who happen to be lucky enough (or not) to work with them.&amp;#160; They may not need the community, but it could always use them.&lt;/p&gt;  &lt;p&gt;Community is important.&amp;#160; If you don’t see yourself as part of it, I recommend getting involved &lt;em&gt;at least a little bit&lt;/em&gt;.&amp;#160; That could be anything from attending a user group meeting to reading a developer’s blog and leaving a comment.&amp;#160; Even if you don’t get a benefit from the content, the mere act of participation will still move you in the right direction.&amp;#160;&amp;#160; Ultimately, community is whatever you make of it; just remember that it’s there to help you.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c3fe808b-827c-45f2-ad7c-15658ca9d772" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Community" rel="tag"&gt;Community&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ALT.NET" rel="tag"&gt;ALT.NET&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-1139333491032012004?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=Pzl58YtcCk4:0fT5-5Qgo0w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=Pzl58YtcCk4:0fT5-5Qgo0w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=Pzl58YtcCk4:0fT5-5Qgo0w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=Pzl58YtcCk4:0fT5-5Qgo0w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/Pzl58YtcCk4/what-is-community-to-you.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2009/01/what-is-community-to-you.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-2767565008289734285</guid><pubDate>Tue, 06 Jan 2009 12:30:00 +0000</pubDate><atom:updated>2009-01-06T06:30:14.806-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">D2SIG</category><title>D2SIG Meeting For January 2009</title><description>&lt;p&gt;The next meeting for the Designers and Developers Special Interest Group (&lt;a target="_blank" href="http://www.d2sig.org/default.aspx"&gt;D2SIG&lt;/a&gt;) (think: &lt;a target="_blank" href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;/&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;WPF&lt;/a&gt;/Anything-else-that-uses-&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Extensible_Application_Markup_Language"&gt;XAML&lt;/a&gt; SIG – okay, that’s my own term) is having their next meeting tonight at the Houston Microsoft office.&amp;#160; Specifics below:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;When&lt;/strong&gt;: Tuesday, January 6th, 2009 @ 6:00 PM CST&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Where&lt;/strong&gt;: &lt;a target="_blank" href="http://www.microsoft.com/about/companyinformation/usaoffices/southcentral/houston.mspx"&gt;Microsoft Houston&lt;/a&gt;       &lt;br /&gt;One Briar Lake Plaza       &lt;br /&gt;2000 W. Sam Houston Pkwy. S. #350       &lt;br /&gt;Houston, TX 77042&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Topic&lt;/strong&gt;: If I remember correctly, this meeting should be covering Silverlight out of the browser.&amp;#160; However, there’s a strong possibility that I’ve projected my hopes and wishes onto that agenda.&amp;#160; Whatever the real topic, it promises to be good.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;More Info&lt;/strong&gt;: &lt;a target="_blank" href="http://www.d2sig.org/default.aspx"&gt;The D2SIG main site&lt;/a&gt;&amp;#160; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is a very, very new group, dedicated to the User Experience (UX), but it’s quickly getting a strong following.&amp;#160; If you’re interested in anything having to do with the latest in UI, this group is for you.&amp;#160; Feel free to drop on in.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0692f9b3-5aea-475d-8f30-933d01c37cdb" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/D2SIG" rel="tag"&gt;D2SIG&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-2767565008289734285?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=KKb9enacrBw:UmkUGIML7X4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=KKb9enacrBw:UmkUGIML7X4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=KKb9enacrBw:UmkUGIML7X4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=KKb9enacrBw:UmkUGIML7X4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/KKb9enacrBw/d2sig-meeting-for-january-2009.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2009/01/d2sig-meeting-for-january-2009.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-5915041367636801499</guid><pubDate>Tue, 06 Jan 2009 01:00:00 +0000</pubDate><atom:updated>2009-01-05T19:08:46.356-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Geek Dinner</category><category domain="http://www.blogger.com/atom/ns#">ALT.NET</category><title>Houston ALT.NET Geek Dinner For January 2009</title><description>&lt;p&gt;This is just a quick post that the next Geek Dinner for the Houston &lt;a target="_blank" href="http://altdotnet.org/"&gt;ALT.NET&lt;/a&gt; group is coming up this Wednesday, January 7th, at Freebirds restaurant.&amp;#160; Here are the specifics:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;When&lt;/strong&gt;: Wednesday, January 7th, 2009 @ 6:00 PM CST&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Where&lt;/strong&gt;: &lt;a target="_blank" href="http://www.freebirds.com/"&gt;Freebirds World Burrito&lt;/a&gt;       &lt;br /&gt;3745 Greenbriar       &lt;br /&gt;Houston , Texas 77098&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Topics&lt;/strong&gt;: TBD, but you can see the working list on the forum &lt;a target="_blank" href="http://groups.google.com/group/houstonaltdotnet/browse_thread/thread/83c477c91a4c4e02"&gt;here&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;More Info&lt;/strong&gt;: &lt;a target="_blank" href="http://groups.google.com/group/houstonaltdotnet"&gt;Houston ALT.NET Group&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m new to the whole ALT.NET scene, and to be clear I am NOT the organizer of this dinner… that would be &lt;a target="_blank" href="http://flux88.com/blog/houston-alt-net-geek-dinner-january-7th/"&gt;Ben Scheirman&lt;/a&gt;.&amp;#160; But I am really looking forward to it; I’m hoping it will be a great way to discuss various developer-related topics with lots of bright people.&amp;#160; And maybe eat something… I’m taking the “dinner” part of that title &lt;em&gt;very&lt;/em&gt; seriously.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:204da021-c988-4175-b52d-a5d6297c4d79" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/ALT.NET" rel="tag"&gt;ALT.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Geek+Dinner" rel="tag"&gt;Geek Dinner&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-5915041367636801499?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=NJfDAzB97Zk:QM9tW7PSoKI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=NJfDAzB97Zk:QM9tW7PSoKI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=NJfDAzB97Zk:QM9tW7PSoKI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=NJfDAzB97Zk:QM9tW7PSoKI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/NJfDAzB97Zk/houston-altnet-geek-dinner-for-january.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>1</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2009/01/houston-altnet-geek-dinner-for-january.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-3523136414698591645</guid><pubDate>Fri, 02 Jan 2009 17:17:00 +0000</pubDate><atom:updated>2009-01-02T11:17:45.111-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BDD</category><category domain="http://www.blogger.com/atom/ns#">DDD</category><category domain="http://www.blogger.com/atom/ns#">Goals</category><title>My Goals for 2009</title><description>&lt;p&gt;Let me start off by saying that I’m no good at making resolutions for an entire year.&amp;#160; I mean, that’s 365 days that I have stay committed to a list I drafted in about five minutes at the end of the previous year.&amp;#160; The whole process feels so arbitrary and failure-prone…&lt;/p&gt;  &lt;p&gt;So I went with a different tactic.&amp;#160; I renamed mine to “goals”, and spent a goodly amount of time on them… in the &lt;em&gt;tens of minutes&lt;/em&gt;, at least.&amp;#160; Completely different animal.&amp;#160; And I figure what better way to keep them enforced than to make them public.&amp;#160; So here they are, in order of priority:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Blog more.&lt;/strong&gt;&amp;#160; I honestly want to do more of this.&amp;#160; I enjoy writing; it’s my second-guessing (both on topics and syntax) that slows me down more than anything else.&amp;#160; I think that’s one of those problems that only gets minimized through continual practice.&amp;#160; I figure I should get myself to an average frequency of one post per week this year. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Do more public speaking.&lt;/strong&gt;&amp;#160; It’s something I’ve only done a handful of times, and loved every minute.&amp;#160; I’m going to find ways to do more of this.&amp;#160; My goal is five presentations – in whatever forum I can get, I’m not choosy - for the year. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Dive head-first into at least three things I barely know.&lt;/strong&gt;&amp;#160; Sometimes the only way to learn something… to &lt;em&gt;really learn&lt;/em&gt; it… is by doing it.&amp;#160; This could just be by implementing small pilot projects at home, participating in something community-driven, or even something at work.&amp;#160; My target list for now &lt;strong&gt;*&lt;/strong&gt; includes:&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;Domain Driven Design&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Behavior_Driven_Development"&gt;Behavior Driven Development&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a target="_blank" href="http://www.asp.net/mvc/"&gt;ASP.NET MVC&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a target="_blank" href="http://research.microsoft.com/en-us/um/people/curtisvv/fsharp_default.aspx"&gt;F#&lt;/a&gt;/Functional Programming&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;&lt;strong&gt;Read at least two technical books.&lt;/strong&gt;&amp;#160; I’ve seriously neglected the whole book-reading thing (in terms of growing my developer skills); staying mostly with material I can find online and in ebooks.&amp;#160; In 2009, I’m going to get some highly recommended &lt;em&gt;real&lt;/em&gt; books and take the time to read them.&amp;#160; (However, I’m staying away from technology-specific books; I’m more interested in concepts and methodologies than in new skillsets). &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;* I reserve the right to capriciously change my head-first list at any time.&lt;/p&gt;  &lt;p&gt;It’s a short list for now, but it’s enough to keep me motivated.&amp;#160; Most likely I’ll be editing this as time goes on.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dc9ec182-ed96-4055-8ad9-85dec62b0832" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Developer+Goals" rel="tag"&gt;Developer Goals&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-3523136414698591645?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=pg6HmUHwh_Q:M1JB0fYr6G8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=pg6HmUHwh_Q:M1JB0fYr6G8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=pg6HmUHwh_Q:M1JB0fYr6G8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=pg6HmUHwh_Q:M1JB0fYr6G8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/pg6HmUHwh_Q/my-goals-for-2009.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2009/01/my-goals-for-2009.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-7189657335034518743</guid><pubDate>Fri, 02 Jan 2009 00:58:00 +0000</pubDate><atom:updated>2009-01-01T19:02:02.026-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>What I’ve Learned About The Silverlight Fit Client</title><description>&lt;p&gt;&lt;a target="_blank" href="http://www.adobe.com/products/air/"&gt;Adobe AIR&lt;/a&gt; has it.&amp;#160; Mono’s &lt;a target="_blank" href="http://tirania.org/blog/archive/2008/Apr-17.html"&gt;Moonlight&lt;/a&gt; has it.&amp;#160; &lt;a target="_blank" href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; doesn’t… at least not yet, depending on what you read.&amp;#160; I’m talking about the standalone host container that allows Rich Internet Applications (&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Rich_Internet_application"&gt;RIA&lt;/a&gt;s) to live outside the browser.&amp;#160; A Silverlight player that can run applications on the desktop as first class citizens.&amp;#160; There’s even a term for it: “Fit Client” (although I’m not sure if that will stick… I don’t even see it on Wikipedia, for goodness sake; but it’s a bit easier to say than “desktop RIA”, so I’m using it until such time as it becomes completely invalidated).&lt;/p&gt;  &lt;p&gt;I’ve been using &lt;a target="_blank" href="http://www.tweetdeck.com/beta/"&gt;TweetDeck&lt;/a&gt; so much lately that it’s got me wondering &lt;em&gt;a lot&lt;/em&gt; why Silverlight doesn’t yet have a desktop container.&amp;#160; I like the idea of having RIAs on my desktop (and yes, I am an unabashed fan of &lt;a target="_blank" href="http://vista.gallery.microsoft.com/vista/SideBar.aspx?mkt=en-us"&gt;Vista Sidebar&lt;/a&gt;, which allows me to actually enjoy my desktop).&lt;/p&gt;  &lt;p&gt;So I started searching the tubes for anything I could find on whether or not there actually was a Silverlight container.&amp;#160; Maybe it was out there but I just hadn’t seen it yet; but if there wasn’t anything, and no plans for it in v3, then I wanted to find out why.&amp;#160; &lt;/p&gt;  &lt;p&gt;All I was able to find, however, was a scripting solution that allowed you to run Silverlight apps on a Windows-only platform, hosting them inside &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms536496(VS.85).aspx"&gt;HTML applications&lt;/a&gt;.&amp;#160; &lt;em&gt;If you want to know more about that, you can find a detailed solution here: &lt;/em&gt;&lt;a target="_blank" href="http://geekswithblogs.net/lbugnion/archive/2008/04/24/silverlight-running-standalone-full-trust-applications.aspx"&gt;&lt;em&gt;Silverlight: Running standalone full trust applications&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&amp;#160; (&lt;u&gt;Caveat&lt;/u&gt;: the post uses SL 2 Beta 1, as near as I can tell; I had to do some minor tweaking to get it to run against SL 2 RTM).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I concluded that there was no real Silverlight fit client out there, nor was there one on the horizon, and I began laying out a list of wild, uninformed speculations about its absence for this post.&amp;#160; And I almost posted it last night; I’m glad I didn’t, partly because it was turning into a minor rant, and also because I finally found what I was looking for once I started searching for new features in Silverlight 3.&lt;/p&gt;  &lt;p&gt;It now appears that Silverlight &lt;em&gt;might&lt;/em&gt; actually have a fit client platform in version 3.&amp;#160; This means that you will be able to build desktop applications directly in Silverlight, and they will [theoretically] run on any OS.&amp;#160; If it’s true, then it’s a very, very good thing.&amp;#160; &lt;em&gt;You can find this info among the list of other upcoming Silverlight 3 features at Bart Czernicki’s &lt;/em&gt;&lt;a target="_blank" href="http://silverlighthack.com/post/2008/12/11/Silverlight-3-What-we-Know-So-Far-What-We-Can-Predict-(Part-1-of-2).aspx"&gt;&lt;em&gt;Silverlight Hack&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&amp;#160; His source for the fit client material came from an &lt;/em&gt;&lt;a target="_blank" href="http://www.insideria.com/2008/11/silverlight-3-the-next-fit-cli.html"&gt;&lt;em&gt;InsideRIA post&lt;/em&gt;&lt;/a&gt;&lt;em&gt; by Richard Monson-Haefel, which goes into more detail on the RIA wars happening under our very noses.&amp;#160; And that post is using a NYT article as its source (hmm, starts to feel just a little like “a guy who knows a guy who knows a guy who said something about Silverlight…”)&amp;#160; Richard states about the NYT item:&lt;/em&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sound familiar?&amp;#160; What the NYT is saying is that Microsoft has plans to create a Silverlight runtime outside the browser similar to Adobe AIR, JWT, Gears, or Curl. That means developers will be able to create Silverlight applications that run right off the desktop - any desktop. This is what we call a &amp;quot;Fit Client&amp;quot; solution - a RIA platform that works both in the browser and out of it.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m a little concerned, however, that I had to scour for as long as I did before I found this information.&amp;#160; My take on it is that most of this is prediction; but I’m also expecting this to get cleared up at &lt;a target="_blank" href="http://2009.visitmix.com/"&gt;Mix09&lt;/a&gt;, when there should be some formal announcement about Silverlight 3’s feature set.&amp;#160; Until then, I plan on following this topic for as long as I can. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8d69a4ec-b485-4ea1-9b89-bb9be8e44f61" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Fit+Client" rel="tag"&gt;Fit Client&lt;/a&gt;,&lt;a href="http://technorati.com/tags/RIA" rel="tag"&gt;RIA&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-7189657335034518743?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=UzJM6TRr8GY:u2800vBEgWQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=UzJM6TRr8GY:u2800vBEgWQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=UzJM6TRr8GY:u2800vBEgWQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=UzJM6TRr8GY:u2800vBEgWQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/UzJM6TRr8GY/what-ive-learned-about-silverlight-fit.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>2</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2009/01/what-ive-learned-about-silverlight-fit.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-822053546395243058</guid><pubDate>Tue, 23 Dec 2008 06:45:00 +0000</pubDate><atom:updated>2008-12-23T00:53:44.717-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Mentors</category><title>Get A Mentor, Be A Mentor</title><description>&lt;p&gt;A few weeks back I was at an &lt;a target="_blank" href="http://www.arcready.com/"&gt;&lt;strong&gt;ArcReady&lt;/strong&gt;&lt;/a&gt; event given by Phil Wheat which focused mainly on soft skills for developers.&amp;#160; I like technology a lot, and I love my profession as a software developer, but being a code ninja without interacting with humans is pretty rare these days.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/philwheat/archive/2008/12/17/arcready-slides.aspx"&gt;Phil’s presentation&lt;/a&gt; was filled with useful advice, but the one topic that stuck out for me the most was &lt;strong&gt;mentoring&lt;/strong&gt;.&amp;#160; I believe that all developers could benefit from having mentors, but you just don’t see much of it in the wild.&amp;#160; (Well, your experiences may vary, but I personally haven’t seen much of it.)&lt;/p&gt;  &lt;p&gt;I’ve been thinking a lot about mentoring, and synthesizing some of Phil’s comments with my own requirements and goals.&amp;#160; I see mentoring as a two-way street: if you are serious about having someone to learn from, then you should reciprocate whenever you get a chance.&amp;#160; So, get a mentor, but also be willing to be a mentor.&amp;#160; So here’s my &lt;strong&gt;rough&lt;/strong&gt; list of what I think that should entail:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Get a mentor.&lt;/strong&gt;&amp;#160; &lt;ul&gt;       &lt;li&gt;Pick someone that you respect and open up a dialog.&amp;#160; This doesn’t have to be some sort of awkward, platonic variant on a promise ring exchange or anything like that.&amp;#160; Just ask questions, gain knowledge, that’s about it. &lt;/li&gt;        &lt;li&gt;Look for someone who challenges you and shows you respect.&amp;#160; There are a lot of people out there who are brilliant but just don’t make good mentors because they lack “people skills”, or have larger than life egos.&amp;#160; &lt;strong&gt;Do not expect those people to make very good mentors&lt;/strong&gt;.&amp;#160; A mentor should test your limits and challenge what you think you know, but not in a overly negative or discouraging way.&amp;#160; Put another way, they are not drill sergeants. &lt;/li&gt;        &lt;li&gt;It should not be someone on your team or anyone you work directly with.&amp;#160; This came from Phil’s presentation, and actually caught me by surprise.&amp;#160; But the more I think about it, the more sense it makes.&amp;#160; You need to have uncompromised communication with your mentor, and that’s just not always possible with someone on your team, or your manager, etc. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Be a mentor.&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Be open to the idea of helping those around you.&amp;#160; If you’re an alpha geek, this shouldn’t be hard since you should be used to answering a lot of questions already.&amp;#160; (And, btw, what are you doing reading &lt;em&gt;this&lt;/em&gt; blog? ;-) )&amp;#160; If you’re not, or don’t consider yourself one, just teach what you know.&amp;#160; If you’ve been doing any serious development for the past few years, you &lt;strong&gt;do&lt;/strong&gt; have knowledge that can help someone else. &lt;/li&gt;        &lt;li&gt;Advocate the learning process, not just the skill.&amp;#160; Given enough time, anyone can learn anything (notice I didn’t say “…&lt;em&gt;master&lt;/em&gt; anything”).&amp;#160; Maybe you’re a code ninja now, but at some point you weren’t; developers looking for a mentor want guidance and want to learn from your experience, not to hear how you did some wicked &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Refactoring"&gt;refactoring&lt;/a&gt; over the weekend. &lt;/li&gt;        &lt;li&gt;Be patient with anyone who is actively trying to learn.&amp;#160; I hate to harp on this one point, but I feel it’s worth repeating: I’ve seen scary-smart developers who were also just the worst people in the world to learn from.&amp;#160; &lt;em&gt;And that’s okay, not everyone needs to be a teacher.&lt;/em&gt;&amp;#160; But if you really &lt;strong&gt;want&lt;/strong&gt; to educate those around you and you’re finding that you’re impatient, please find a way to work on that.&amp;#160; Your knowledge is important, and you can make a difference to another developer. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That’s all that I can put down now; I’m hoping to refine this list a bit better over time.&amp;#160; Maybe when I get a chance to actually &lt;strong&gt;mentor&lt;/strong&gt; someone myself.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:49a01d91-032e-4272-acd5-870a0ac101e1" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Mentors" rel="tag"&gt;Mentors&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-822053546395243058?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=7sYj90JtzRY:1ukYz_ioxW0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=7sYj90JtzRY:1ukYz_ioxW0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=7sYj90JtzRY:1ukYz_ioxW0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=7sYj90JtzRY:1ukYz_ioxW0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/7sYj90JtzRY/get-mentor-be-mentor.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/12/get-mentor-be-mentor.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-927680707340544942</guid><pubDate>Thu, 23 Oct 2008 03:17:00 +0000</pubDate><atom:updated>2008-10-22T22:21:21.698-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Refactoring</category><category domain="http://www.blogger.com/atom/ns#">Test-Driven Development</category><title>Refactoring Without Unit Testing – Like Traveling Back In Time And Stepping On Butterflies, Only More Dangerous</title><description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Refactoring" target="_blank"&gt;Refactoring&lt;/a&gt;, rewriting existing code to make it as small, efficient, and ultimately as testable as possible, is something of a double-edged sword.&amp;#160; In the Test-Driven world, it’s an absolute necessity.&amp;#160; In the non-TDD world, however, it becomes a potentially very dangerous activity that can make things worse off than where you started.&lt;/p&gt;  &lt;h4&gt;If Only I Knew Then…&lt;/h4&gt;  &lt;p&gt;Refactoring is something of a hindsight practice.&amp;#160; It’s like traveling back in time with the knowledge you have of the present, and seeking to “set things right” with the code in question.&lt;/p&gt;  &lt;p&gt;In TDD, you refactor &lt;strong&gt;all the time&lt;/strong&gt;.&amp;#160; And that’s perfectly fine; in fact it’s expected.&amp;#160; You write tests and code for them, and armed with new insight, go back and tweak, rewrite, move around, and otherwise morph that code into something better.&amp;#160; Rinse, repeat.&amp;#160; And it’s a good thing – your tests, if you’ve written them well – will alert you if you break something.&lt;/p&gt;  &lt;h4&gt;I’ve Got Something On My Shoe…&lt;/h4&gt;  &lt;p&gt;But without unit tests, refactoring can very easily degenerate into an exercise in &lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/A_Sound_of_Thunder" target="_blank"&gt;reckless time travel&lt;/a&gt;&lt;/strong&gt;.&amp;#160; Yes, you &lt;em&gt;are&lt;/em&gt; going back to make the code better… you can clearly see how &lt;em&gt;this&lt;/em&gt; method here is bloated and/or redundant, so why not just take some stuff out, move it around, etc.?&amp;#160; It all looks fine, now let’s just hop in our time machine and get back to present-day.&amp;#160; &lt;em&gt;By the way, what was that thing I just stepped on?…&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;It’s easy to squash a few butterflies when refactoring “blind”, so to speak.&amp;#160; You can’t really be sure the code you just modified will work, or work as expected, or worse yet… something totally new and unexpected will now crop up.&amp;#160; You’ve altered your entire environment, and you have no measures to tell you just how bad, or just plain different, things might be.&amp;#160; If that doesn’t scare you, it &lt;em&gt;should &lt;/em&gt;(in a healthy, makes-you-a-better-programmer way, of course).&lt;/p&gt;  &lt;h4&gt;The Refactor Paradox&lt;/h4&gt;  &lt;p&gt;If you have the urge to refactor whenever you’re coding… that’s great.&amp;#160; It means you’re thinking about how to improve things, and that’s an excellent mindset to have.&amp;#160; But if you happen to be in an environment where you can’t unit test, or if you’re averse to testing, then tread a bit more carefully as you refactor.&amp;#160; You’re still writing &lt;strong&gt;new code&lt;/strong&gt;, even though it’s often &lt;strong&gt;old code&lt;/strong&gt;.&amp;#160; The act of altering it makes it new again, and even if you’re absolutely sure there’s no new logic there, it’s good just to assume it’s all brand new and that you don’t really know how it’s going to behave.&lt;/p&gt;  &lt;p&gt;I have done my fair share of refactoring sans tests before, and I’ve learned my lessons the hard way.&amp;#160; These days I try to be a lot more careful.&amp;#160; If I refactor code that has never been tested before, I do my best to enforce a “&lt;em&gt;no new code without unit tests”&lt;/em&gt; policy, and treat all that old code as brand new.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ac10595c-e279-4bd4-bbaf-42dda886beb9" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/TDD" rel="tag"&gt;TDD&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Refactoring" rel="tag"&gt;Refactoring&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Time+Travel" rel="tag"&gt;Time Travel&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-927680707340544942?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=5LKT5ShZMhk:jg4sf2zg2js:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=5LKT5ShZMhk:jg4sf2zg2js:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=5LKT5ShZMhk:jg4sf2zg2js:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=5LKT5ShZMhk:jg4sf2zg2js:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/5LKT5ShZMhk/refactoring-without-unit-testing-like.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>2</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/10/refactoring-without-unit-testing-like.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-4126856941761780608</guid><pubDate>Sun, 19 Oct 2008 18:35:00 +0000</pubDate><atom:updated>2008-10-19T13:52:43.147-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Programming</category><title>Throwing Exceptions Like Popeye</title><description>&lt;p&gt;I was recently performing an ad hoc code review of a custom &lt;a href="http://en.wikipedia.org/wiki/Library_(computing)#Dynamic_linking" target="_blank"&gt;DLL&lt;/a&gt; when I saw what, in my opinion, was an over abundance of exceptions.&amp;#160; I went back to the developer and proceeded to discuss how we could refactor-away various exceptions, shorten certain &lt;a href="http://msdn.microsoft.com/en-us/library/xtd0s8kd.aspx" target="_blank"&gt;&lt;strong&gt;Try/Catch&lt;/strong&gt;&lt;/a&gt; blocks, possibly even mitigate them altogether, etc.&lt;/p&gt;  &lt;p&gt;The developer, whom I consider to be a very smart and very patient man, listened earnestly and responded with what I felt was an excellent use of the &lt;a href="http://en.wikipedia.org/wiki/Socratic_method" target="_blank"&gt;Socratic Method&lt;/a&gt;:&amp;#160; “&lt;em&gt;Hmm, but I thought that [in this one exception usage] we needed to let the caller know this particular item was incorrect.&amp;#160; Don’t we need to communicate something to them?”&lt;/em&gt;&amp;#160; (lots of paraphrasing)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Communicate?”&lt;/em&gt;&amp;#160; Right away he had me seeing exceptions as part of the &lt;strong&gt;feedback loop&lt;/strong&gt;, which I had forgotten in my zeal to optimize and refactor.&amp;#160; (We were in agreement on Try/Catch usage, by the way, which is generally to use sparingly with only the most critical lines of code.)&lt;/p&gt;  &lt;p&gt;This started a great dialog between the two of us, and we eventually reached an alignment on exception usage in that instance.&amp;#160; I learned a lot from his viewpoint; and it also got me thinking more seriously about how exceptions are commonly used. &lt;/p&gt;  &lt;h4&gt;The Popeye Rule&lt;/h4&gt;  &lt;p&gt;I had typically written my own code with exception handling that followed what I loosely think of as “&lt;strong&gt;The Popeye Rule&lt;/strong&gt;”: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“&lt;strong&gt;&lt;em&gt;&lt;a href="http://www.saidwhat.co.uk/characterquotes/popeye_334" target="_blank"&gt;That’s all I can stands and I can’t stands no more!&lt;/a&gt;”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Meaning that I strived to write my code to be as robust as I could possibly make it, handling &lt;strong&gt;everything&lt;/strong&gt; I thought a caller might possibly give me with guard clauses and graceful exits, finding every excuse I could think of to avoid Try/Catch blocks, etc.&amp;#160; I only wanted my code to &lt;strong&gt;ever&lt;/strong&gt; throw an exception when something truly horrid and abnormal occurred and just couldn’t be handled any other way.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;(Super-extreme caveat: &lt;/strong&gt;That does not mean I advocated, nor do I ever advocate, the intentional blind swallowing of exceptions.&amp;#160; I just didn’t like having code so brittle that it shattered into exceptions at the slightest fault).&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;“Let Me Tell You What Happened”&lt;/h4&gt;  &lt;p&gt;After talking with my colleague, I’m tending to not be so “ruggedly individualistic” with my views on how code should behave.&amp;#160; Instead of handling everything except for the very worst case/last-straw scenario and then throwing a spectacular, brawling exception (maybe tossing in some encoded GIFs of battleships firing their cannons into the stack trace), I want to give my caller &lt;strong&gt;information&lt;/strong&gt;.&amp;#160; If something goes wrong, I need to let them know what happened and why.&lt;/p&gt;  &lt;p&gt;I’ve done a lot of reading about how others feel about exception usage and so far the best overall guidelines I have found are Scott Hanselman’s &lt;a href="http://www.hanselman.com/blog/GoodExceptionManagementRulesOfThumb.aspx" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; It’s a great short list that’s easy to follow.&lt;/p&gt;  &lt;p&gt;Exceptions can seem like disruptions, even symptoms of brittle code or poor design; but this experience reminded me that their true purpose is to help by providing valuable feedback: “S&lt;em&gt;omething here went wrong.&amp;#160; Let me tell you what happened…[Stack Trace ensues]…”&lt;/em&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cbdabade-79b7-4837-918d-90608b3b04fc" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Exceptions" rel="tag"&gt;Exceptions&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Popeye" rel="tag"&gt;Popeye&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-4126856941761780608?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=qBGfwgvvA38:6FAqiXZtD-0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=qBGfwgvvA38:6FAqiXZtD-0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=qBGfwgvvA38:6FAqiXZtD-0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=qBGfwgvvA38:6FAqiXZtD-0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/qBGfwgvvA38/throwing-exceptions-like-popeye.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/10/throwing-exceptions-like-popeye.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-1387410662249938079</guid><pubDate>Tue, 14 Oct 2008 23:12:00 +0000</pubDate><atom:updated>2008-10-14T21:57:08.504-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Typemock</category><category domain="http://www.blogger.com/atom/ns#">Test-Driven Development</category><title>Mocking The Unmockable</title><description>&lt;p&gt;Recently I was building an &lt;a href="http://msdn.microsoft.com/en-us/library/zec9k340.aspx" target="_blank"&gt;&lt;strong&gt;HttpModule&lt;/strong&gt;&lt;/a&gt; project, and quickly ran into a serious problem: I couldn’t test my code.&amp;#160; The reason?&amp;#160; I was using objects that were &lt;strong&gt;unmockable&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;The scenario involved passing an &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx" target="_blank"&gt;HttpContext&lt;/a&gt;&lt;/strong&gt; object into my module so that I could manipulate certain properties.&amp;#160; What’s wrong with that?&amp;#160; Well, for starters HttpContext is sealed, along with every property attached to it that I needed.&amp;#160; My standard approach is to use &lt;a href="http://ayende.com/projects/rhino-mocks.aspx" target="_blank"&gt;Rhino Mocks&lt;/a&gt;, which has served me well in the past.&amp;#160; But here I hit a wall – or rather Rhino Mocks did.&lt;/p&gt;  &lt;p&gt;Take a look at the snippet below, which demonstrates the problem.&amp;#160; I’m creating a very simple dynamic mock of HttpContext, and attempting to pass it to my interface (which accepts HttpContext – I’m omitting the interface here for brevity)…&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;[Test]&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Should_Be_Mockable_But_Is_Not()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    HttpContext context = _repository.DynamicMock&amp;lt;HttpContext&amp;gt;(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt; (HttpContext), &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    IMyModule module = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MyModule();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    module.ProcessRequest(context);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;When I run this test, I get this unpleasant error:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;TestCase &lt;span style="color: #006080"&gt;'MyTests.Should_Be_Mockable_But_Is_Not'&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;failed: System.NotSupportedException : Can't create mocks of &lt;span style="color: #0000ff"&gt;sealed&lt;/span&gt; classes&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Sealed?!&amp;#160; What is this nonsense?!&amp;#160; And then, the furrowing of my brow as my brain struggled to comprehend… “oh, right… ahem… &lt;strong&gt;&lt;em&gt;sealed&lt;/em&gt;&lt;/strong&gt;”.&amp;#160; Apparently one cannot just go right out and mock a sealed class these days.&lt;/p&gt;

&lt;p&gt;But I didn’t want to change my object to make it &lt;em&gt;more mockable&lt;/em&gt;; I needed that HttpContext object, or at the very least, another property on it which no doubt would also be sealed.&amp;#160; Rhino Mocks couldn’t deal with it; what could I do?&lt;/p&gt;

&lt;h4&gt;Enter Typemock Isolator&lt;/h4&gt;

&lt;p&gt;I had to do a lot of searching, but somehow I found my way past &lt;a href="http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx" target="_blank"&gt;duck-typing&lt;/a&gt; (which I thought was interesting, but just too much work in this scenario) over to &lt;strong&gt;&lt;a href="http://www.typemock.com/" target="_blank"&gt;Typemock&lt;/a&gt;&lt;/strong&gt;.&amp;#160; I didn’t really know it very well, other than it was yet-another-mock-framework.&amp;#160; But it did one thing Rhino Mocks didn’t do – it &lt;strong&gt;mocked sealed objects&lt;/strong&gt;.&amp;#160; And that was enough to get my attention.&lt;/p&gt;

&lt;p&gt;So how did I mock the unmockable with Typemock Isolator?&amp;#160; I used this &lt;a href="http://www.typemock.com/community/viewtopic.php?t=376&amp;amp;sid=8b3290caa53cc395b6ef63872afe33d3" target="_blank"&gt;forum thread&lt;/a&gt; as my guide, the basic gist of which is to initialize some MockObjects to the type that I want to mock, and use those as the initialization values for my real objects that I’ll pass in my tests.&lt;/p&gt;

&lt;p&gt;The sample below shows a full setup and one test.&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; MockObject _mockHttpContext;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; MockObject _mockRequest;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; HttpContext _context;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; HttpRequest _request;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;[TestFixtureSetUp]&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; TestFixtureSetUp()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    MockManager.Init();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #008000"&gt;// Create a mocked HttpContext object.&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    _mockHttpContext = MockManager.MockObject(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt; (HttpContext), Constructor.Mocked);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    _context = _mockHttpContext.Object &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; HttpContext;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #008000"&gt;// Create a mocked HttpRequest object.&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    _mockRequest = MockManager.MockObject(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt; (HttpRequest), Constructor.Mocked);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    _request = _mockRequest.Object &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; HttpRequest;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #008000"&gt;// Configure context to return a Request object.&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    _mockHttpContext.ExpectGet(&lt;span style="color: #006080"&gt;&amp;quot;Request&amp;quot;&lt;/span&gt;, _request, 1);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;}&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;[Test]&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Should_Definitely_Be_Mockable_Now()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    IMyModule module = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MyModule();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    module.ProcessRequest(_context);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h4&gt;Sounds great!&amp;#160; What’s the catch?&lt;/h4&gt;

&lt;p&gt;So Typemock can solve my unmockable problem for me.&amp;#160; Excellent.&amp;#160; But what’s the catch?&amp;#160; Rhino Mocks is free, Typemock Isolator is not.&amp;#160; This can make all the difference depending on budget, need, and other constraints.&amp;#160; For me in this situation, it’s well worth the price, though.&lt;/p&gt;

&lt;p&gt;This may be one of those situations where I’m not supposed to be trying to test code that passes around sealed objects.&amp;#160; Or, maybe I could rewrite my code so that I’m getting what I need, but everything is testable without having to go outside Rhino.&amp;#160; I’m willing to concede that much.&amp;#160; But in this case, I’m keeping my module intact, but I’ve also got the testability I need.&amp;#160; So I’m happy.&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:73675728-042a-4188-954a-09659ded61cc" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Typemock" rel="tag"&gt;Typemock&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TDD" rel="tag"&gt;TDD&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Rhino+Mocks" rel="tag"&gt;Rhino Mocks&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-1387410662249938079?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=K6XsEwHMRS4:j3iksoEmaE0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=K6XsEwHMRS4:j3iksoEmaE0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=K6XsEwHMRS4:j3iksoEmaE0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=K6XsEwHMRS4:j3iksoEmaE0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/K6XsEwHMRS4/mocking-unmockable.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>2</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/10/mocking-unmockable.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-2660660975273555163</guid><pubDate>Tue, 30 Sep 2008 11:55:00 +0000</pubDate><atom:updated>2008-09-30T07:15:47.577-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">Test-Driven Development</category><title>Understanding TDD Resistance – Is It More Than The Learning Curve?</title><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;I’ve been reading a lot interesting posts lately around &lt;a href="http://en.wikipedia.org/wiki/Test_driven_development" target="_blank"&gt;Test-Driven Development&lt;/a&gt; adoption, or the lack thereof, the collective synopsis of which goes something like:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;TDD is too difficult and cumbersome to gain widespread traction.&amp;#160; It needs to change if it is to get anymore mindshare among developers.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Roy Osherove makes a &lt;a href="http://weblogs.asp.net/rosherove/archive/2008/09/20/goodbye-mocks-farewell-stubs.aspx" target="_blank"&gt;compelling argument&lt;/a&gt; that developers continue to shy away from TDD because of its apparent complexity, not just in learning unit testing, but also &lt;a href="http://en.wikipedia.org/wiki/Mock_object" target="_blank"&gt;mocking&lt;/a&gt; and the idiosyncrasies of mock frameworks, and dealing with all the ancillary methodologies that get swept up in TDD’s wake (&lt;a href="http://en.wikipedia.org/wiki/Dependency_injection" target="_blank"&gt;Dependency Injection&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Inversion_of_control" target="_blank"&gt;IoC&lt;/a&gt;, etc.).&amp;#160; And all of these concepts become (paraphrasing) a big barrier to entry for too many developers.&lt;/p&gt;  &lt;p&gt;I agree that there is a lot of “stuff” to learn when wading into the waters of TDD, and just trying to take it all in can indeed be daunting for many.&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;But is it really just the learning curve?&lt;/h4&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;p&gt;I’ve been thinking a lot about the phenomenon of &lt;em&gt;resistance from developers &lt;/em&gt;to TDD, and wondering if there isn’t more going on than just a steep learning curve.&amp;#160; No doubt, I’ve witnessed developer resistance firsthand, and yes… at one time I was not exactly sold on it myself.&amp;#160; &lt;/p&gt;  &lt;p&gt;Fortunately, I’ve gotten to a place where I really &lt;em&gt;like&lt;/em&gt; TDD.&amp;#160; Granted, I had the help of some extremely knowledgeable, supportive mentors who actively encouraged me to look for the benefits.&amp;#160; (&lt;strong&gt;Extra-strength caveat&lt;/strong&gt;: I consider myself too new to TDD to be any kind of authority; I just appreciate its tenets and find myself happy enough exploring ways to incorporate Test-Driven practices into my daily coding life.)&lt;/p&gt;  &lt;p&gt;But I have to say that the learning curve wasn’t what kept me away from TDD, and it hasn’t always been what I’ve heard from other developers.&lt;/p&gt;  &lt;h4&gt;The message to the developers&lt;/h4&gt;  &lt;p&gt;My perception is that Test-Driven Development has largely been promoted to developers as a very necessary evil: &lt;em&gt;Yeah, there’s a lot to learn, but it’s good for you, so learn it.&lt;/em&gt;&amp;#160; Not everywhere, of course, and not by everyone I’ve ever heard speak about it.&amp;#160; But when the topic of TDD comes up the most common themes (or sometimes just the loudest voices) have been akin to…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;You &lt;em&gt;need&lt;/em&gt; to be doing unit testing&amp;quot;&lt;/p&gt;    &lt;p&gt;“And while you’re at it, you &lt;em&gt;need&lt;/em&gt; to start writing your code so that it can be tested”&lt;/p&gt;    &lt;p&gt;&amp;quot;You &lt;em&gt;need &lt;/em&gt;to start mocking&amp;quot;&lt;/p&gt;    &lt;p&gt;&amp;quot;And while you're at it, you &lt;em&gt;need&lt;/em&gt; to start designing your objects so that they can be mocked&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The intentions behind statements like these are actually well-meaning; the problem is not so much with the content but with the delivery.&amp;#160; Telling developers that they &lt;strong&gt;&lt;em&gt;need&lt;/em&gt; to be applying&lt;/strong&gt; &lt;strong&gt;some methodology&lt;/strong&gt;, especially something&lt;strong&gt;&amp;#160;&lt;/strong&gt;completely new to them, implies that if they're &lt;em&gt;not&lt;/em&gt; doing so then… well, it’s a wonder how they're getting &lt;em&gt;anything&lt;/em&gt; done, or at least done &lt;em&gt;correctly.&amp;#160; &lt;/em&gt;More often than not it creates resistance to the very thing they should be embracing.&amp;#160; And whenever someone is resistant to your message then invariably part, if not all, of it will get lost.&lt;/p&gt;  &lt;p&gt;In my experience, the learning curve as a factor in low TDD uptake among developers might have been the most common &lt;em&gt;excuse&lt;/em&gt;, but not necessarily the most accurate &lt;em&gt;explanation&lt;/em&gt;.&amp;#160; The reality for me is that if TDD has a negative connotation it is mainly because too many times developers were told that they couldn’t be writing solid code without it.&amp;#160; And with that kind of association, a learning curve of &lt;em&gt;any slope at all&lt;/em&gt; is going to be an easy target for avoidance.&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;Showing the positives&lt;/h4&gt;  &lt;p&gt;The best way I know to sell a methodology like TDD is to show how it can make things &lt;em&gt;better&lt;/em&gt;.&amp;#160; I was shown time and time again how unit tests worked, and I always came back to the question of “now… &lt;em&gt;why&lt;/em&gt; am I doing this again?”&amp;#160; Then one day I had refactored a huge chunk of code and, feeling very sure of myself that I hadn’t broken anything, ran my (all passing) tests only to discover “what the… a &lt;strong&gt;failure&lt;/strong&gt;?!&amp;#160; No way!”&amp;#160; Sure enough, I had inadvertently introduced a bug that probably would have snuck all the way into QA had I not run those tests.&amp;#160; &lt;em&gt;Thank you, Unit Tests!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I wasn’t drawn to unit testing until I could see for myself what no one else was really showing me: it &lt;strong&gt;helped&lt;/strong&gt; me with my code.&amp;#160; My tests had sniffed out bugs that I had clearly missed… that I wouldn’t really even had thought to look for… and they did it within seconds.&amp;#160; I had to experience the benefit; only then did the methodology make sense.&amp;#160; From that point on, I &lt;strong&gt;enjoyed&lt;/strong&gt; writing tests.&amp;#160; &lt;/p&gt;  &lt;p&gt;Rather than asking TDD to change so more developers will appreciate and adopt it, I’d like to see TDD shown more for what it’s goals are: to make the code, and ultimately the deliverables, &lt;strong&gt;better&lt;/strong&gt;.&amp;#160; (Not just &lt;em&gt;different&lt;/em&gt;, because different by itself doesn’t mean anything.)&amp;#160; Emphasize the benefits that naturally manifest from Test-Driven practices (more robust code, fewer defects, etc.) and then negotiate the learning curve.&lt;/p&gt;  &lt;p&gt;What has been your experience with Test-Driven Development, and how have you perceived its promotion within the community?&amp;#160; If you are already using TDD, how did you get there?&amp;#160; By mandate, desire, or accident?&amp;#160; Were there any problems along the way?&amp;#160; And if you are resistant to TDD, where is that resistance rooted?&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:90f3acc0-d25d-4c85-8d52-adbfc94870f8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Test-Driven+Development" rel="tag"&gt;Test-Driven Development&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-2660660975273555163?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=f5wEm3S1x3Y:vd9hWVJz3C0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=f5wEm3S1x3Y:vd9hWVJz3C0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=f5wEm3S1x3Y:vd9hWVJz3C0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=f5wEm3S1x3Y:vd9hWVJz3C0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/f5wEm3S1x3Y/understanding-tdd-resistance-is-it-more.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>2</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/09/understanding-tdd-resistance-is-it-more.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-6550360361400311274</guid><pubDate>Tue, 23 Sep 2008 12:02:00 +0000</pubDate><atom:updated>2008-09-23T07:04:43.016-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Silverlight Stuff: Blacklight</title><description>&lt;p&gt;&lt;em&gt;Note: This post is written in the style of one of my favorite bloggers, &lt;a href="http://coolthingoftheday.blogspot.com/" target="_blank"&gt;Greg Duncan&lt;/a&gt;.&amp;#160; I stumbled across his feed a few years ago, and have rarely been disappointed in any of his posts.&amp;#160; His blog echoes a mantra I’ve been trying to incorporate into my life more, which is to “always be of service”.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/mgrayson/" target="_blank"&gt;Martin Grayson&lt;/a&gt; has posted &lt;a href="http://www.codeplex.com/blacklight" target="_blank"&gt;Project Blacklight&lt;/a&gt; up on CodePlex to highlight UX (User Experience) technologies.&amp;#160; Currently only in Silverlight Beta 2, others (like AJAX, etc.) are sure to follow.&amp;#160; Quote below leached in full from the site:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Blacklight is a UX focused code sharing project. Microsoft has released a bunch of technologies that allow designers and developers to work closely together to make beautiful software. This project is a collection of controls, samples, visual assets and ideas that has been put together by User Experience designers and developers to both show you what the technology is capable of (from a UX point of view), and give you code and samples that you can use in your own projects, completely free of charge (see the License tab above). Check out the showcase to see what is currently available...”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://mightymeaty.members.winisp.net/blacklight.silverlight/" target="_blank"&gt;Blacklight Showcase&lt;/a&gt; currently has demos for three types of controls in Silverlight: Outer glow Border, Simple Media Player, and Drag Dock Panel.&amp;#160; I don’t know why, but for some reason the drag dock panel samples are the most impressive to me.&amp;#160; I would expect to see more develop in the coming weeks and months.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cdb0681f-6b01-4ee9-afc9-79c52f99dfc0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://technorati.com/tags/CodePlex" rel="tag"&gt;CodePlex&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Project+Blacklight" rel="tag"&gt;Project Blacklight&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-6550360361400311274?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=rLDy6hDGm1o:B-4gmbVsNYM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=rLDy6hDGm1o:B-4gmbVsNYM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=rLDy6hDGm1o:B-4gmbVsNYM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=rLDy6hDGm1o:B-4gmbVsNYM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/rLDy6hDGm1o/silverlight-stuff-blacklight.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/09/silverlight-stuff-blacklight.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-6402148552080271852</guid><pubDate>Sat, 20 Sep 2008 02:23:00 +0000</pubDate><atom:updated>2008-09-19T21:23:59.161-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Hurricane</category><title>Ike</title><description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Hurricane_ike" target="_blank"&gt;Hurricane Ike&lt;/a&gt; barreled through Galveston and Houston in the early hours of Saturday, 9/13, with maximum sustained winds of 110 mph.&amp;#160; I can say that while my own neighborhood has mostly recovered (power is back on, water is running, and the phones work), there is still a lot of cleanup ahead.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nasa.gov/multimedia/imagegallery/image_feature_1173.html" target="_blank"&gt;&lt;img title="Hurricane Ike" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="347" alt="Hurricane Ike" src="http://lh3.ggpht.com/regeiger/SNRevhcslaI/AAAAAAAAAEc/3kBSrsao2g4/HurricaneIke5.jpg?imgmax=800" width="499" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I wanted to try and write something slightly humorous about my own experiences during and after Ike; however, as I saw more and more devastation (both locally and on the news), nothing was funny anymore.&amp;#160; We were &lt;em&gt;very&lt;/em&gt; fortunate not to have had severe damage or injury to deal with, but thousands throughout our area were not so lucky.&amp;#160; A lot of people I know are still coping with no electricity and/or major damage to their home, among other things.&amp;#160; &lt;/p&gt;  &lt;p&gt;And aside from the sheer physical destruction that Ike brought, there’s the economic hit that is just really starting to be felt.&amp;#160; (The latest estimates I’ve seen were between $6 to $16 billion in financial impact).&amp;#160; A lot of businesses have been either significantly disrupted or stopped dead in their tracks since last Friday.&amp;#160; Almost nothing in my area was open on Monday, though some places struggled to their feet by Tuesday and Wednesday.&amp;#160; But even today I noticed places that were still closed (mostly due to lack of power).&amp;#160; &lt;/p&gt;  &lt;p&gt;Ike was brutal.&amp;#160; I can’t sum it up any clearer than that.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a4a676f3-fe34-4024-866c-2f2ca2813d2d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Hurricane+Ike" rel="tag"&gt;Hurricane Ike&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-6402148552080271852?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=ncXXMNg_N4w:D0UPxQb0B3s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=ncXXMNg_N4w:D0UPxQb0B3s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=ncXXMNg_N4w:D0UPxQb0B3s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=ncXXMNg_N4w:D0UPxQb0B3s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/ncXXMNg_N4w/ike.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/regeiger/SNRevhcslaI/AAAAAAAAAEc/3kBSrsao2g4/s72-c/HurricaneIke5.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/09/ike.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-3065262010846449233</guid><pubDate>Thu, 11 Sep 2008 11:44:00 +0000</pubDate><atom:updated>2008-09-11T06:45:10.108-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Silverlight Stuff: Project Rosetta, Silverlight Spy, and Building A Composite Application</title><description>&lt;p&gt;Just a quick run through some very interesting items I’ve seen lately in the Silverlight world…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://projectrosetta.com/" target="_blank"&gt;Project Rosetta&lt;/a&gt;&lt;/strong&gt;     &lt;br /&gt;A site for helping Flash designers and developers work in/migrate to Silverlight.&amp;#160; It’s a lot of content focused on UI, design, etc., to which I say “the more the better”.&amp;#160; And, I think it’s great that an olive branch has been extended out to the Flash community.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://firstfloorsoftware.com/silverlightspy/download-silverlight-spy/" target="_blank"&gt;Silverlight Spy&lt;/a&gt;&lt;/strong&gt;     &lt;br /&gt;A very, very cool idea… a free &lt;a href="http://en.wikipedia.org/wiki/ClickOnce" target="_blank"&gt;ClickOnce&lt;/a&gt; application that parses your running Silverlight app, revealing the internals so you can see for yourself how it was put together.&amp;#160; Like the site says, &lt;em&gt;“No more XAML secrets with Silverlight Spy!”&lt;/em&gt;&amp;#160;&amp;#160; Excellent.&amp;#160; Screenshot below…&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/regeiger/SMkEwv2aYtI/AAAAAAAAAEU/4FRTG2QIs0o/s1600-h/image%5B9%5D.png" target="_blank"&gt;&lt;img title="image" height="226" alt="image" src="http://lh3.ggpht.com/regeiger/SMkExTOkAdI/AAAAAAAAAEY/czCqfjtFDW8/image_thumb%5B5%5D.png?imgmax=800" width="419" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.jphamilton.net/post/Building-an-Enterprise-Composite-Silverlight-Application.aspx" target="_blank"&gt;Building An Enterprise Composite Silverlight Application&lt;/a&gt;&lt;/strong&gt;     &lt;br /&gt;From a former teammate, JP took the current &lt;a href="http://www.pnpguidance.net/Category/Prism.aspx" target="_blank"&gt;Prism&lt;/a&gt; release and started building his own Silverlight composite application implementation.&amp;#160; As he caveats, it’s a work in progress; but one thing to know about JP is that once he gets going on a project, he doesn’t stop until it’s a fully functional, polished deliverable. &lt;/p&gt;  &lt;p&gt;I am a huge proponent of Silverlight, and it’s always great to see what the developer community comes up with around the technology.&amp;#160; I think [read: “hope”] Silverlight has the potential to change how websites are built and used.&amp;#160; I’m also of the opinion that most users will eventually want web-delivered functionality along the lines of an &lt;a href="http://en.wikipedia.org/wiki/Rich_Internet_application" target="_blank"&gt;RIA&lt;/a&gt;, rather than from a series of static HTML pages mixed with a soup of JavaScript.&amp;#160; And (just my own personal goal) I’d like to see a lot of very, very AJAX-heavy sites go the way of the dinosaur and get replaced with Silverlight*.&amp;#160; &lt;em&gt;(Topic for another post, but I am not terribly impressed with sites that leverage AJAX to the hilt.&amp;#160; They always feel, well, “jittery” to me.&amp;#160; …Yahoo Mail, I am looking in your direction).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;* I think it would be fantastic if someone out there could come up with a “convert your AJAX website to Silverlight” tool, if such a thing were even possible…&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:181e50b4-4d8c-43d0-abec-94f7f2eed285" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Project+Rosetta" rel="tag"&gt;Project Rosetta&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-3065262010846449233?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=BnDDYEUo5fM:5wWRxJVimnM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=BnDDYEUo5fM:5wWRxJVimnM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=BnDDYEUo5fM:5wWRxJVimnM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=BnDDYEUo5fM:5wWRxJVimnM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/BnDDYEUo5fM/silverlight-stuff-project-rosetta.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/regeiger/SMkExTOkAdI/AAAAAAAAAEY/czCqfjtFDW8/s72-c/image_thumb%5B5%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/09/silverlight-stuff-project-rosetta.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-2592014074324778937</guid><pubDate>Wed, 10 Sep 2008 03:00:00 +0000</pubDate><atom:updated>2008-09-09T22:01:58.221-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Programming</category><title>Have You Checked For Null Lately?</title><description>&lt;p&gt;Here’s a trick question for the developers out there: What’s wrong with this code?&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SomeClass&lt;/pre&gt;

  &lt;pre&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GiveMeAnObject(&lt;span class="kwrd"&gt;object&lt;/span&gt; someObject)&lt;/pre&gt;

  &lt;pre&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; someObject.ToString();&lt;/pre&gt;

  &lt;pre&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The title of this post gives it away, but technically there’s absolutely nothing wrong.&amp;#160; It compiles just fine.&amp;#160; And it runs just fine… as long as it’s given what it’s expecting, in this case a valid object.&amp;#160; The problem is that there is no guarantee it will &lt;em&gt;always&lt;/em&gt;, or really &lt;em&gt;ever&lt;/em&gt;, get what it expects since it’s public and therefore anyone can invoke it.&lt;/p&gt;

&lt;p&gt;What’s wrong is that there is no &lt;a href="http://c2.com/cgi/wiki?GuardClause" target="_blank"&gt;&lt;strong&gt;guard clause&lt;/strong&gt;&lt;/a&gt; to ensure that “someObject” is valid before we attempt to use it.&amp;#160; Without validating our parameters, we can never be sure they’re okay.&lt;/p&gt;

&lt;p&gt;Consider the same code with the added security of a guard clause:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SomeClass&lt;/pre&gt;

  &lt;pre&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GiveMeAnObject(&lt;span class="kwrd"&gt;object&lt;/span&gt; someObject)&lt;/pre&gt;

  &lt;pre&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (someObject == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span class="str"&gt;&amp;quot;someObject&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Bleh! That was null!&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; someObject.ToString();&lt;/pre&gt;

  &lt;pre class="alt"&gt;        }&lt;/pre&gt;

  &lt;pre&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;







.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Guard clauses and parameter validation are not new by any stretch, but they are still very relevant.&amp;#160; We see this type of code all the time, or at least bump into it whenever we see a &lt;a href="http://msdn.microsoft.com/en-us/library/system.nullreferenceexception.aspx" target="_blank"&gt;System.NullReferenceException&lt;/a&gt; thrown in our application.&amp;#160; And, unfortunately, users will see this from time to time as well.&amp;#160; On one project I was on long ago, we would see so much code that failed to handle invalid parameters that it became our ongoing phrase…&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Me&lt;/strong&gt;: Say, I tried running our app this morning and it just threw an unhandled exception…&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Teammate&lt;/strong&gt;: Hmm… did you check for null?&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Me&lt;/strong&gt;: Aha!&amp;#160; Nope, no parameter validation on this one method here…! Thanks!&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;A few hours later…&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Me&lt;/strong&gt;: Say, I have this problem with this class I’m writing…&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Teammate&lt;/strong&gt;: Did you check for null?&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Me&lt;/strong&gt;: But you don’t even know what my problem is yet...&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Teammate&lt;/strong&gt;: But, did you check for null?&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Me&lt;/strong&gt;: No.. but…&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Teammate&lt;/strong&gt;: I really think you should check for null first.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;* Not quite as catchy as “&lt;a href="http://www.hanselman.com/blog/ILikeCakeCakemailNinjasOnFireAndOtherAnecdotes.aspx" target="_blank"&gt;ninjas on fire&lt;/a&gt;”, but it worked for us.&lt;/p&gt;

&lt;p&gt;Remembering to “check for null” is part of the &lt;a href="http://en.wikipedia.org/wiki/Defensive_programming" target="_blank"&gt;defensive programming&lt;/a&gt; methodology that strives, among other things, to keep your code running no matter what happens.&amp;#160; And while users may not always, at least consciously, appreciate how often your app has &lt;em&gt;not&lt;/em&gt; crashed on them, they definitely will remember the next time it goes belly-up.&amp;#160; And if they get some cryptic “unhandled exception” dialog (if it’s an executable) or &lt;a href="http://en.wikipedia.org/wiki/Screens_of_death#ASP.NET" target="_blank"&gt;YSOD&lt;/a&gt; (if it’s a website) while your app makes its last gasp, what that tells them is that something bad just happened and no one coded for it.&amp;#160; It can be disheartening, even scary, and serves to only diminish their trust in what you’ve built.&amp;#160; Keeping your code robust is one of those practices that might feel like a bit more work up front, but pays dividends later on.&lt;/p&gt;

&lt;p&gt;And in case you’re wondering… yes, I too have forgotten to “check for null” before… so this post is just as much for me as anyone else.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:af44875a-11b9-4176-b461-a5514f7a66df" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Null+Reference" rel="tag"&gt;Null Reference&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Parameter+Validation" rel="tag"&gt;Parameter Validation&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Defensive+Programming" rel="tag"&gt;Defensive Programming&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-2592014074324778937?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=XXmtKmgVTI8:9FQyOv1sklc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=XXmtKmgVTI8:9FQyOv1sklc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=XXmtKmgVTI8:9FQyOv1sklc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=XXmtKmgVTI8:9FQyOv1sklc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/XXmtKmgVTI8/have-you-checked-for-null-lately.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/09/have-you-checked-for-null-lately.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6280494154561851040.post-1618612432264898946</guid><pubDate>Mon, 08 Sep 2008 11:36:00 +0000</pubDate><atom:updated>2008-09-08T06:37:48.667-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">Movies</category><category domain="http://www.blogger.com/atom/ns#">Tron</category><title>The List – Movies That Inspired Me To Code (It’s Just A List)</title><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Full Disclosure – This is the third attempt at posting this list, which was originally framed in a way that seriously just did not work.&amp;#160; The list is still the same, but minus it’s original context which, while intended to be opinionated in a humorous way, unfortunately just created a woeful distraction.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I’ll admit it.. I am science fiction geek.&amp;#160; I have a deep fondness for good sci-fi movies, and more so for the ones that center on, or at least have a strong theme involving, computers.&amp;#160; And, as the title says, some really did inspire me (directly and indirectly) to pursue my chosen profession as a developer.&amp;#160; Others kept me motivated, kept me interested, or at the very least kept my imagination going.&lt;/p&gt;  &lt;p&gt;So, without further ado, here is my list:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0084827/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;Tron&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;At a time when computers were still out of reach for most of the general population, this movie touched on &lt;a href="http://en.wikipedia.org/wiki/Artificial_intelligence" target="_blank"&gt;AI&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Virtual_reality" target="_blank"&gt;virtual reality&lt;/a&gt;, the value of software, network security, and the dichotomy between technology and the User.&amp;#160; For those virtues alone, a truly visionary piece of cinema.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0083658/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;Blade Runner&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;The one that started the tech noir genre.&amp;#160; Stunning visuals of a &lt;a href="http://en.wikipedia.org/wiki/Dystopian" target="_blank"&gt;dystopian&lt;/a&gt; future with bio-engineered android slaves, flying cars, perpetual acid rain, and some of the best dialog ever written in science fiction.&amp;#160; This one, strangely enough, just got me interested in the future and how technology was going to evolve.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0064177/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;Colossus: The Forbin Project&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;Before &lt;a href="http://en.wikipedia.org/wiki/Skynet_(Terminator)" target="_blank"&gt;Skynet&lt;/a&gt;, there was Colossus.&amp;#160; Essentially a giant supercomputer that’s hooked into all our defense systems, that quickly gets too smart for its own good (or, &lt;em&gt;our&lt;/em&gt; own good) and decides to start running the show.&amp;#160; It’s on the list for &lt;a href="http://en.wikipedia.org/wiki/Artificial_intelligence" target="_blank"&gt;AI&lt;/a&gt;, easily enough, but also for its incorporation of networking, machine-to-machine communications, and what I consider a fairly realistic depiction of UI for the time.&amp;#160; And good story-telling, to boot.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0062622/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;2001: A Space Odyssey&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;This was the movie I had to watch a few times… okay, several times, before &lt;em&gt;anything&lt;/em&gt; ever clicked for me.&amp;#160; And to this day, I’m still not sure I understand the ending.&amp;#160; But that’s okay; this movie finally spoke to me about AI, the wisdom of having an unquestioning reliance on computers, and the ethics of just “turning off” something that can think and feel.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0078748/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;Alien&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;Simply the best in sci-fi and horror, but that’s not why it’s on this list.&amp;#160; Just like 2001 before it, this movie excellently portrays how blind acceptance of the systems we trust our lives to can lead to, well, let’s just say unfavorable outcomes.&amp;#160; In this case, it’s the ship’s mainframe and the android mole that, as we find out in the sequel, was from a “twitchy” model line.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0086567/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;WarGames&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;A great echo of Colossus for me, with a more humanistic, sunnier tone.&amp;#160; Another deeply connected defense computer with too much brain and no apparent “off” switch (who forgets to put &lt;em&gt;that&lt;/em&gt; in the requirements, by the way?).&amp;#160; A good examination of whether wholesale automation of our most critical systems is necessarily better than putting unreliable humans in the decision chain.&amp;#160; Also spotlights hackers, computer crime, and (obviously, via the title) wargame simulations.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0133093/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;The Matrix&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;Virtual reality to the Nth degree, AI gone completely amok, the end of the world as we know it.&amp;#160; It simply had to be on the list, even though it’s an easy pick.&amp;#160; But, to be honest it’s a little too easy, which is why I followed with…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0366179/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;Animatrix: The Second Renaissance 1&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;strong&gt; &amp;amp; &lt;/strong&gt;&lt;a href="http://www.imdb.com/title/tt0368575/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;For me, these two animated segments say volumes more about the world of the Matrix than any of the main films.&amp;#160; Short, brisk story-telling, and with plenty of tragedy, they depict the world leading up to the nightmare that the Matrix becomes.&amp;#160; Asks the question that I never seem to hear enough of: would humans &lt;em&gt;willingly&lt;/em&gt; choose to coexist with machines vastly more intelligent than themselves?&amp;#160; And chillingly shows how AI can be a Pandora’s box if left unchecked.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.imdb.com/title/tt0074812/" target="_blank"&gt;&lt;font color="#5588aa"&gt;&lt;strong&gt;Logan’s Run&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;Last on the list, but still just as important to me as the others.&amp;#160; The message of this movie can best be summed up as: &lt;em&gt;never be afraid to question legacy systems&lt;/em&gt;.&amp;#160; Depicts a utopian city run by technology that no one really quite understands (having been installed many generations prior), but that everyone accepts.&amp;#160; It’s an entire civilization on “maintenance mode”, where having new ideas can be pretty risky.&amp;#160; Maybe it’s just that I’ve accumulated experience with all kinds of systems, I feel that now I can appreciate this movie even more.&amp;#160; Legacy systems can be very intimidating (“somebody set this up this way for a &lt;em&gt;reason&lt;/em&gt;, right?”), but I feel you should never be afraid to ask questions (“... yeah, but &lt;em&gt;why&lt;/em&gt;?&amp;#160; and do we still need it?&amp;quot;).&lt;/p&gt;  &lt;p&gt;There you have it.&amp;#160; Probably not a complete list, but for me these stand out the most.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:df114b69-7faa-495e-8010-c4e5ff25dad8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Tron" rel="tag"&gt;Tron&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Animatrix" rel="tag"&gt;Animatrix&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Science+Fiction" rel="tag"&gt;Science Fiction&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6280494154561851040-1618612432264898946?l=codefromwithin.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=aMmg85kCrAU:LeqPS9T_Saw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=aMmg85kCrAU:LeqPS9T_Saw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CodeFromWithin?a=aMmg85kCrAU:LeqPS9T_Saw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodeFromWithin?i=aMmg85kCrAU:LeqPS9T_Saw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CodeFromWithin/~3/aMmg85kCrAU/list-movies-that-inspired-me-to-code.html</link><author>noreply@blogger.com (R. Eric Geiger)</author><thr:total>0</thr:total><feedburner:origLink>http://codefromwithin.blogspot.com/2008/09/list-movies-that-inspired-me-to-code.html</feedburner:origLink></item></channel></rss>

