November 2009 Blog Posts
Windows 7 /Vista – Can’t Edit or Save Files in C:\Inetpub

I rarely ever put any code in C:\Inetpub, but some applications will put their websites there by default.

And you may find yourself surprised when, even when using an Administrator account, you don’t have permissions to update files or save files under that location.

Turns out it is an UAC issue.  From Thomas Deml, a Program Manager for IIS at Microsoft, in this post:

Here is an easy fix. Run the following command from an elevated command prompt (right click the "command prompt" icon and select "Run as Administrator").

icacls %systemdrive%\inetpub /grant  %userdomain%\%username%:(OI)(CI)(F) /grant %userdomain%\%username%:F

Note, do not replace any of the values in between the %% signs, just run it as is.  Voila.

No, I don’t know what “(OI)(CI)(F)” means either.

posted @ Sunday, November 22, 2009 7:06 PM | Feedback (19)
No Man – All the Blue Changes (Live)

I normally don’t post all these music things at once, but what the hell.

What are blue changes?  Why are they re-arranged?  These are questions that demand answers…okay, maybe not. 

I still like the song.


posted @ Thursday, November 19, 2009 11:35 PM | Feedback (2)
No Man – All Sweet Things

Continuing on the music video theme….

Tim Bowness is kind of like a modern day Morrissey.  His lyrics and delivery are very…precious, for lack of a better word.  It’s easy to dislike if you aren’t into that sort of thing, but I like certain of his songs more than others, and this is one of them.  That’s Steven Wilson (of Porcupine Tree fame) in the background playing guitar.


posted @ Thursday, November 19, 2009 11:14 PM | Feedback (0)
Dawn Landes – Straight Lines

This one goes out to all of those who have seen the Chrysler Town and Country 2010 commercial with a bunch of women in bikinis who thought to themselves “How many damn commercials can feature Feist?” and yet didn’t mind a commercial with a bunch of women in bikinis.

It turns out it isn’t Feist, but Dawn Landes.  No, I don’t know who that is either.

The full video, as far as I can tell, is incredibly stupid, with a bunch of dumb hippy shit (as if there was another type), but has the advantage of having Ms. Landes in a negligee type thing for the whole thing.  Plus the lyrics, as intelligible as lyrics can be in a situation like this, seem to be about loss and sadness and whatnot, and you know how I like that sort of thing.


posted @ Thursday, November 19, 2009 10:58 PM | Feedback (1)
Subject Matter Expert != Technical Expert

I’ve run into this situation a couple of times over the years.  Let me tell you, it is fun!!!!!!! (That’s sarcasm for the sarcasm impaired).

The general scenario is something like this: at some point in the history of a department, usually a number of years ago, the department decided it needed to upgrade its technical infrastructure (I’m leaving that purposefully vague), and decided that it needed someone who had a significant amount (or significant enough) of domain knowledge to drive that decision.  Often times, this means the SME learns enough to implement some sort of technical design.  Usually, what they learned is not necessarily the most ‘robust’ technology.  Sometimes, it is Access, but it could be DTS, VBScript, batch files, etc.

At some later point, it becomes clear that the technical infrastructure is well short of being manageable, and so a directive from the department or a higher-level entity is issued that an upgrade is required.  This could be an upgrade to C# or Java or, hell, Perl….something.

What often happens though is that, since the SME built the original implementation, they often become a crucial component of the upgrade process.  And this is when all hell can break loose.  Every decision has to involve this person, and since they aren’t a technical expert to begin with, the decisions end up at the lowest common denominator of what this person can grasp.

Often times, the higher-ups driving the upgrade directive recognizes this, but end up in a dilemma.  They need to wrestle the technical implementation from the SME, but the existing solution is the SME’s ‘baby’ (in one rather funny example from years ago, the SME was talking about the existing code base and kept referencing it as “my code…this is my code” in a Gollum type manner (I kept waiting for him to refer to it as '”My precioussssssss!!!!!!”, but I digress)).  The SME is essentially being asked to relinquish control, but he is the only one that can actually figure out how the current house of cards functions. 

As far as I can tell, there is no easy solution when one is faced with a scenario like this.  You can’t cut the SME out of the picture entirely, as you need their ‘expertise’ in how things currently work, but at the same time, they are a major roadblock in getting any significant improvements implemented, since they don’t get why their code sucks in the first place (and telling them that their code sucks in the first place tends to lessen their willingness to work on the upgrade, as you might imagine). 

This actually relates to DDD, in a tangential way, which I’ve talked about here and here.

In any event, this is a real problem, with no easy solutions.

As an aside, I’m trying to figure out a ‘title’ for a person like this.  “Subject matter expert technical amateur” just doesn’t roll off the tongue.  “Jagdorf” is just rude, and not necessarily accurate (the SME might have been put in this position against his will at the start).

posted @ Wednesday, November 18, 2009 6:50 PM | Feedback (0)
The Deployment Runbook

The deployment runbook is an artifact usually found within larger IT departments, and is designed to help guide the deployment of ‘Enterprise’ applications that requires a large number of steps, and typically can cover a period of a number of days.  Anyone who had experienced this beast knows that it is almost always a sign of an environment that is horribly complex and barely manageable.

In its common form, the deployment runbook is a master Excel spreadsheet, often with many worksheets within it, typically numbering hundreds, if not thousands, of rows long, and almost always very colorful.  Because it is usually the joint creation of multiple departments, it commonly takes multiple conference calls, often involving dozens of people, as well as dozens if not hundred of revisions through email, to come into its final form.

What the deployment runbook attempts to do is to lay out in exacting detail every single step that is required (or believed to be required) to deploy an application or system successfully.  The success of the runbook will often depend on its ‘maturity.’  If it is the first time that the runbook has been developed and employed, there is probably little chance that the experience will be successful.  As it gets re-used and ‘refined’ through subsequent deployments, the gaps and pitfalls will lessen over time.

This ‘maturation’ of the deployment runbook can often be viewed, seemingly paradoxically, as a bad thing, as it is a signal that sub-optimal practices are being embedded and entrenched.

How does such a thing come into being?  Often times, it is a matter of consolidation or acquisition.  Multiple disparate systems must be made to play together well.  Regardless, it seems to come into being most often because the nature of the technology in use, and the practices that have evolved around them, are almost impossible to automate (for either technical or cultural reasons).

Common steps within such a runbook (described at a very high level, of course) will involve things such as backing up databases before the deployment of new code, the recycling of subsystems such as web servers, message queues, and the like, and will almost always involve a step or set of steps where the configuration of multiple systems must be manually changed to reflect what is required for the production environment. 

During the deployment, there will be multiple checkpoints so that a massively attended conference call can be held to determine the status of the deployment, and all of these will be listed in the runbook.  There will be an entry within the runbook to make a note of all the actual events that were not accurately reflected in the runbook, so that a meeting can be scheduled to discuss how to better improve the runbook for the next deployment.

What should one do if they are faced with the existence of such a runbook?  This depends on one’s role, of course, but at a base level, every attempt should be made to eliminate the need to manually change configurations (ways to do this can be found here and here).  In almost every situation, these attempts will be viewed upon favorably, and can make demonstrable improvements.

The hardest thing to do, but in many, if not most, cases, the best thing to do, is to think about how to make incremental changes that begin to reduce the scope of the deployment runbook.  Ideally, you can find ways to eliminate it entirely, but like most ideals (cure cancer, eliminate poverty, end injustice, etc.), usually the best you can do is to strive for the ideal as best you can, knowing the result will forever be imperfect.

Do not despair.  The deployment runbook actually does serve a purpose, imperfectly attempting to manage an almost unmanageable situation, and in a way that is understandable and acceptable to to CEO/CTO/etc. types (and this benefit should never be discounted).  But it can be improved over time.

And if all else fails, you can always quit and go work somewhere else.

posted @ Monday, November 16, 2009 8:00 PM | Feedback (1)
Football Coaching 101

Suppose you have the ball with time winding down in the 4th quarter, and you are down by, say, 9 points.  Suppose you get the ball to the opponent’s 20 yard line or so with about a minute left.  What do you do?

You spike the ball and kick the field goal.  You have to score twice, you can’t waste time.  Kick the f%^king field goal. 

This happens in both the pros and in college.  Maddening, especially when it is your team that does.

posted @ Saturday, November 14, 2009 6:03 PM | Feedback (3)
“I fought Chuck Norris with this shirt on and almost won”

Go to Amazon and take a look at this product here.

Then, start to read the customer reviews, including this one here.


posted @ Tuesday, November 10, 2009 6:55 PM | Feedback (3)
Guilty Musical Pleasures: Lita Ford – Kiss Me Deadly

I went to a party last Saturday night
I didn’t get laid
I got in a fight
Uh, huh, it ain’t no big thing

I’m thinking that if Lita didn’t get laid, Lita didn’t want to get laid.

Anyway, the powers that be decided to try and make her a star with a series of videos like this one.  Another one had her do a duet with Ozzy Osbourne.  It didn’t really work, but you can’t fault them for trying.

A couple of questions arise.  Why does she like dancing with Chew?  Chew who?  Chewbacca?  And did she really play the guitar outro solo?  She wasn’t really known for having chops and the video has her back to the viewer.  And, of course, there is the obvious question: is it a good thing to have someone kiss you deadly?


posted @ Wednesday, November 04, 2009 9:59 PM | Feedback (0)
Selective Unit Testing

Here’s an excellent post by Steve Sanderson on when and how you should choose to write unit tests.

I’m not sure I would agree with his assessment that 100% code coverage is an aim for only a minority of developers doing TDD (that’s not exactly what he said, but it’s my blog and I can twist words if I want to, twist words if I want to).  I think TDD is bad in large part because it does focus too closely at the class level and pushes for unit testing everything (this is why Specification-style testing is better).

But regardless of that, it’s a good read.

posted @ Wednesday, November 04, 2009 2:00 PM | Feedback (0)