<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-10748614</id><updated>2008-08-06T18:32:58.685-05:00</updated><title type="text">FrazzledDad</title><link rel="alternate" type="text/html" href="http://frazzleddad.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default?start-index=26&amp;max-results=25" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/posts/default" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>913</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/Frazzleddad" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><entry><id>tag:blogger.com,1999:blog-10748614.post-7674292238331181018</id><published>2008-08-05T05:32:00.001-05:00</published><updated>2008-08-05T05:32:52.657-05:00</updated><title type="text">Handy WinForm Dialog Box Error Trick</title><content type="html">&lt;p&gt;You may not have realized it, but you can quickly copy error messages off WinForms dialog boxes with Ctrl-C.&amp;#160; You'll get something like this below:&lt;/p&gt;  &lt;p&gt;---------------------------   &lt;br /&gt;My Dialog's Title/Caption    &lt;br /&gt;---------------------------    &lt;br /&gt;My Dialog's message text    &lt;br /&gt;---------------------------    &lt;br /&gt;OK&amp;#160;&amp;#160; (List of buttons here)    &lt;br /&gt;---------------------------&lt;/p&gt;  &lt;p&gt;This makes it quick to copy error messages into bug reports.&lt;/p&gt;  &lt;p&gt;(Not that I've ever written a single line of code with a bug in it, mind you. I'm just saying.)&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/356231548" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/356231548/handy-winform-dialog-box-error-trick.html" title="Handy WinForm Dialog Box Error Trick" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=7674292238331181018" title="3 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/7674292238331181018/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/7674292238331181018" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/7674292238331181018" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/08/handy-winform-dialog-box-error-trick.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-4085387482752932854</id><published>2008-07-30T09:48:00.001-05:00</published><updated>2008-07-30T14:57:09.320-05:00</updated><title type="text">Looking for Java Work? We're Looking for You.</title><content type="html">&lt;p&gt;&lt;a href="http://www.quicksolutions.com"&gt;Quick Solutions&lt;/a&gt;, the great company I work for, has a significant number of openings for sharp folks in the Java domain. We're looking for folks at all skills levels, so we'd be happy to talk with you regardless of whether you're a senior architect or a passionate newcomer.&lt;/p&gt;  &lt;p&gt;All slots are in the Columbus, Ohio, area.&lt;/p&gt;  &lt;p&gt;Feel free to contact me via the link on the sidebar if you have any questions.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/350558136" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/350558136/looking-for-java-work-we-looking-for.html" title="Looking for Java Work? We&amp;#39;re Looking for You." /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=4085387482752932854" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/4085387482752932854/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/4085387482752932854" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/4085387482752932854" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/looking-for-java-work-we-looking-for.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-8019417440070869842</id><published>2008-07-28T23:26:00.001-05:00</published><updated>2008-07-28T23:26:36.745-05:00</updated><title type="text">The Importance of a Mentor</title><content type="html">&lt;p&gt;Mentors are an awfully important part of one's growth in any aspect of your life: personal, professional, community.&amp;#160; I've been lucky to have a number of solid mentors during different phases of my life, some of whom I didn't realize were performing that role until years later as I looked back in reflection.&lt;/p&gt;  &lt;p&gt;I strongly believe a good mentor is a critical part of your success in your professional life.&amp;#160; A good mentor acts as a calm, wise advisor who can help you unmask some of your weaknesses, then help you discover a roadmap to fill those gaps.&amp;#160; All of this can happen on many levels: communications, technical, business sense, etc.&lt;/p&gt;  &lt;p&gt;A good mentor's an invaluable asset when you're in over your head with something, or in a situation where you're having problems finding the way out.&amp;#160; A mentor's been there, done that, and has the scars to prove it.&amp;#160; Because they're not right in the middle of your problem, and because they've likely experienced similar messes before, a mentor can help you discover new options which you weren't able to see.&amp;#160; Sometimes it's as simple as pointing out to you that you can call clunky sections of code written by your team mates &amp;quot;technical debt&amp;quot; instead of &amp;quot;badly written poo.&amp;quot; The latter gets someone's hackles up; the former acknowledges that success was achieved, but with a less-than-optimal piece of code which needs refactoring in order to move forward.&lt;/p&gt;  &lt;p&gt;Looking back I realize my best mentors never spoon fed me.&amp;#160; I remember vividly one Sergeant during my time flying on &lt;a href="http://www.globalsecurity.org/military/systems/aircraft/images/e-3-AWACS.jpg"&gt;big radar planes&lt;/a&gt;:&amp;#160; &amp;quot;You're not a teapot that I'm going to pour knowledge in to.&amp;#160; You need to do the work.&amp;quot;&amp;#160; That man's words (and some other choice ones when I screwed up) have stuck with me for a long time.&lt;/p&gt;  &lt;p&gt;One of the reasons I joined Quick Solutions was to work under and be mentored by &lt;a href="http://brianhprince.blogspot.com/"&gt;Brian&lt;/a&gt;; however, &lt;a href="http://brianhprince.blogspot.com/2008/02/farewell.html"&gt;he moved on to a great job&lt;/a&gt;, leaving me with some thinking work to do regarding how to find a new mentor.&amp;#160; I'm at a spot on the relatively flat hierarchy at Quick where there's nobody above me suitable a technical mentor.&amp;#160; Sales and business development?&amp;#160; Covered in spades.&amp;#160; Someone to help me further my technical growth and vision?&amp;#160; Not so much.&lt;/p&gt;  &lt;p&gt;It's taken me a bit of time to work through thinking this out, but I've come to realize that I need to morph my concept of mentoring.&amp;#160; I need a fundamental shift to something akin to distributed mentoring.&amp;#160; Heck, splitting work into distributed components works great for software, why not for mentoring?&lt;/p&gt;  &lt;p&gt;Not surprisingly, my short list of technical mentors is made up from the groups I'm closely tied to and passionate about: peers at Quick Solutions and peers in the regional developer community.&amp;#160; I'm blessed with being in the middle of two groups where I'm not even close to being the smartest guy in the room.&amp;#160; I'm blessed with being in the middle of two groups whose excitement, passion, and vastly differing viewpoints lift me up when I'm stuck in a funk. &lt;/p&gt;  &lt;p&gt;I don't want to specifically list out the folks I consider as mentors (you may not return my calls or IMs anymore), but I wanted to write about the mentor shift I'd come around to.&amp;#160; &lt;/p&gt;  &lt;p&gt;It may work, it may not.&amp;#160; I'll re-evaluate where I'm at in four to six months and let you know.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/349107036" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/349107036/importance-of-mentor.html" title="The Importance of a Mentor" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=8019417440070869842" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/8019417440070869842/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/8019417440070869842" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/8019417440070869842" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/importance-of-mentor.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-6641298945731322878</id><published>2008-07-28T05:50:00.001-05:00</published><updated>2008-07-28T05:50:16.462-05:00</updated><title type="text">Save The Date! 20 Sept: .NET University in Columbus, Ohio</title><content type="html">&lt;p&gt;&lt;a href="http://jeffblankenburg.com/index.html"&gt;Jeff Blankenburg&lt;/a&gt;&amp;#160; and a few other community folks are scrambling around trying to get a .NET University organized for 20 September.&amp;#160; Time and venue are still being nailed down, but it will be held somewhere in the Columbus area.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnet-u.com/"&gt;.NET University&lt;/a&gt; events are like mini-Code Camps, but are targeted at newcomers to the .NET platform.&amp;#160; Code Camps tend to dive into 300 and 400 level topics.&amp;#160; .NET U is much more introductory, focusing on fundamental 100 and 200 level concepts.&lt;/p&gt;  &lt;p&gt;More details to follow!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/348276809" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/348276809/save-date-20-sept-net-university-in.html" title="Save The Date! 20 Sept: .NET University in Columbus, Ohio" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=6641298945731322878" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/6641298945731322878/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6641298945731322878" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6641298945731322878" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/save-date-20-sept-net-university-in.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-2974316896295281075</id><published>2008-07-22T04:58:00.001-05:00</published><updated>2008-07-22T04:58:57.496-05:00</updated><title type="text">Paying off Technical Debt Versus Completing Features</title><content type="html">&lt;p&gt;I hate technical debt.&amp;#160; Kludgy code, architectural things which looked good then but look like poo now, overly complex or &amp;quot;tricky&amp;quot; sections of a system.&amp;#160; Maybe even low test coverage metrics or shallow tests which get good coverage metrics during stats runs but perhaps don't fully exercise the system.&lt;/p&gt;  &lt;p&gt;Technical debt should be paid off as you continue to work on your system, but sometimes, for whatever reasons, we make other choices, skip paying debt down, and let it accumulate as we continue.&amp;#160; This can make a big mess when we hibernate a project for awhile, then attempt to quickly pick things up again at a later point, perhaps even with a set of different folks working on the project.&lt;/p&gt;  &lt;p&gt;I just finished up a third phase of a project (third-and-a-half, depending on how you look at it) which has been going in fits and jumps since last April.&amp;#160; The latest phase on the project was to finish up some custom security infrastructure we developed for the client.&amp;#160; &lt;/p&gt;  &lt;p&gt;The client had a very small bucket of money for this phase and wasn't going to be able to get all the features she needed completed.&amp;#160; She had enough money for 135 hours of feature development, and her total need was about 210.&amp;#160; Without those 210 she couldn't move on to her global deployment phase, but hours are hours are hours and we don't fudge or cover up the amount of work.&amp;#160; We're completely open with our clients which is awfully important for building long-term relationships.&lt;/p&gt;  &lt;p&gt;Well, it turns out that &lt;a href="http://twitter.com/DigitalMoss"&gt;Phil&lt;/a&gt; and I kicked butt on the work and completed the 135 hours in amazingly short order.&amp;#160; Now I was at a decision point: pay off some of the technical debt that had accumulated over the entire lifecycle of the project, or push forward with feature development in order to get the system to a point where the client could deploy it?&lt;/p&gt;  &lt;p&gt;I spent several commute trips mulling this over (a long commute gives me a lot of time to mull things over...) and decided to press forward with feature hours instead of paying down debt.&amp;#160; It's not a choice I'm overly happy with, but neither option would have left me 100% satisfied.&amp;#160; Why did I make that particular choice in this instance?&amp;#160; Several factors.&lt;/p&gt;  &lt;p&gt;First, risk.&amp;#160; My main target for debt paydown would have been the persistence architecture I inherited when I took over the project.&amp;#160; It's overly reliant on static goo and is overly complex.&amp;#160; Testing of that code during refactoring?&amp;#160; Time consuming, even though it's absolutely worthwhile.&amp;#160; The persistence bits work and are fairly sound as written, it's just hard to extend for future use. It makes no sense to do such major rework this late in the game, particularly since I'm all over YAGNI and it looks like there isn't much more extension needed in the near future.&amp;#160; &lt;/p&gt;  &lt;p&gt;The next target would have been some WinForms code littered with goo because we did a bad job of enforcing MVPness early on.&amp;#160; I've been slowly refactoring out pieces of that, but it's slow going.&amp;#160; Again, this is a risky section since getting things decoupled and moved out to better separation impacts a lot of different functionality.&amp;#160; Increased regression testing would have been required by the QA folks, and they didn't have a lot of time available.&lt;/p&gt;  &lt;p&gt;Decision for these problem areas?&amp;#160; Leave them and move on.&lt;/p&gt;  &lt;p&gt;Second, client needs. The client doesn't understand a hooting thing about how our implementation of NHibernate tracks sessions, uses too many static calls, or loads its configuration.&amp;#160; She doesn't know about MVP patterns enabling better testing and separation of concerns, easing testing and extensibility.&amp;#160; The client only knows she has a need to deploy the system in a few months, and she can't do it without the full security stack in place.&lt;/p&gt;  &lt;p&gt;Decision for this issue?&amp;#160; Leave the debt in place, enable the client to hit her latest goals -- in part because we all as a team (us + client) had missed some earlier goals.&amp;#160; &lt;/p&gt;  &lt;p&gt;The client's now on track to hit her goals, and she's much happier where she's at.&amp;#160; I'm happy that she's going to meet business needs with this latest delivery; after all, we need to deliver value to the customer.&amp;#160; Obviously I'm bittersweet about having missed an opportunity to clean up past technical debt.&amp;#160; At least I can console myself in that I added no new technical debt to this phase of the work.&amp;#160; &lt;/p&gt;  &lt;p&gt;Would I do it again? Highly, highly doubtful. This situation was pretty unique, and the victory I got may have been a bit Pyrrhic in that we'll still need to pay off that debt if we get any sort of follow on work.&lt;/p&gt;  &lt;p&gt;(By the way, do &lt;em&gt;not&lt;/em&gt; confuse me as putting forth features over stable code.&amp;#160; That's not what I've been saying at all.&amp;#160; Technical debt is, to me, an issue different than the stability of what you're writing now.)&lt;/p&gt;  &lt;p&gt;(And more by the way, we completed 252 feature hours on her budget of 135 feature hours. Our velocity chart &lt;em&gt;kicks ass!&lt;/em&gt;)&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/342413986" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/342413986/paying-off-technical-debt-versus.html" title="Paying off Technical Debt Versus Completing Features" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=2974316896295281075" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/2974316896295281075/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/2974316896295281075" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/2974316896295281075" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/paying-off-technical-debt-versus.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-7371333097376973019</id><published>2008-07-16T21:48:00.001-05:00</published><updated>2008-07-17T16:28:00.792-05:00</updated><title type="text">Troubleshooting 101</title><content type="html">&lt;p&gt;Troubleshooting and/or debugging is a large part of our job as geeks.&amp;#160; Bad code, misbehaving apps, finicky servers, we have to juggle all that and more.&amp;#160; Trying to wade through complex systems is never fun, particularly when you're under stress for a delivery or trying to get a production server back up.&lt;/p&gt;  &lt;p&gt;I've had a number of years' experience troubleshooting different systems, both hardware and software.&amp;#160; I do &lt;em&gt;not&lt;/em&gt; claim to be a troubleshooting ninja, but I've picked up a number of solid lessons learned over time.&amp;#160; This post won't be an in-depth treatise on using the debugger or some obscure tools, rather its on more high-level approaches to help cut your churn. &lt;/p&gt;  &lt;p&gt;First off, get serious and go buy a copy of David Agans' &lt;a href="http://www.amazon.com/gp/product/0814474578?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0814474578"&gt;Debugging&lt;/a&gt;. This book distills Agans' amazing skills into a highly readable, awesome guide.&amp;#160; Everything I have to say pales in comparison.&amp;#160; Go, buy it right now.&amp;#160; I'll wait.&lt;/p&gt;  &lt;p&gt;Now that you've ordered that book (and gotten me at least $0.07 in referral fees from Amazon.com, thanks) here are some things I find highly useful for my approach to troubleshooting.&amp;#160; The items aren't listed in any particular order, just a stream of consciousness.&amp;#160; Let's start off with two things which require an incredible amount of self-discipline.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;TIMEBOXING&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Time box your efforts, right from the start.&amp;#160; Time boxing is perhaps the hardest thing for us geeks to deal with.&amp;#160; &amp;quot;Just five more minutes and I &lt;strong&gt;&lt;em&gt;know&lt;/em&gt;&lt;/strong&gt; I'll find the answer!&amp;quot;&amp;#160; Yeah, you said that yesterday morning, dumbass, and now it's 4:30pm the day before delivery. (That would be me, talking to me.)&lt;/p&gt;  &lt;p&gt;It sounds silly, but get yourself an egg timer. Honestly. The first step you take before doing &lt;em&gt;anything&lt;/em&gt; in a non-trivial problem should be to set yourself a time box.&amp;#160; &amp;quot;I will work on this data transfer issue for no more than one hour before stepping back and reassessing.&amp;quot;&amp;#160;&amp;#160; Work until that timer goes off &lt;strong&gt;&lt;em&gt;and then stop!&lt;/em&gt;&lt;/strong&gt;&amp;#160; Step back, re-evaluate the problem, and look for someone to bounce your assumptions and theories off of.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;STEP BACK, REASSESS, ASK FOR HELP&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sometimes you can get yourself wrapped around too many red herrings and lose sight of the forest for the trees, to mix metaphors in a really ugly way.&amp;#160; You have to discipline yourself to take a break from the issue, then come back to it and look at things again.&amp;#160; Our office has a hallway that runs in a loop around it.&amp;#160; Now folks who work in the office with me may know why I wander that hallway on frequent occasions mumbling like some deranged bag lady.&lt;/p&gt;  &lt;p&gt;When you get back from that break, look over your your forensic evidence you've gathered, the assumptions you've made, and any bits you've managed to wicker out about the problem.&lt;/p&gt;  &lt;p&gt;Asking for help is uncool.&amp;#160; Folks will begin to know how big a putz I really am if I ask for help.&amp;#160; No, they won't, at least they won't if you've made some basic effort before reaching out.&amp;#160; You may not need anything more than a body to repeat your problem statement and assumptions to.&amp;#160; &lt;/p&gt;  &lt;p&gt;Some book I read at some point had a funny story about a high-level dev in a shop who was plagued by folks busting in to his office to get his advice on problems they'd obviously not thought out first.&amp;#160; The constant interruptions crushed his productivity on tasks he was responsible, and the other devs didn't grow their own skills.&amp;#160; The lead took to putting a stuffed bear in a chair in his office.&amp;#160; Devs would come in to his office and his first comment to them would be &amp;quot;Tell it to the bear.&amp;quot;&amp;#160; The devs, simply by verbally stating the problem, their assumptions, and theories, would often solve the problem themselves.&amp;#160; Not that I'm telling you to go get a bear and start talking to it at work, but you get the idea.&amp;#160; Bounce ideas off someone, even if it's someone outside your domain.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RTFM&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;M as in Messages. Error messages. Dialog boxes. Log files. Console output. Read them &lt;strong&gt;&lt;em&gt;carefully&lt;/em&gt;&lt;/strong&gt;. If it's late at night or after a long session, consider re-writing the messages out on paper. Seriously.&amp;#160; I can't count the number of hours I've lost because I blew over a message and let my (bad) assumptions con me into reading something the message didn't say.&lt;/p&gt;  &lt;p&gt;A good buddy told me he made one of his mentorees read error boxes to him aloud and verbatim.&amp;#160; Prior to that the mentoree had a bad habit of not taking initial steps himself, or not catching important details which were clearly displayed on the screen in front of him.&amp;#160; A couple weeks of reading those messages aloud finally kicked the mentoree into taking more initial action himself.&amp;#160; (My pal's much more patient than I.&amp;#160; I'd have lost it after a couple days of trying to prod the guy into doing that...)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;THE RULE OF HALVES RULES&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Look at your system as a pipe of data.&amp;#160; Break that system into halves.&amp;#160; Probe at the halfway point and figure out if your data is good or bad at that point.&amp;#160; Continue breaking the remainder in half until you isolate something you can get your hands around.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DRIVE THE SYSTEM WITH TESTS, NOT UI&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It doesn't matter if you do test driven development or not.&amp;#160; Use tests (integration, unit, whatever) to drive your system as you're narrowing down the problem.&amp;#160; Don't waste your time trying to input data to a web form and try to catch data on the other side.&amp;#160; Write an integration or unit test to stimulate parts of your system and work from there.&amp;#160; You're locking down valid areas of the system while beginning to isolate the part that's borked.&amp;#160; You get the added benefit of deepening your coverage of the system.&amp;#160; (I'm not talking just code coverage here, but effective testing of your code.&amp;#160; Two different things.)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WRITE IT DOWN&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I use the Jot function of &lt;a href="http://bayden.com/SlickRun/"&gt;SlickRun&lt;/a&gt; as a scratch pad for writing down bits and pieces of more problematic problems I'm having problems with.&amp;#160; Use a whiteboard.&amp;#160; Lay out the pipeline of the system and break it in half.&amp;#160; Note your inputs, outputs, and areas of concern.&amp;#160; Visualizing a problematic system can be a great help.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MAKE A PLAN&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is last, but it's likely the third-most important tip next to time boxing and stepping back.&amp;#160; Don't just jump into code or whip open a telnet session to your misbehaving server.&amp;#160; Take a moment to look at your assumptions once more and figure out a plan of attack.&amp;#160; Write it down or verbalize it to see if your plan's a solid one:&lt;/p&gt;  &lt;p&gt;&amp;quot;OK, so the object coming across the wire from the server to the client is borked when it's saved.&amp;#160; It's showing client local time instead of server time.&amp;#160; I will cut the data pipe in half and start looking at the data on the client side of the web service.&amp;#160; I'll check to see if the correct server time is coming in the data transfer object.&amp;#160; If that's correct then I've isolated it to client side.&amp;#160; If it's not I'll go look at the server side and go from there.&amp;#160; I'll do that first check by writing an integration test to call the web service and get one of the DTOs and validate its timestamp.&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;LOOK TO THE SIMPLE STUFF FIRST&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Assumptions are a tricky thing.&amp;#160; You need to make some assumptions as you begin chasing the issue, but you may have made wrong ones and may end up chasing a red herring.&amp;#160; Look to the simple answers before diving into the deep end.&amp;#160; The simple solutions are the right fix 87.682% of the time.&lt;/p&gt;  &lt;p&gt;If you are spending hours discussing minutia of timestamp comparisons and getting into the bowels of a widely used framework like NHibernate then you are likely on the wrong path.&amp;#160; If your first thought is that your OutOfMemoryException errors are caused by a service pack bug instead of a code change, maybe you should look back over the history of that module you just updated.&amp;#160; (That would have been me, chasing a herring for an hour last week instead of noticing that a colleague had updated how a namespace was handled in a call to XmlDocument.CreateElement -- at my vague direction.&amp;#160; Yeesh.)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;TIMEBOX, AVOID BURNOUT&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Time boxing is so important I've listed it twice. Avoid letting yourself get too frustrated over a problem. Take a walk, go get some fresh air. Shoot nerf bullets at your co-workers.&amp;#160; If you're working next to a colleague who's been churning for some time then show them some love and get them to take a break.&lt;/p&gt;  &lt;p&gt;Simple, but critical.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;IN SUMMARY...&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;None of these things I've written down here are rocket science.&amp;#160; You're likely doing all these and more, so please feel free to comment with things you find helpful, or resources you've found useful when trying to improve your troubleshooting skills.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.jeffreyhunsaker.com/"&gt;Jeff Hunsaker&lt;/a&gt; pointed out one of the most elementary things which I'm shocked I missed: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WHAT CHANGED?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Take a few minutes and look over what in your system changed since the bug/problem/issue appeared.&amp;#160; Look over the code history. Look over the data.&amp;#160; Look over the environment your system's running in.&amp;#160; Something's likely changed, but you need to be realistic and careful about going too far down a rabbit hole.&amp;#160; See that part about &amp;quot;Look to the Simplest Stuff First&amp;quot; above.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/337663425" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/337663425/troubleshooting-101.html" title="Troubleshooting 101" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=7371333097376973019" title="5 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/7371333097376973019/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/7371333097376973019" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/7371333097376973019" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/troubleshooting-101.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-2718486962857060270</id><published>2008-07-16T05:15:00.001-05:00</published><updated>2008-07-16T05:15:37.862-05:00</updated><title type="text">Another Great Open Source Mind Joins Microsoft</title><content type="html">&lt;p&gt;&lt;a href="http://hammett.castleproject.org/?p=312"&gt;Hamilton Verissimo&lt;/a&gt;, founder of the &lt;a href="http://www.castleproject.org/"&gt;Castle Project&lt;/a&gt; with all its amazing goodness, will be joining Microsoft as a PM for the Managed Extensibility Framework. As Hamilton notes in his blogpost, MS is allowing him to continue his work on Castle.&amp;#160; That's awfully, awfully cool!&lt;/p&gt;  &lt;p&gt;This is another sign of the slow, terrific changes afoot at Microsoft.&amp;#160; We need to be honest in our (valid!) criticisms of Microsoft, but we also need to be honest and give them props where they're due.&amp;#160; Picking up folks like Hamilton, &lt;a href="www.haacked.com"&gt;Phil&lt;/a&gt;, and others from the open source community ensures the positive changes at MS continue to move in the right directions.&amp;#160; Pulling in folks like this ensures that certain mindsets in MS will continue to be changed for the better.&lt;/p&gt;  &lt;p&gt;Very, very cool.&amp;#160; Congrats, Hammett!&lt;/p&gt;  &lt;p&gt;(BTW, Hamilton wrote a great article on the Castle bits for &lt;a href="http://www.amazon.com/dp/0596527543/"&gt;James's and my book&lt;/a&gt;.)&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/336961633" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/336961633/another-great-open-source-mind-joins.html" title="Another Great Open Source Mind Joins Microsoft" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=2718486962857060270" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/2718486962857060270/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/2718486962857060270" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/2718486962857060270" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/another-great-open-source-mind-joins.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-8606011188414280969</id><published>2008-07-07T23:33:00.001-05:00</published><updated>2008-07-08T05:07:16.538-05:00</updated><title type="text">Votes of No Confidence, Voting With Your Feet, or Putting Too Much Faith in False Prophets</title><content type="html">&lt;p&gt;I am &lt;strong&gt;&lt;em&gt;so&lt;/em&gt;&lt;/strong&gt; tired of hearing the hyperbole coming out of some folks in the .NET community who are far too wrapped up in themselves.&amp;#160; Yeah, Bellware, I'm talking about you and your ilk.&amp;#160; [1]&lt;/p&gt;  &lt;p&gt;I'm tired of seeing all Microsoft described as morally corrupt, or covering their asses, or whatever overly broad, hyperbolic evil empire phrase of the day the fanatics want to throw out.&amp;#160; There is no doubt that some less than helpful folks exist in the corners of Microsoft, but can you honestly throw out those sorts of silly accusations and paint the entire company with the same broad stroke?&amp;#160; Can you give concrete evidence that the company is driven by nefarious goals without any effort inside the company to right past wrongs?&amp;#160; Can you honestly look me straight in the face and make those claims, instead of admitting that there are a tiny few intransigents in Microsoft who are not signing on to some very fundamental, amazing, positive changes the company is making as a whole?&lt;/p&gt;  &lt;p&gt;No?&amp;#160; &lt;/p&gt;  &lt;p&gt;Then STFU, calm down, and get an honest, civil discourse going again.&amp;#160; Leave off the self-aggrandizement, the condescending manifestos, and the attacks.&amp;#160; Start up a conversation with folks like the &lt;a href="http://haacked.com/"&gt;MVC team&lt;/a&gt;, who are actively pulling in community input.&amp;#160; Look up the folks at Microsoft like &lt;a href="http://blogs.msdn.com/saraford/"&gt;Sara Ford&lt;/a&gt; and the &lt;a href="http://www.codeplex.com"&gt;CodePlex&lt;/a&gt; geeks who are trying to empower the community.&amp;#160; Work with the evangelists like &lt;a href="http://drewby.spaces.live.com/"&gt;Drew Robbins&lt;/a&gt; and &lt;a href="http://www.managed-world.com/"&gt;Jason Olson&lt;/a&gt; who are driving content to be more real world.&amp;#160; Hook up with the Visual Studio team who spent hours picking the brains of MVPs at the summit in an attempt to figure out how best to get community input to drive Visual Studio's feature set.&lt;/p&gt;  &lt;p&gt;Does that sound like a bunch of dishonest, evil-minded folks?&amp;#160; Not in my mind.&amp;#160; (No clue how to try and get this same level of involvement from the Entity Framework folks.&amp;#160; I tried in one &amp;quot;open spaces&amp;quot; session at the MVP summit and was stunned by the EF guy ignoring what I and several others were telling him.)&lt;/p&gt;  &lt;p&gt;And oh, by the way, I'm always happy to offer up my own criticism of Microsoft when they're due it.&amp;#160; See my &lt;a href="http://www.joshholmes.com/CommentView,guid,b695f63e-60b2-4989-a6ce-f553973672bf.aspx#commentstart"&gt;comments here&lt;/a&gt;, or &lt;a href="http://frazzleddad.blogspot.com/2007/06/licensing-101-or-how-not-to-handle.html"&gt;a separate post on my blog here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Why am I so beaked about all this?&amp;#160; I'm tired of the many, MANY good folks at Microsoft being slandered.&amp;#160; Yeah, I used that word deliberately.&amp;#160; I'm also tired of being condescended to or outright attacked by a very small group of folks who seem to think I and other geeks can't evaluate things and make intelligent decisions on our own.&amp;#160; Do I need some pompous manifesto to tell me that NHibernate is better than the Entity Framework?&amp;#160; NO!&amp;#160; I need rational, detailed discussion on the topic.&amp;#160; &lt;/p&gt;  &lt;p&gt;Unfortunately, rational discussion seems too far a stretch.&amp;#160; Bellware once even wrote a blog post demeaning folks choosing certain Microsoft technologies as performing &amp;quot;Dependent Driven Design&amp;quot; because they hostage to paying family bills and therefore making design choices to benefit Microsoft sales and pad their own pockets.&amp;#160; I'd point you to his blog post on that topic, but Bellware deleted his entire blog because he was narked about something.&amp;#160; Yeah, that's a mature thing to do.&lt;/p&gt;  &lt;p&gt;If you are outside this entire train wreck of an argument and are reading some of these overly zealous conversations then you need to step back and consider what the goal of these one-way rants are.&amp;#160; Do folks who spread this hyperbole honestly expect that it will solve anything?&amp;#160; Is this utter lack of respect how these folks treat those who have differing viewpoints?&lt;/p&gt;  &lt;p&gt;Maybe Bellware and the other folks spewing poison should follow a fundamental tenet of Open Space conferences: Vote With Your Feet.&amp;#160; &lt;/p&gt;  &lt;p&gt;If those few hyperbolic folks honestly feel that Microsoft is a corrupt, evil, morally bankrupt entity then they should have the courage to live up to the standards they profess and go find work in a different domain.&amp;#160; Go off and write Ruby on the LAMP platform.&amp;#160; There are a bunch of amazingly &lt;a href="http://twitter.com/objo"&gt;cool cats&lt;/a&gt; in that area.&amp;#160; Why not go hit some Java work instead of .NET?&amp;#160; There are a bunch of &lt;a href="http://toddkaufman.blogspot.com/"&gt;wicked smart folks&lt;/a&gt; in that domain, too.&amp;#160; Are those folks still holding their MVP awards from Microsoft?&amp;#160; Give 'em up, dudes, and let pass the related business networks (read &amp;quot;increased pipeline and/or salary&amp;quot;) that goes along with that award, otherwise you're beholden and corrupt yourself.&amp;#160; (I don't really think that, but you see my point.)&lt;/p&gt;  &lt;p&gt;Let me be crystal clear on something: I am in awe of the technical chops of Bellware.&amp;#160; That man passed more brilliant ideas through his lower intestines last week than I will have the rest of the year.&amp;#160;&amp;#160; He's brilliant in engineering and design, he's clued in on philosophy (and not just software), and it sounds like he's all over the right kind of processes.&amp;#160; I'm just sick of prima donnas.&amp;#160; I put up with this kind of crap during the many years I spent busting my ass to get great at competitive volleyball while watching all the folks with amazing natural talent spend more effort snarking and deriding others instead of working to lift up the team.&amp;#160; That sucks and it's one of the few things I get really, really pissed about.&amp;#160; (Plus Bellware called me an &amp;quot;arbitrary dick&amp;quot; on Twitter and he hurt my feelings so there.)&lt;/p&gt;  &lt;p&gt;So what's the point of this long, somewhat rambling post?&amp;#160; Has Jim gone further around the bend than some of the zealots?&amp;#160; No, I'm just hoping someone who is trying to make a rational decision about various things from Microsoft may stumble across my blog before running in to the EF VONC or some other similarly toned rant.&lt;/p&gt;  &lt;p&gt;[1] Do &lt;em&gt;not&lt;/em&gt; for one moment think I lump all Alt.NET folks or Entity Framework Vote of No Confidence signatories together as one group of zealots.&amp;#160; I'm talking about a tiny subset of this group.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE&lt;/em&gt;&lt;/strong&gt;: To be clear.&amp;#160; Bellware didn't just delete one ranting blog post, he deleted his &lt;em&gt;entire blog.&lt;/em&gt; That really sucks, because he had a lot of great stuff in there.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/329498429" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/329498429/votes-of-no-confidence-voting-with-your.html" title="Votes of No Confidence, Voting With Your Feet, or Putting Too Much Faith in False Prophets" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=8606011188414280969" title="6 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/8606011188414280969/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/8606011188414280969" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/8606011188414280969" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/votes-of-no-confidence-voting-with-your.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-4273801384588644600</id><published>2008-07-07T10:16:00.001-05:00</published><updated>2008-07-07T10:16:29.705-05:00</updated><title type="text">NHibernate Entities Not Loading ID Values When Read From The DB</title><content type="html">&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Your entities aren't loading up their ID properties when you do a find/read/whatever.&amp;#160; Other values for the entities load fine, but not the IDs.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; Check the casing of your properties in your business objects and your mapping files. &lt;/p&gt; &lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red255\green255\blue255;\red15\green15\blue15;\red255\green128\blue0;\red0\green255\blue0;}??\fs22 \cf1\cb2\highlight2 &amp;lt;hibernate-mapping \cf3 xmlns\cf1 ="\cf4 urn:nhibernate-mapping-2.2\cf1 " \par ??\tab \tab \tab \tab    \cf3 assembly\cf1 ="\cf4 TKO.Client.DataEntities\cf1 "\par ??                   \cf3 namespace\cf1 ="\cf4 TKO.Client.DataEntities\cf1 "\par ??                   \cf3 default-access\cf1 ="\cf4 field.camelcase\cf1 "\par ??                   \cf3 default-cascade\cf1 ="\cf4 save-update\cf1 "&amp;gt;\par ??}&lt;br /&gt;--&gt;  &lt;div style="font-size: 11pt; background: #0f0f0f; color: white; font-family: consolas"&gt;   &lt;p style="margin: 0px"&gt;&amp;lt;hibernate-mapping &lt;span style="color: #ff8000"&gt;xmlns&lt;/span&gt;=&amp;quot;&lt;span style="color: lime"&gt;urn:nhibernate-mapping-2.2&lt;/span&gt;&amp;quot; &lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ff8000"&gt;default-access&lt;/span&gt;=&amp;quot;&lt;span style="color: lime"&gt;field.camelcase&lt;/span&gt;&amp;quot;&amp;gt;&lt;/p&gt;    &lt;div style="font-size: 11pt; background: #0f0f0f; color: white; font-family: consolas"&gt;     &lt;p style="margin: 0px"&gt;&amp;lt;id &lt;span style="color: #ff8000"&gt;column&lt;/span&gt;=&amp;quot;&lt;span style="color: lime"&gt;groupid&lt;/span&gt;&amp;quot; &lt;span style="color: #ff8000"&gt;name&lt;/span&gt;=&amp;quot;&lt;span style="color: lime"&gt;GroupID&lt;/span&gt;&amp;quot; &amp;gt;&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160; &amp;lt;generator &lt;span style="color: #ff8000"&gt;class&lt;/span&gt; =&amp;quot;&lt;span style="color: lime"&gt;identity&lt;/span&gt;&amp;quot; /&amp;gt;&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;lt;/id&amp;gt;&lt;/p&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Note the disconnect between the &amp;quot;default-access&amp;quot; attrib of the mapping element and the naming convention in id element's &amp;quot;name&amp;quot; attrib.&amp;#160; Ooops.&amp;#160; Either change the default-access or the casing of the name attrib:&lt;/p&gt;  &lt;div style="font-size: 11pt; background: #0f0f0f; color: white; font-family: consolas"&gt;   &lt;p style="margin: 0px"&gt;&amp;lt;id &lt;span style="color: #ff8000"&gt;column&lt;/span&gt;=&amp;quot;&lt;span style="color: lime"&gt;groupid&lt;/span&gt;&amp;quot; &lt;span style="color: #ff8000"&gt;name&lt;/span&gt;=&amp;quot;&lt;span style="color: lime"&gt;GroupId&lt;/span&gt;&amp;quot; &amp;gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160; &amp;lt;generator &lt;span style="color: #ff8000"&gt;class&lt;/span&gt; =&amp;quot;&lt;span style="color: lime"&gt;identity&lt;/span&gt;&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;lt;/id&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;More on &lt;a href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/mapping.html"&gt;naming strategies in the NHib dox&lt;/a&gt;.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/328972725" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/328972725/nhibernate-entities-not-loading-id.html" title="NHibernate Entities Not Loading ID Values When Read From The DB" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=4273801384588644600" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/4273801384588644600/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/4273801384588644600" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/4273801384588644600" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/nhibernate-entities-not-loading-id.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-5736325334964455401</id><published>2008-07-02T22:55:00.001-05:00</published><updated>2008-07-02T22:55:31.450-05:00</updated><title type="text">New Book: Agile Adoption Patterns</title><content type="html">&lt;p&gt;I got a copy of Amr Elssamadisy's &lt;a href="http://www.amazon.com/gp/product/0321514521?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321514521"&gt;Agile Adoption Patterns&lt;/a&gt; in the mail today.&amp;#160; I'm excited to have received this for two reasons.&amp;#160; 0) I loves me some Agile,&amp;#160; B) I was one of several technical reviewers of this book, Finally) it's a well-done book.&amp;#160; (Yes, I said two and that's three.&amp;#160; It's been one of those days and I'm relaxing with a lovely bit of Caol Ila Islay Scotch as I write this.&amp;#160; Gimme a break.)&lt;/p&gt;  &lt;p&gt;Elssamadisy's book is in tough, tough company.&amp;#160; How can you compete in the same space as amazing works like Subramaniam and Hunt's &lt;a href="http://www.amazon.com/gp/product/097451408X?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=097451408X"&gt;Practices of an Agile Developer&lt;/a&gt;&lt;img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=frazzleddadco-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=097451408X" width="1" border="0" /&gt; or Shore and Warden's &lt;a href="http://www.amazon.com/gp/product/0596527675?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596527675"&gt;The Art of Agile Development&lt;/a&gt;&lt;img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=frazzleddadco-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596527675" width="1" border="0" /&gt;? Those are&amp;#160; tough, &lt;strong&gt;&lt;em&gt;tough&lt;/em&gt;&lt;/strong&gt; classics to go against when trying to explain how teams/companies should adopt agile practices.&lt;/p&gt;  &lt;p&gt;Amr pulls it off by organizing his material in a fresh form which I found very useful.&amp;#160; He hits many of the same points as other works on Agile (smells, process, team empowerment, practices, etc.), but emphasizes the business value of each point.&amp;#160; For example, his chapter on User Story lays out the case that user stories are simple documents in their initial draft.&amp;#160; The value comes from developers having conversations to flesh out the details and implementation of the story.&amp;#160; Product utility is improved, and development costs are reduced.&lt;/p&gt;  &lt;p&gt;This same approach is carried on throughout the book, making it very clear what specific benefits you can find from each practice.&amp;#160; Additionally, each practice or chapter follows a nice recipe-like format.&amp;#160; Start off with business value, move on to a sketch describing the practice, follow up with context of the practice and forces impacting it, then look to why you'd want the particular practice, adoption details, and a bit on the practice's cons and variations.&lt;/p&gt;  &lt;p&gt;The book starts out with a high-level overview of agile, then moves on to specific patterns/practices.&amp;#160; Each pattern is a short, separate chapter with about 40 patterns in total.&amp;#160; The style of the book is clear, concise, and it's nicely produced.&lt;/p&gt;  &lt;p&gt;Another great point about the book is Elssamadisy's ongoing assertion that you don't need to adopt all of the practices.&amp;#160; Rather, find the pain points you have in your environment and look to implement only the patterns which will ease that pain.&amp;#160; This pragmatic approach to agile adoption is a refreshing view in a world where some Agile fanatics insist you must adopt every single practice or you're not doing Agile.&amp;#160; (A fanaticism I emphatically disagree with.)&lt;/p&gt;  &lt;p&gt;Overall I think it's a solid addition to the Agile section of your bookshelf.&amp;#160; It's not a replacement for things like Subramaniam's or Shore's works; it's a solid &lt;em&gt;addition&lt;/em&gt; to them.&lt;/p&gt;  &lt;p&gt;Of course, I'm somewhat biased, having been a tech reviewer on it...&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/325447589" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/325447589/new-book-agile-adoption-patterns.html" title="New Book: Agile Adoption Patterns" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=5736325334964455401" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/5736325334964455401/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/5736325334964455401" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/5736325334964455401" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/07/new-book-agile-adoption-patterns.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-3604201175015130115</id><published>2008-06-25T21:13:00.001-05:00</published><updated>2008-06-25T21:13:50.929-05:00</updated><title type="text">CodeReviews Using SlickEdit Tools</title><content type="html">&lt;p&gt;The guys at &lt;a href="http://www.slickedit.com"&gt;SlickEdit&lt;/a&gt; make a great set of tools for devs, both standalone and VS plugins.&amp;#160; &lt;a href="http://blog.slickedit.com/?p=237"&gt;Scott Hackett wrote a really interesting post on using SlickEdit to do a code review&lt;/a&gt;.&amp;#160; It's a pretty good read and shows a nice way to use the tools to help narrow down who wrote what code.&lt;/p&gt;  &lt;p&gt;There are a number of ways to skin the code review cat; this is a nice option and worth the read.&lt;/p&gt;  &lt;p&gt;(Reminder disclaimer: I got SlickEdit tools for free because they advertise on The Lounge.&amp;#160; I wrote about &lt;a href="http://frazzleddad.blogspot.com/2008/06/playing-with-slickedit.html"&gt;my thoughts on SlickEdit in an earlier post&lt;/a&gt;.)&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/320171792" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/320171792/codereviews-using-slickedit-tools.html" title="CodeReviews Using SlickEdit Tools" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=3604201175015130115" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/3604201175015130115/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/3604201175015130115" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/3604201175015130115" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/codereviews-using-slickedit-tools.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-6569434833406296032</id><published>2008-06-25T12:15:00.001-05:00</published><updated>2008-06-25T12:15:35.326-05:00</updated><title type="text">Virtual Server Admin Page Error 400</title><content type="html">&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; The Virtual Server admin page (&lt;a href="http://&amp;lt;hostname&amp;gt;:1024/VirtualServer/VSWebApp.exe"&gt;:1024/VirtualServer/VSWebApp.exe&amp;quot;&amp;gt;http://&amp;lt;hostname&amp;gt;:1024/VirtualServer/VSWebApp.exe&lt;/a&gt;?) on a multi-homed host system isn't accessible if one network card goes down.&amp;#160; You get lovely HTTP Error 400 pages.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&amp;#160; Check that the IIS Virtual Server site isn't bound to one specific network adapter.&amp;#160; IIS manager -&amp;gt; Web Sites -&amp;gt; Virtual Server -&amp;gt; Properties -&amp;gt;IP Address.&amp;#160; You can bind the site to one specific IP address, or simply select &amp;quot;(All Unassigned)&amp;quot; in which case you're not dependent on one NIC.&lt;/p&gt;  &lt;p&gt;Yay.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/319868811" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/319868811/virtual-server-admin-page-error-400.html" title="Virtual Server Admin Page Error 400" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=6569434833406296032" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/6569434833406296032/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6569434833406296032" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6569434833406296032" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/virtual-server-admin-page-error-400.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-4262323076218452514</id><published>2008-06-24T14:17:00.001-05:00</published><updated>2008-06-24T14:17:25.079-05:00</updated><title type="text">404.3 Errors for WCF Services</title><content type="html">&lt;p&gt;Today I ran into 404.3 errors when trying to hit a .svc file on my recently re-imaged system.&amp;#160; I beat my head against my console chasing IIS setup configuration, directory rights, and a number of other things.&lt;/p&gt;  &lt;p&gt;Finally I ran across &lt;a href="http://blogs.msdn.com/davidwaddleton/archive/2007/11/02/wcf-and-404-3-errors.aspx"&gt;David Waddleton's post detailing a solution&lt;/a&gt;.&amp;#160; Whew.&amp;#160; Back moving forward again.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/319112691" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/319112691/4043-errors-for-wcf-services.html" title="404.3 Errors for WCF Services" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=4262323076218452514" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/4262323076218452514/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/4262323076218452514" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/4262323076218452514" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/4043-errors-for-wcf-services.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-6704356128621180183</id><published>2008-06-24T12:20:00.001-05:00</published><updated>2008-06-24T12:20:27.755-05:00</updated><title type="text">Culture, Productivity, Environment</title><content type="html">&lt;p&gt;I'm re-reading a few of my favorite older blog posts and reading a few new ones.&amp;#160; A couple great articles are worth passing on links to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Steve McConnell's &lt;em&gt;&lt;a href="http://forums.construx.com/blogs/stevemcc/archive/2008/04/09/measuring-productivity-of-individual-programmers.aspx"&gt;Measuring Productivity of Individual Programmers&lt;/a&gt;.&lt;/em&gt;&amp;#160; Avoid stupidity like lines of code, and don't focus on just one measurement.&lt;/li&gt;    &lt;li&gt;Steve McConnell's &lt;em&gt;&lt;a href="http://forums.construx.com/blogs/stevemcc/archive/2008/03/18/how-to-scale-up-quickly.aspx"&gt;How to Scale Up Quickly&lt;/a&gt;&lt;/em&gt;. Offshoring doesn't work, keeping the quality is terribly difficult, keeping the culture even harder.&lt;/li&gt;    &lt;li&gt;Joel Spolskey's &lt;em&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The 12 Steps to Better Code&lt;/a&gt;&lt;/em&gt;.&amp;#160; Way back in 2000, just after Al Gore invented and implemented the Internet, Joel wrote a nice post on things some folks were already discussing.&amp;#160; Critical things for you and your team.&lt;/li&gt;    &lt;li&gt;Scott Hanselman's &lt;em&gt;&lt;a href="http://www.hanselman.com/blog/SharpenTheSawForDevelopers.aspx"&gt;Sharpen the Saw for Developers&lt;/a&gt;&lt;/em&gt;. Getting management support for ongoing training at a consulting company can be like pulling teeth.&amp;#160; With a tow cable.&amp;#160; Look to Scott's post for some good ideas he's invented and consolidated from other places.&lt;/li&gt;    &lt;li&gt;All of &lt;a href="http://blogs.msdn.com/saraford"&gt;Sara Ford's&lt;/a&gt; Tip of the Day and Did you know... series.&amp;#160; I read 'em all again just now.&amp;#160; No, really.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://joshholmes.com/"&gt;Josh Holmes's&lt;/a&gt; series on good presentations.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There you go.&amp;#160; Just a few of my favorites.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/319034459" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/319034459/culture-productivity-environment.html" title="Culture, Productivity, Environment" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=6704356128621180183" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/6704356128621180183/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6704356128621180183" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6704356128621180183" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/culture-productivity-environment.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-321547989966800521</id><published>2008-06-22T05:46:00.001-05:00</published><updated>2008-06-22T05:46:52.253-05:00</updated><title type="text">Book Review: C# In Depth</title><content type="html">&lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1933988363?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1933988363"&gt;&lt;em&gt;C# in Depth&lt;/em&gt;&lt;/a&gt; by Jon Skeet, pub. Manning Press, ISBN 1933988363.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This book is a tremendous work for understanding how the most important features of the C# language work.&amp;#160; Skeet's been a prolific poster in the C# forums on MSDN for some years now, providing answers, tips and tricks, and in-depth advice to a large number of forum visitors.&amp;#160; This book wraps up his great knowledge of the inner workings of C# and hands it over to readers in a well-written, concise, &lt;em&gt;usable&lt;/em&gt; book.&lt;/p&gt;  &lt;p&gt;Skeet uses a very nice formula for the features of C# 2 and 3: he starts with demonstrating solutions to practical problems in C# 1 then shows the progression of that same solution through C# 2 and C# 3.&amp;#160; His walk through of the evolution of delegates through 1, 2, and 3 is a perfect example of this: start with the very wordy, somewhat clunky handling in C# 1 and end up with C# 3's lamba expressions.&lt;/p&gt;  &lt;p&gt;One of the many fine things about this book is Skeet's ability to clearly cover complex topics like Lambdas and expression trees at exactly the right level.&amp;#160; Readers will be able to pick up the power, complexity, and benefits of language features because Skeet's kept the examples practical and the text conversational.&amp;#160; With potentially complex topics it's too easy for authors to fall into trivial examples, or dive into overly academic discussions; Skeet does neither.&amp;#160; He also does a terrific job of covering the cons of particular issues -- something I'm a big fan of since it helps me make informed decisions.&lt;/p&gt;  &lt;p&gt;Part of the book's success is Skeet's solid focus on the book's topics.&amp;#160; He stays directed on to language features and doesn't digress into software engineering or construction.&amp;#160; As a result, in roughly 360 concise pages he's able to hit all the major goodies like generics, delegates/lambdas, nullable types, extension methods, and LINQ.&amp;#160; He closes the book with a nicely laid out, thoughtful discussion of C# 3's benefits and its possible future.&lt;/p&gt;  &lt;p&gt;This is a great book for understanding how some of the more fundamental features of C# are implemented, and how to best use them.&amp;#160; This book definitely belongs on your bookshelf, right next to Bill Wagner's &lt;a href="http://www.amazon.com/gp/product/0321245660?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321245660"&gt;&lt;em&gt;Effective C#&lt;/em&gt;&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/product/0321485890?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321485890"&gt;&lt;em&gt;More Effective C#&lt;/em&gt;&amp;#160;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;(I'd love to see Wagner and Skeet in a room full of VB6 programmers, diving into a deep discussion of anonymous methods, expression trees, and lambdas.&amp;#160; Watching all the VB6ers heads explode would be great entertainment.)&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/317387865" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/317387865/book-review-c-in-depth.html" title="Book Review: C# In Depth" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=321547989966800521" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/321547989966800521/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/321547989966800521" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/321547989966800521" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/book-review-c-in-depth.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-3161433659193015619</id><published>2008-06-18T05:00:00.001-05:00</published><updated>2008-06-18T05:03:34.204-05:00</updated><title type="text">Test Execution Problem in VS2008</title><content type="html">&lt;p&gt;A nasty bug slipped through the cracks in VS2008's test execution engine.&amp;#160; The problem is rooted in the whole test deployment concept in Visual Studio 2005 and 2008 where all assemblies are copied to a folder underneath the TestResults folder, then executed from there.&amp;#160; &lt;/p&gt;  &lt;p&gt;I think this is a silly, overly complex way to execute tests, and it's particularly a problem in VS2008 because the test runner doesn't execute with that folder as its base path.&amp;#160; A bug in VS2008 causes the AppDomain.CurrentDomain.BaseDirectory property to be set to C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE instead of the proper subfolder under TestResults. &lt;/p&gt;  &lt;p&gt;There's some good detail and a possible fix in &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2621951&amp;amp;SiteID=1"&gt;this MSDN post&lt;/a&gt;.&amp;#160; Unfortunately, this doesn't work in my environment because the resolver's assembly path property value (&amp;quot;Public Assemblies;Private Assemblies&amp;quot;) &lt;em&gt;also&lt;/em&gt; gets appended to the path, further borking things up for me.&lt;/p&gt;  &lt;p&gt;I'm moderately narked about the bug with the BaseDirectory slipping through, but I can understand it.&amp;#160; Bugs happen, they get fixed.&amp;#160; Hopefully there's a workaround for the bug while a real fix is being created.&lt;/p&gt;  &lt;p&gt;I'm more narked about the underlying decision to have tests run from a location different than the project's build directory.&amp;#160; The overall concept is brittle and has too many moving parts.&amp;#160; I have to fool around with DeploymentItem attributes in code, I have to fool around with Deployment Item settings in the test configuration.&lt;/p&gt;  &lt;p&gt;The idea of a TestResults folder is great if it were limited to, like, &lt;em&gt;holding results.&lt;/em&gt; Reports, working files, etc., would all be appropriate for that folder.&amp;#160; Copying all the binary bits and test support files to that folder, then running everything from that target isn't the way &lt;a href="http://mbunit.com/"&gt;a real unit test framework&lt;/a&gt; would do it.&lt;/p&gt;  &lt;p&gt;Unfortunately, this bug is a complete show-stopper for me because I can't work around it.&amp;#160; The specific issue for my current project, based on VS2005, is a crapload of tests reliant on our NHibernate infrastructure.&amp;#160; NHibernate's Cfg.Configure() command, invoked with no parameters, attempts to load the hibernate.cfg.xml file from the current folder of execution.&amp;#160; Sure, you can specify a directory path to load that file from, but I'd have to do significant amounts of code ugliness to alter that input path based on production, test, dev environments.&lt;/p&gt;  &lt;p&gt;I'm waiting on more help from Microsoft on this bug, but for now it means we can't proceed with moving up to VS2008 for this phase of the project.&amp;#160; I'm bummed.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/314507293" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/314507293/test-execution-problem-in-vs2008.html" title="Test Execution Problem in VS2008" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=3161433659193015619" title="3 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/3161433659193015619/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/3161433659193015619" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/3161433659193015619" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/test-execution-problem-in-vs2008.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-8534662607711454971</id><published>2008-06-15T15:24:00.001-05:00</published><updated>2008-06-15T16:30:44.162-05:00</updated><title type="text">VS2005 -&gt; VS2008 Conversion Wizard Runs Every Time</title><content type="html">&lt;p&gt;I'm working through a few minor nits with a moderately sized solution (23 projects) that I've just converted from VS2005 to VS2008.&amp;#160; One nit is the conversion wizard runs every time I open the solution.&amp;#160; Irritating.&lt;/p&gt;  &lt;p&gt;Answer found after trolling through some MSDN posts: Test projects appear to have a few hitches during the conversion process, one of which is the FileUpgradeFlags element in the .csproj file failing to properly update.&amp;#160; This causes the wizard to re-run every time you open the solution containing the project.&lt;/p&gt;  &lt;p&gt;To fix, find the element &amp;lt;FileUpgradeFlags&amp;gt;.&amp;#160; It will probably look like&lt;/p&gt;  &lt;p&gt;&amp;lt;FileUpgradeFlags&amp;gt;0&amp;lt;/FileUpgradeFlags&amp;gt;&lt;/p&gt;  &lt;p&gt;Remove the zero in the element content, leaving an empty element:&lt;/p&gt;  &lt;p&gt;&amp;lt;FileUpgradeFlags&amp;gt;&amp;lt;/FileUpgradeFlags&amp;gt;&lt;/p&gt;  &lt;p&gt;Do this for every test project in your solution.&amp;#160; Save 'em all, re-open the solution and you should see no conversion wizard.&amp;#160; Yay!&lt;/p&gt;  &lt;p&gt;(Original MSDN post &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2534717&amp;amp;SiteID=1"&gt;here&lt;/a&gt;.)&lt;/p&gt;  &lt;p&gt;Now if I could just get MS Test to play nicely with my hibernate.cfg.xml files in the MS Test deployed location.&amp;#160; I continue to search for a rational explanation of why MS Test insists on copying all binaries to a location separate from the build location in order to run its tests, forcing you to deal with &amp;quot;DeploymentItem&amp;quot; attributes and test configuration shenanigans.&amp;#160; I've run in to a number of PITA issues with this separate-but-equal concept, and I'm having a hard time understanding the reasoning for creating a second environment that's not treated the same as the solutions' build environment.&amp;#160; Brittle, complex, and more moving parts than necessary. &lt;/p&gt;  &lt;p&gt;Yet another reason for preferring MBUnit for a test framework that helps, not hinders, all the testing I like to do.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/312564809" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/312564809/vs2005-vs2008-conversion-wizard-runs.html" title="VS2005 -&amp;gt; VS2008 Conversion Wizard Runs Every Time" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=8534662607711454971" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/8534662607711454971/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/8534662607711454971" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/8534662607711454971" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/vs2005-vs2008-conversion-wizard-runs.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-1283340141968140052</id><published>2008-06-15T14:21:00.001-05:00</published><updated>2008-06-15T14:21:49.887-05:00</updated><title type="text">Shout Out: More Effective C# Rough Cuts Available</title><content type="html">&lt;p&gt;Bill Wagner's &lt;em&gt;&lt;a href="http://www.amazon.com/gp/product/0321245660?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321245660"&gt;Effective C#&lt;/a&gt;&lt;/em&gt; is one of the books you absolutely need to have living on your bookshelf if you're working in .NET. Bill's book is crucial to understanding how certain things in .NET and C# work, and it's full of great examples on &lt;em&gt;why&lt;/em&gt; you need to do things in a particular fashion.&amp;#160; He goes in to exactly the right level of detail to make you understand things like the &lt;em&gt;as&lt;/em&gt;/&lt;em&gt;is&lt;/em&gt; keywords, and why you really need to think hard about how to implement equality checking.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Effective C#&lt;/em&gt; covered C# 1 with just a nod to 2.0, so it's good to hear Bill's nearing completion of his work &lt;a href="http://www.amazon.com/gp/product/0321485890?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321485890"&gt;&lt;em&gt;More Effective C#&lt;/em&gt;&lt;/a&gt;, updated for all the goodness of C# 2.0 and 3.0.&amp;#160; You can pre-order through Amazon, and it's also available &lt;a href="http://www.informit.com/store/product.aspx?isbn=0321580478"&gt;on Rough Cuts&lt;/a&gt; where you can get read the chapters as they're going through the editing process.&lt;/p&gt;  &lt;p&gt;I'm really looking forward to getting a copy of this when the dead tree version comes out in November.&amp;#160; (Hey, maybe a birthday present for myself!)&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/312539668" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/312539668/shout-out-more-effective-c-rough-cuts.html" title="Shout Out: More Effective C# Rough Cuts Available" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=1283340141968140052" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/1283340141968140052/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/1283340141968140052" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/1283340141968140052" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/shout-out-more-effective-c-rough-cuts.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-5613544824358721333</id><published>2008-06-10T00:12:00.001-05:00</published><updated>2008-06-10T00:12:30.825-05:00</updated><title type="text">Meme: How I Got Started Programming</title><content type="html">&lt;p&gt;&lt;a href="http://blog.timwingfield.com/2008/06/how-i-got-started-programming.html"&gt;Tim whacked me with his post&lt;/a&gt;, so here goes.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How old were you when you started programming?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;High school, 1979.&amp;#160; Age of 16 or so.&amp;#160; Radio Shack TRS-80 with a cassette tape drive for its storage.&amp;#160; Not quite punch cards, but damned close.&amp;#160; A buddy whose parents had gobs of money bought him one. (A &lt;em&gt;tape drive&lt;/em&gt;, for cryin' out loud!&amp;#160; They must have been rich!)&amp;#160; He and I were in &lt;a href="http://en.wikipedia.org/wiki/Dungeons_&amp;amp;_Dragons"&gt;a D&amp;amp;D group&lt;/a&gt; together, so naturally a geeky computer attracted us.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How did you get started in programming?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I went enlisted in the Air Force in the general electronics field.&amp;#160; I could have ended up stringing telephone cables, but got lucky and landed a position in school for repairing &lt;a href="http://en.wikipedia.org/wiki/E-3_Sentry"&gt;massive aircraft radar systems&lt;/a&gt;.&amp;#160; I got even luckier by landing a slot for doing inflight repair, fulfilling a dream of flying I'd had since I was a kid and my dad used to take me out flying over rice fields in central California.&amp;#160; I digress.&amp;#160; At tech school in Biloxi, Mississippi, I got the chance to start programming 6502 processors using octal assembly code.&amp;#160; A complete PITA, but it rekindled the interest I'd found from the TRS-80 years earlier.&lt;/p&gt;  &lt;p&gt;I got my first real computer a year or so later when I hocked the new aluminum wheels on my '67 convertible Camaro in order to buy an Apple //e computer complete with 32K of memory and a 64K video card.&amp;#160; Man, that was the cat's ass!&amp;#160; (I see Wingfield had a 128K expansion card.&amp;#160; He must have been living the high life, I tell you.)&lt;/p&gt;  &lt;p&gt;I progressed to dropping in a Non-Maskable Interrupt card so I could hack into &lt;a href="http://en.wikipedia.org/wiki/Strategic_Simulations"&gt;various wargames&lt;/a&gt; that were kicking my then bony ass.&amp;#160; I eventually did such crazy stuff like soldering together EPROMs onto a single socket with a DIP switch so I could toggle between the //e and ][+ BIOS sets.&amp;#160; I hung around a guy who wrote a voice driver for his modem to have his computer call up folks at random times, say &amp;quot;Asshole&amp;quot;, and hang up.&amp;#160; Somewhere along the line I wrote some code that manually moved my 5.25&amp;quot; floppy drive's head around.&lt;/p&gt;  &lt;p&gt;That interest slowly progressed as I was posted to Anchorage, Alaska, where I bought a 286 system from Radio Shack and started fooling around with Borland Turbo Pascal, then Turbo C++.&amp;#160; I eventually bought a generic 386 system from some company that went out of business the week after I bought the box.&amp;#160; So much for tech support.&lt;/p&gt;  &lt;p&gt;The Air Force was kind enough to pay for 75% of my schooling while I was active duty, so I started taking night school courses at a branch of&amp;#160; &lt;a href="http://www.chapman.edu/"&gt;Chapman University&lt;/a&gt; (then just &amp;quot;College&amp;quot;).&amp;#160; I hit Pascal, more assembler, threw up through one Cobol course, and did some C++.&lt;/p&gt;  &lt;p&gt;All that was just some background until I left the Air Force, wandered 'bout for a number of years, and eventually worked my way into cutting code for a living.&amp;#160; More or less.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What was your first language?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Whatever the variant of BASIC on that TRS-80.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What was the first real program you wrote?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Tough to nail that one down.&amp;#160; I remember starting one on the TRS-80 which was supposed to compute catapult damage to a castle wall (D&amp;amp;D, remember?), but I can't remember if we finished it.&amp;#160; Most likely it was some octal exercise on the 6502 in tech school.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What languages have you used since you started programming?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Surprisingly, not as many as some others: BASIC, AppleSoft BASIC, Pascal, Cobol, Assembly on a number of different procs, C++, Perl, Java, C#.&amp;#160; Suffered through Lisp just enough to be able to configure &lt;a href="http://jdee.sourceforge.net/"&gt;JDEE&lt;/a&gt; when I was doing Java work.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What was your first professional programming gig?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I did some writing of Perl modules for managing servers and accounts when I was a network admin, but that's utils, not cutting code.&amp;#160; My first &amp;quot;real&amp;quot; programming gig was as part of a team working on tools to convert SGML to HTML and XML.&amp;#160; (Yes, kiddies, let old fart Jim tell you about when you needed a PhD to understand stupid markup made when single characters counted so everything was implicit, not explicit.&amp;#160; Try figuring out an implied element closing when you're five layers deep.&amp;#160; Obviously I'm still scarred.)&amp;#160; &lt;/p&gt;  &lt;p&gt;I only wrote code around the edges of that, so maybe maybe my first gig was actually writing tools to strip out metadata from &lt;a href="http://en.wikipedia.org/wiki/DTED"&gt;DTED terrain data files&lt;/a&gt; and stuff all that in a database for use by &lt;a href="http://www.erdc.usace.army.mil/pls/erdcpub/www_welcome.navigation_page?tmp_next_page=47672"&gt;a really cool system&lt;/a&gt; designed to figure out where bad guys hide so you can more easily find them and blow them up.&amp;#160; I wrote some code around the edges of that one, too, as well as built tools to create database schemas in Sybase 11 and Oracle 7 for the system's underlying datastores.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If you knew then what you know now, would you have started programming?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Hell yes!&amp;#160; I love what I do!&amp;#160; I wish I could have done more of this over the years, but I've had a somewhat eclectic career due to following my wife around for her military assignments.&amp;#160; (Germany, Alaska, Washington DC.&amp;#160; It's not been bad...)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If there is one thing you learned along the way that you would tell new developers, what would it be?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Learn to learn, don't just learn technology.&amp;#160; What you knew five years ago is laughable now, and what you knew last year likely isn't a higher on the scale.&lt;/p&gt;  &lt;p&gt;One more thing: Learn to have the confidence to say 1) &amp;quot;I don't know&amp;quot; and 2) &amp;quot;Man, that code I wrote last year/last week/this morning really sucks.&amp;#160; But I've learned how to write better code, so I'll do better.&amp;quot;&amp;#160; &lt;/p&gt;  &lt;p&gt;#1's never been a factor for me because I follow with &amp;quot;But I can find out.&amp;quot;.&amp;#160; &lt;/p&gt;  &lt;p&gt;#2 has only &lt;em&gt;just&lt;/em&gt; started to get somewhat easier after reading blogs or hearing podcasts from folks like Atwood, Ching, Miller, Haack, and a bunch of other industry leaders.&amp;#160; If those guys can be up front about their weaknesses then why should the rest of us not be?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What's the most fun you've ever had ... programming?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I'm torn between two things.&amp;#160; First off, watching the head of a hard drive move back and forth as you're stepping through some driver code you've written really is cool.&amp;#160; SOOO much of what we do is nebulous, which I think is part of the reason we like writing unit tests: a green indicator comes on.&amp;#160; Seeing your code make something physically move&amp;#160; is just plain wicked cool.&amp;#160; That bit of fun was, uh, &lt;em&gt;many&lt;/em&gt; years ago but I still remember it vividly.&amp;#160; (I also remember having to repair the armature after some bad code...)&lt;/p&gt;  &lt;p&gt;The second bit of fun would be a space of a couple months after I'd joined &lt;a href="www.quicksoutions.com"&gt;Quick Solutions&lt;/a&gt; last year.&amp;#160; I came on board with the expectation from my boss that I'd quickly jump into a leadership role and help drive business, lead teams, write offerings, etc.&amp;#160; But... for my first couple months I just got to sit my kiester in a chair and code.&amp;#160; It had been YEARS since I'd been able to have no responsibilities but write tests, write code, geek out with other smart folks.&amp;#160; One of the most refreshing times of my life, and exactly what I needed after coming out of a less than optimal situation.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Passing on the love (or, tag, you're it)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jasonhaley.com/"&gt;Jason Haley&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://thesherpaproject.com/"&gt;Ben Carey&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/drobbins/"&gt;Drew Robbins&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.fallenrogue.com/"&gt;Leon Gersing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://govorin.blogspot.com/"&gt;Dave Donaldson&lt;/a&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/308566547" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/308566547/meme-how-i-got-started-programming.html" title="Meme: How I Got Started Programming" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=5613544824358721333" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/5613544824358721333/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/5613544824358721333" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/5613544824358721333" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/meme-how-i-got-started-programming.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-6837245941643922773</id><published>2008-06-07T22:30:00.001-05:00</published><updated>2008-06-07T22:30:31.942-05:00</updated><title type="text">Shout Out: XNA and Robotics Studio Event, 19 June in Cincy</title><content type="html">&lt;p&gt;Mike Wood and the gang at &lt;a href="http://cinnug.org/"&gt;the Cincinnati .NET User Group&lt;/a&gt; are putting on an XNA and Robotics Studio event on 19 June at 6pm.&amp;#160; The event will be presented by &lt;a href="http://blogs.msdn.com/wsteele/"&gt;Microsoft's Bill Steele&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;Bill, if you don't know him, is a certifiable nut who does all sorts of crazy things like run MSDN events in the Heartland region, play around with Robotics Studio, write games in XNA, and has invented &lt;a href="http://blogs.msdn.com/wsteele/archive/2008/03/26/update-on-bill-s-avionics-development.aspx"&gt;a system for displaying small aircraft's flight information on the virtual surface created by the spinning propeller blades&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Seriously, Bill's a wicked smart, passionate guy who will definitely entertain and educate you.&amp;#160; Make it a point to stop by on the 19th if you're at all interested!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/307133449" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/307133449/shout-out-xna-and-robotics-studio-event.html" title="Shout Out: XNA and Robotics Studio Event, 19 June in Cincy" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=6837245941643922773" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/6837245941643922773/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6837245941643922773" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6837245941643922773" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/shout-out-xna-and-robotics-studio-event.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-5816585634812970539</id><published>2008-06-02T15:40:00.001-05:00</published><updated>2008-06-02T15:40:23.608-05:00</updated><title type="text">Playing with SlickEdit</title><content type="html">&lt;p&gt;The folks at &lt;a href="http://slickedit.com/"&gt;SlickEdit&lt;/a&gt; provided copies of &lt;a href="http://www.slickedit.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=385&amp;amp;Itemid=57"&gt;their cool Visual Studio tools&lt;/a&gt; to folks like myself who are members of &lt;a href="http://www.infozerk.com/thelounge/"&gt;The Lounge&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Being a tool geek I couldn't resist installing it and fooling around a bit.&amp;#160; I've not spent a whole lot of time with the tools, but have already found some cool bits.&amp;#160; The window below shows a cool documentation preview in MSDN style, a nice compliment to what I get from ReSharper's Ctrl-Q.&amp;#160; There's also a nice regex evaluator which can generate code for you to paste in as needed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://farm4.static.flickr.com/3067/2545397027_e8a43001db_o.jpg"&gt;&lt;img src="http://farm4.static.flickr.com/3067/2545397027_a3f8394e02.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The &amp;quot;Quick Profiling&amp;quot; bits require you to get some trace handling in your code, so I'm not sure how far I'll go with that, but it may be an interesting thing to experiment around with.&lt;/p&gt;  &lt;p&gt;There's also a very nice comparison tool as part of the Versioning Toolbox.&amp;#160; There's some interesting visual sugar for version graphs, history, and visualizations.&amp;#160; The graphs are pretty cool, and the list of providers is very competent: SVN, CVS, TFS 2005/2008, and VSS (barf).&lt;/p&gt;  &lt;p&gt;Perhaps one of the best widgets in the versioning toolbox is the DIFFzilla window:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://farm3.static.flickr.com/2128/2545464261_15c49646c3_o.png'"&gt;&lt;img src="http://farm3.static.flickr.com/2128/2545464261_c358fa51f7.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is nearly as good as my favorite comparison tool &lt;a href="http://www.scootersoftware.com/home.php"&gt;Beyond Compare 2&lt;/a&gt;.&amp;#160; Love that directory compare feature, and you can quickly get file comparisons by double-clicking a set of the files in this window.&lt;/p&gt;  &lt;p&gt;Overall I like what I see so far.&amp;#160; While I've got access to other tools which fit a lot of these needs, it's really nice to have all this wrapped inside Visual Studio.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/303225718" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/303225718/playing-with-slickedit.html" title="Playing with SlickEdit" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=5816585634812970539" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/5816585634812970539/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/5816585634812970539" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/5816585634812970539" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/06/playing-with-slickedit.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-6852572397551355783</id><published>2008-05-30T09:01:00.001-05:00</published><updated>2008-05-30T09:01:46.383-05:00</updated><title type="text">Save The Date: Open Spaces Mini-Conf 9 July</title><content type="html">&lt;p&gt;&lt;a href="http://www.mvwood.com/default.aspx"&gt;Mike Wood&lt;/a&gt; and I are organizing an open spaces event on 9 July at &lt;a href="http://www.maxtrain.com/directions/#CincinnatiMason"&gt;Max Training's Mason facility&lt;/a&gt;.&amp;#160; The event's still being fleshed out, but we're looking at running from 6pm to 9pm.&amp;#160; Max has a crapload of space in their Mason facility, so we ought to be able to run five or six concurrent discussion groups.&lt;/p&gt;  &lt;p&gt;Stay tuned for more details!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/301288558" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/301288558/save-date-open-spaces-mini-conf-9-july.html" title="Save The Date: Open Spaces Mini-Conf 9 July" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=6852572397551355783" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/6852572397551355783/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6852572397551355783" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/6852572397551355783" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/05/save-date-open-spaces-mini-conf-9-july.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-3782615939207790881</id><published>2008-05-27T11:07:00.001-05:00</published><updated>2008-05-27T11:07:32.728-05:00</updated><title type="text">ANTS Profiler 4 EAP</title><content type="html">&lt;p&gt;I spent an hour or so working with a couple folks from Red Gate this morning to run through the latest build of their ANTS Profiler v4.0.&amp;#160; &lt;/p&gt;  &lt;p&gt;ANTS 4 is still in EAP (&lt;a href="http://www.red-gate.com/messageboard/viewforum.php?f=80"&gt;download latest bits here&lt;/a&gt;), but I was awfully impressed with the state it's in.&amp;#160; I downloaded the bits, installed it, ran a quick session on a monster WinForms app I've worked on in the past, and quickly got down to the guts of some possible performance issues.&amp;#160; The UI's nicely done, and I was very, &lt;em&gt;very&lt;/em&gt; impressed with the app's responsiveness.&amp;#160; I'd all but given up on ANTS 3 and dotTrace because of nearly unusable performance while trying to profile a couple apps.&lt;/p&gt;  &lt;p&gt;ANTS 4 still has a way to go.&amp;#160; There are some bugs running around, and some UI tweaks need to take place, but overall I liked what I saw with this version.&amp;#160; You ought to go have a look at it if you're interested in an easy to use profiler.&lt;/p&gt;  &lt;p&gt;&amp;lt;disclaimer&amp;gt;I get some software from Red Gate for free because of my MVP status.&amp;#160; That doesn't stop me from criticizing if needed.&amp;lt;/disclaimer&amp;gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/299182937" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/299182937/ants-profiler-4-eap.html" title="ANTS Profiler 4 EAP" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=3782615939207790881" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/3782615939207790881/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/3782615939207790881" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/3782615939207790881" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/05/ants-profiler-4-eap.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-3066744768693535742</id><published>2008-05-20T23:11:00.001-05:00</published><updated>2008-05-20T23:11:51.517-05:00</updated><title type="text">Recap of Cincy .NET User Group Panel Discussion</title><content type="html">&lt;p&gt;The great gang at the &lt;a href="http://cinnug.org/"&gt;Cincinnati .NET User Group&lt;/a&gt; invited me to participate in a panel discussion at their meeting tonight.&amp;#160; I was honored to be up front of the group with &lt;a href="http://www.timapke.com/blog/index.php"&gt;Tim Apke&lt;/a&gt; and &lt;a href="http://esumerfield.blogspot.com/"&gt;Ed Sumerfield&lt;/a&gt;, both two sharp guys with much more technical experience than me.&amp;#160; All three of us have, as &lt;a href="http://www.mvwood.com/blogs/blog/default.aspx"&gt;Mike Wood&lt;/a&gt; put it &amp;quot;a long history in IT&amp;quot; which I think was Mike's nice way of saying all of us are old farts.&lt;/p&gt;  &lt;p&gt;The discussion was very free form and hit a lot of great topics ranging from specialization or generalization to estimation accuracy to workplace culture.&amp;#160; Dealing with new technology was&amp;#160; big one, as was questions about breadth of experience (outside of the strictly technical domain).&amp;#160; The value of certifications was bandied about with a mild consensus seeming to form around them being good in the proper context: use 'em if you need to prove your chops early in your career, but don't overly fixate on them.&lt;/p&gt;  &lt;p&gt;Hearing Tim's and Ed's perspectives along with those of the audience was a great experience.&amp;#160; Tim and Ed are wicked smart and have some great insight into how to steer one's career along.&amp;#160; Tim was emphatic about taking ownership of your own career.&amp;#160; In a sidebar after the meeting he compared taking care of your career to taking care of your car.&amp;#160; You keep your car's tires in good shape, change the oil, and give the vehicle a tune up on occasion.&amp;#160; Same concept applies to your career.&amp;#160; Ed also impressed the hell out of me with a number of things, not the least of which were his closing comments which was a short haiku along the lines of &amp;quot;own your path&amp;quot; but he said it way more better.&lt;/p&gt;  &lt;p&gt;One of the regulars there (forgot your last name, Jamie -- sorry!) hit me with the last question of the evening and asked how I manage to balance work, community involvement, &lt;a href="http://www.amazon.com/gp/product/0596527543?ie=UTF8&amp;amp;tag=frazzleddadco-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596527543"&gt;book writing&lt;/a&gt;, and time with the family.&amp;#160; That one hit very, very close to home and got me choked up in a major way -- not what I would have preferred for my last question of the evening, but there you have it.&amp;#160; I don't always do a great job of work/life balance, but I've made some tough choices in my career to favor family over work.&amp;#160; I've passed up great opportunities, I've struggled with sub-optimal part-time positions, and I've left a high paying job to be unemployed at home in order to take care of the kids.&amp;#160; My career would be in a much, &lt;em&gt;much&lt;/em&gt; different spot had I chosen career over family.&amp;#160; &lt;/p&gt;  &lt;p&gt;The cons of those decisions are that I'm not some internationally recognized expert traveling around the world talking at TechEd Barcelona or running some wicked cool project in Dubai, nor am I billing out at $500 per hour while working at iDesign or some similar firm.&amp;#160; The pros of those decisions are that I got stay at home with my daughter and son while they grew up, and I'm not traveling three or four weeks of each month while my wife and kids live their lives without seeing me.&amp;#160; (Another con: costs of therapy for two kids when they hit teen years and figure out how screwed up they are after having had me as their primary caregiver...)&amp;#160; &lt;/p&gt;  &lt;p&gt;So to those of you who thought I got emotional about that question, you're right.&amp;#160; It's really at the core of who I am, even if I don't get it right as often as I should.&amp;#160; (That's me, too, BTW.)&lt;/p&gt;  &lt;p&gt;Actually, forget all that.&amp;#160; It was really allergies.&amp;#160; Sorry.&lt;/p&gt;  &lt;p&gt;In any case, the panel discussion at the group was an excellent evening.&amp;#160; I hope attendees got something useful out of it!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/294771138" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/294771138/recap-of-cincy-net-user-group-panel.html" title="Recap of Cincy .NET User Group Panel Discussion" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=3066744768693535742" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/3066744768693535742/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/3066744768693535742" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/3066744768693535742" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/05/recap-of-cincy-net-user-group-panel.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-10748614.post-8385801784995088171</id><published>2008-05-19T11:02:00.001-05:00</published><updated>2008-05-19T11:02:47.935-05:00</updated><title type="text">Dealing With Technical Debt</title><content type="html">&lt;p&gt;All projects acquire technical debt in one fashion or another, and in varying quantities.&amp;#160; I've been looking at a couple past projects to identify areas in need of some debt repayment should the projects move into their next phases.&lt;/p&gt;  &lt;p&gt;Apropos, then, that I ran across &lt;a href="http://forums.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx"&gt;a great post from Steve McConnell on technical debt&lt;/a&gt;.&amp;#160; I particularly like his sections on communicating about technical debt and debt safety.&amp;#160; Be sure to follow Steve's links to Ward Cunningham's and Martin Fowler's articles.&lt;/p&gt;  &lt;p&gt;Good reading!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/Frazzleddad/~4/293599688" height="1" width="1"/&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/Frazzleddad/~3/293599688/dealing-with-technical-debt.html" title="Dealing With Technical Debt" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10748614&amp;postID=8385801784995088171" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://frazzleddad.blogspot.com/feeds/8385801784995088171/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/8385801784995088171" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10748614/posts/default/8385801784995088171" /><author><name>Jim Holmes</name><uri>http://www.blogger.com/profile/05869146736565695900</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://frazzleddad.blogspot.com/2008/05/dealing-with-technical-debt.html</feedburner:origLink></entry></feed>
