The Future is Looking Good
As I've previously mentioned, as of October 1st 2008 MSDN subscribers who have previously only had access to Visual Studio Team System Development Edition can now also use Database Edition. The reasoning behind this move has now been made clear thanks to the January MSDN Subscription Newsletter:
In the next release of Visual Studio Team System we will be merging the feature sets of the Development Edition and the Database Edition into a single product. The new product will include all of the features in the Development Edition and the Database Edition as well as new capabilities delivering even more value in a single product. This will provide a more complete set of capabilities for building software in today’s data-driven environments. Bringing these two feature sets together enables you to take advantage of the core tools for application development as well as the necessary tools for database development, including performance profiling, code analysis, code metrics, code coverage, database refactoring, Schema Compare, Data Compare, and more
Looks like they've finally got the message that a large proportion of developers still need to touch the database, and as a result will be combining the Developer and Database editions of VSTS in the next version. Now if only they could get rid of the comparatively useless Architect edition. Roll on VS 2010!
The Misleading Error Message Strikes Again
We've got a stock standard Windows 2008 virtual hard drive image at work that I wanted to make some additions to and generally polish up into a decent developer image. The install media was the "Windows Server 2008 Datacenter, Enterprise and Standard (x86) - DVD (English)" ISO sourced from MSDN.
I noticed that the image had not yet been activated, so I set out to rectify the situation. Hopping into the system settings in control panel, I navigated down the the section on product key information and clicked on the link to activate windows. Unfortunately this process errored out with the following message:
Code: 0x8007232B
Description: DNS name does not exist.
I immediately checked network connectivity. Can I get to google? Yes. Can I resolve MS addresses? Yes. Hmm.
Then I happened to notice some text in the bottom right hand corner of my desktop:
Windows Server(R) 2008 Standard
Evaluation copy. Build 6002
Evaluation copy? That means that my product key is not going to be valid. So I grabbed a new product key from MSDN, entered that in and tried the activation process again. Success!
After all that I still can't figure out what a DNS error has to do with a product key being invalid. I would have been more than happy with something along the lines of "Unable to activate due to invalid product key". They may as well have told me that activation failed due to insufficient vegemite.
Creating a Monster – Part 1 – The Beginning
Ferreting around in a spare room/cupboard/garage/other junk storage area can sometimes yield a wonderful surprise. I recently re-discovered an old, broken guitar sitting in our spare bathroom (which has been totally stripped awaiting renovation for.. oh, about 2 years now, and is now serving as an extra large cupboard. But that's another story); an Epiphone Les Paul Special II that I picked up for AUD200 back in 1999. It was the first electric guitar I ever played on stage, and even though it's a cheap piece of junk it will always hold a special place in my heart.
Upon inspection it was clear that time had not been kind to the guitar. I had originally put it into storage after the nut broke next to the 6th string, effectively making the guitar useless in it's current state.
Numerous other problems presented themselves, leading to a rather impressive list of ailments:
- Machine heads that were falling apart and would not keep the strings in tune.
- Broken nut, limiting the guitar to 5 strings
- Crackling tone and volume pots
- A loose input socket
- Weak sound from the pickups
- A noisy pickup switch
- Annoying hum indicating that the guitar was not properly grounded
Given that list and my eagerness to give a task a go as long as it seems interesting enough, I decided to attempt some modifications myself.
First, let me be very clear about something: I know absolutely nothing about guitar modifications, woodworking or electrics. If you're after a guide on how to do any of this then check out the various articles I reference throughout the post. I did this because I was bored and wanted to find out how to do this sort of thing. The guitar I tried it on was broken anyway and I was fine with the prospect of breaking it some more. Ultimately I'd like to get good enough to make modifications to some of my more expensive instruments, but until that time I'll settle for practising on guitars that are next to worthless.
If this works out well then I've got another two guitars that need physical repairs and another 3 that could do with shielding as well as having the grounding looked at. The cheap Yamaha bass I picked up a few years back suffered from a horrible hum when I'm not touching the strings, which indicates that it's not properly grounded, so I'll have to take a look at that, too.
The first thing I had to do was pick replacement parts. The machine heads were easy; I ordered a set of non-locking Gotohs. I've never tried locking machine heads, so I figured that I'd stick with what I know. The guitar has a fixed bridge, so it simply needs a decent set of machine heads to keep it in tune.
The nut was a different story. Normally I'd get someone to cut a new bone nut from a blank, but there was no way I had the time or patience to do that this time around. I also couldn't drop the guitar off at a shop for any period of time, as I'd be putting all the other hardware on it myself so I'd need to have access to it.
I could have bought myself a blank bone nut and shaped it myself, but it looks like a long, complicated process that involves specialist tools, a well thought out plan and actual skill; none of which I have. Fortunately I was able to buy a basic graphite nut in the same profile as the original, broken nut. As long as it is the correct height you can usually get away with attaching the nut without modification. At most I'd be up for a little filing to lower the height slightly.
But what about the electrics? How do I get rid of that hum? How do I rewire the guitar? To the intarwebs!
There's an excellent article on properly grounding and wiring guitars over at Guitar Nuts that caught my eye. The basic idea is to insulate, create a single path to ground and create a makeshift Faraday Cage. To accomplish this I would need some copper backed tape and a lot of guess work. Unfortunately the article is geared towards a Fender Strat style guitar, so there were still a few problems that I would have to solve.
Darrell Young over at Digital Darrell has an excellent article on replacing the pickups in the exact same model of guitar that I'm working on. When I do the actual modification I'm sure that I'll be be referring to this with some frequency.
Unlike Darrell there's no way I'm going to spring for authentic Gibson pickups given that this is the first time I've ever tried anything like this. Instead I'm looking at getting a pair of cheap Gotoh humbuckers. Gotoh themselves are better known for their hardware (floating bridges, machine heads etc. In fact, the machine heads I put on the guitar are Gotoh), but they make a range of cheap, relatively high quality pickups that are made in Japan and can be picked up for around AUD40-AUD50. I managed to find a wiring guide for Gotoh pickups online, so I can do some pre-planning to figure out what my circuit is actually going to look like before the pickups arrive.
In order to fix the noisy volume and tone pots I would need to replace them. A pot is basically a variable resistor that can be used to alter the signal coming from your pickups. There are two main levels of resistence used in guitars; 250k and 500k. You also occasionally see 1Meg pots. A high resistance pot will retain more of the high frequencies in the signal.
As a general rule of thumb, the 250k models are normally used with single coil pickups to avoid an overly shrill sound. Since I'll be putting humbuckers into the guitar I'll be going with 500k replacements.
Quite a few of the parts have arrived, and over the next few weeks I'll slowly but surely be progressing with the modification. I'll be taking plenty of photos, and will be uploading themto a set on my Flickr stream as I go. Next thing on my agenda: remember enough about electronics from high school to avoid electrocuting myself.
InfoPath Form Security and Custom Code
Generic error messages are high on my list of pet peeves. Being told that "an error occurred" may be something that you can pass off in a line of business application, especially if the actual error message gets emailed to the help desk or something similar, but it is totally unacceptable in a product targeted towards software developers.
Tonight, when trying to add some managed code to an InfoPath 2007 solution, I ran into one of these horrible errors. InfoPath was presenting me with a highly helpful "InfoPath cannot open the selected form" error message whenever I tried to debugging the solution.
After spending a few minutes scratching my head I remembered that InfoPath forms need to run in Full Trust mode in order to use managed code. I navigated to "Tools>Form Options>Security and Trust" and had a look at the settings, which were still set to the default "Automatically determine security level". Unfortunately I assumed that, when using this setting, InfoPath would be able to figure out that I was using managed code and select the appropriate security level. Obviously my assumption was incorrect.
After setting the level of trust to "Full Trust" I was finally able to launch the form, complete with managed code.
If I had not previously read about security and trust within InfoPath then I would have had to waste more time floundering on Google with only a generic error message to help me. All that could have been avoided if they had just presented me with a dialog saying "The form has an insufficient trust level to perform this operation". Well, either that or make the "Automatically determine security level" trust setting actually determine an appropriate trust level in the first place.
Fast Food Development
The idea of trust within a software development team is an interesting one. Jeff Atwood argues that a lack of trust between management and the development team can lead to "micromanagement zombies" who mindlessly follow anything management tells them without contributing creatively. I believe that the issue is much more complex than this, as demonstrated by the following comment from the post:
OK, what do you do if:
- Your team regularly commits errors to make the editors of Daily WTF blush?
- They've been doing it that way their entire career and aren't very interested in changing?
- They're above average coders in the SE Asian nation you live in?
At least you can shoot zombies.
What we have here are two totally different approaches to software development: Fast Food and Gourmet.
The Fast Food approach delivers a bland product that is frequently prepared incorrectly, but it does it fast, cheap and using unskilled resources. The Gourmet approach delivers a higher quality product, but may take longer, will certainly cost more and requires a more experienced resource to prepare.
Successful fast food chains invest millions in making meal preparation as idiot proof as possible. Flashing lights and screeching sirens tell their employees are told when to wash their hands, when to flip the burgers and when to change the oil in the fries. They are micro-managed to the hilt simply because management do not trust their employees and expect them to fail if left to their own devices.
In contrast, a gourmet establishment has higher expectations of their staff. At the very least, they expect them to know how to cook as opposed to how to follow a checklist of specific orders. Most restaurants have to trust their staff to be able to perform their jobs to a certain level without specific instructions.
This parallel exists in many industries; for example, a master luthier would be trusted by his or her management more than the employee working the line in a factory that produced cheap, mass production guitars. Each has a place: some people want to spend $10,000 on a quality custom guitar, where as others would prefer to spend $150 on a cheap hunk of plywood that sort of looks like a guitar. To each their own.
The software development industry is no different. As much as some people would hate to admit it, there is a market for horribly written software that is impossible to maintain but was developed for minimum wage. It may be cheaper to produce a quality product using quality resources and best-of-breed practices, but that is irrelevant when the customer simply does not care about, or cannot afford, quality. These are the same customers who consider Access a viable solution, and who would have never been able to afford custom software before the advent of VB6.
To service these clients it may be necessary to use inexperienced or low-skilled workers and use management practices similar to those found in fast food restaurants. If you know that your resources are incapable of developing a product without guidance then all you can do is hope that they follow instructions and review, review, review.
I'm fortunate enough to work in an environment where high quality resources are the norm, but I have also consulted in the small business market and seen first hand just how common Fast Food Development is out there in the "real world". Regardless of developer idealism, cheap, dodgy software development is the oil that keeps the wheels of business running. As a quality developer you may not want to work in environments such as this, but that is no reason to stick your head in the sand and pretend that they do not exist or are not an important part of the software development landscape.
Awesome cuff links are awesome
I've never been a fan of "bling". I don't wear watches, necklaces, rings, earrings or anything of that sort. If my shirt requires cuff links then I'll usually wear the standard "monkeys fist" style silk knot cuff links that come with some French cuff shirts.
Saying all that, I love these cufflinks. They were a birthday present from my better half, and are sufficiently geeky without being overly garish.
They aren't exactly "hey, look at me, I'm totally unique and quirky!" items, unlike, for example, the 8-bit tie, which I could never wear to work with a straight face. Perhaps if it came in a colour that wasn't bright blue or red?
Update: I've had a few people ask me where I got these from. I've been informed that they came from http://www.benjamincufflinks.com.au/.






