SQL Server Won’t Start After Replacing Physical Drive

So, I had to replace a failing hard drive in my computer at work. It was the D: drive and only had data on it, so no big deal. Put in the new drive, copy the data over, remove the bad drive, rename the new drive to D:, and should be good to go, right? Well, not quite… See, when I had installed SQL Server, I told it to put all of the databases on the D: drive, including master, model, etc. Even though all of those files got copied over to the new D: drive, SQL Server wasn’t happy. I kept getting this error when trying to start up SQL Server:

FCB::Open failed: Could not open file D:\SQLServer\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\model.mdf for file number 1.  OS error: 5(Access is denied.).

SQL Server was configured to run under the Network Service account, so I checked the effective permissions for that account on the model.mdf file. They appeared to be sufficient, but not “Full Control”. So I gave Network Service full control on the MSSQL10_50.MSSQLSERVER folder and after that SQL Server started up just fine.

I looked at permissions on some other systems and the account SQL Server is running under does not typically have full control over those files. In fact, it usually seems to have the same, or even more restricted, permissions than what mine had when it wasn’t working. I’m not quite sure what exactly it needs to work, but it’s working now and giving the service full control to that folder probably isn’t too dangerous.


Get Notepad++ to Recognize Any File Extension

Notepad++ is my favorite text editor on the Windows platform; however, I’ve often wished it would recognize other file extensions and use the appropriate language setting. On several occasions I have poked around in the Preferences, but was never able to find a way to get it to do that. (It’s a testament to my laziness that I hadn’t bothered to put much energy into figuring it out, despite the fact that it repeatedly annoyed me.) Well, today I noticed the Style Configurator menu option and wondered what it was. It turns out this is where you get Notepad++ to recognize other extensions!

Simply go to the Settings menu and then click on Style Configurator dialog:

In the Language list, select the language you would like an extension to default to. For example, I typically want *.config files to be opened as XML files. To do this, select the XML language, enter “config” into the User ext. field, and then click Save & Close. That’s it! Now when you use Notepad++ to open a file with a config extension, it will default to the XML language. If you want to associate multiple extensions with the same language, simply enter them all in a space-delimited list.

I’m sure this information is out there somewhere, but I was too lazy to look for it, and I needed to write something on my blog. 😉

Note: this does not create a file associate in the operating system. So if you want to also be able to double-click on a config file and have it automatically open in Notepad++, you’ll also need to create that association in Windows.




Agile Coach Camp USA

 Games Day Warm-up

Last weekend I attended the Agile Coach Camp-USA in Columbus, Ohio, and I can’t say enough good things about this event. If you care about building successful Agile teams, you should definitely get to one of these camps.

getKanban Game

The first day was the Agile Games Day. A full slate of hands-on activities were planned to simulate many different aspects of a coach’s role. I participated in the Get Kanban game, Kanban Pizza, 99 Test Balloons and Marshmallow Challenge. Each of these games were very good simulations of different Agile concepts. One thing that jumped out at me during these games is Agile coaches aren’t always very good at taking Agile approaches with relatively simple tasks, myself included. Each time I noticed teams making the same mistakes. In the Get Kanban Game, none of the teams prioritized a very high value story correctly. In the first round of the Kanban Pizza game, both teams created way too much work-in-progress by significantly over-producing slices of pizza which were not completed. In 99 Test Balloons, none of the participants asked for adequate acceptance criteria at the beginning. In the Marshmallow Challenge, both teams began by attempting grossly over-engineered solutions, rather than starting with the simplest thing that could provide immediate business value and then building upon that. What was interesting was when I stepped away from my team and observed what the other teams were doing, the mistakes were obvious, yet my teams were making the same mistakes and I didn’t see them.

During the conference, someone suggested that these kinds of mistakes might indicate the importance of cross-functional teams and that a team consisting of only coaches may not perform well. While there is probably some truth to that, I think there is more to it. Having just come off a coaching assignment where I had a lot of developer responsibilities as well as coaching responsibilities, I saw some similarities. I had a hard time balancing the duties of my two roles and I found that when I was wearing my developer hat, I had difficulty functioning as a good coach, because I had my head too deep in details. It occurred to me that in order to be a good coach it may be necessary to avoid getting too involved in the work of the team. I don’t like this idea as I’ve always felt that being in the trenches with the team is a great asset to a coach, but I can’t deny the pattern I experienced and witnessed. In my case it might simply be a lack of coaching experience, but that doesn’t explain the behavior I observed in much more experienced coaches. Maybe there’s another explanation. Maybe people weren’t taking the games seriously enough. Maybe the games are too abstract. I’m not sure, but I think I may pursue the notion that a coach shouldn’t get too engaged in the team’s work, at least in my case.

Open Spaces Board

The following two days of the event were an Open Space format. There were a lot of very interesting topics proposed and I had a hard time choosing which topics to participate in. I can honestly say that I got a lot out of every conversation I went to. The topics included estimation techniques, recruiting strategies, coaching skills, distributed teams, and selling Agile. One topic that I regret not choosing was Influence Map by Siraj Sirajuddin. I’m really not sure what exactly went on in that session, but it certainly seemed to have had a profound impact on those that participated. I will certainly not miss the opportunity should it present itself again.

This was a great event and I’m glad I decided to attend. I don’t think I’ve ever been surrounded by so many thoughtful and generous people. I learned a lot, met some fantastic people, and regained enthusiasm for coaching, which had waned after a recent disappointing coaching assignment. I hope to make the next event in Minneapolis.



Organize Media Files with PowerShell

I’ve never been happy with the way Windows imports photos, so I decided to look for a better way. I found this post on Steve Smith’s blog about how to rename photos and organize them using a PowerShell script. The script extracts the date each photo was taken from the file’s EXIF data, renames the files with the date, and organizes them into folders based on the month. This was close to what I wanted, but I also wanted to do the same thing with videos. Unfortunately, videos don’t contain the same kind of EXIF data. After some research and experimentation, I figured out how to extract the Media Created date from MP4 and AVI files.

My script recurses through the $SourceRootPath looking for any files with an extension in $FileTypesToOrganize. For each file, it extracts the appropriate creation date. In the case of JPG files, this comes from the EXIF DateTaken and for other file types this comes from the MediaCreated date. Using the date and the $DestinationRootPath it builds a path of the following format:


My script also appends a three digit random number to the end of the file name, just to guarantee there are no name collisions if there happens to be more than one file with the exact same date (unlikely, but possible). Right now the script only works with JPG, MP4 and AVI files; however, it would probably work with other video formats simply by adding them to the list of extensions.

You can download my script here.

Unable to Stream Media from PC to Xbox via Wireless Network

I finally got around to getting an Xbox 360 last weekend. This weekend I wanted to try streaming pictures and music from my laptop and Droid X to the Xbox via DLNA and my wireless network. No matter what I tried, I could not get the Xbox to see my phone or laptop, nor them then Xbox. I spent hours and hours this weekend searching the Internet and trying everything I could think of, but I couldn’t get it to work. Since none of the devices could see each other, it seemed like it was likely a router issue. While perusing the router settings for the umpteenth time, I noticed that an unfamiliar setting, called AP Isolation, was set to “On”, which was not the default. I looked up the documentation on this setting for my Linksys router and it said:

Creates a separate virtual network for your wireless network. When this feature is enabled, each of your wireless client will be in its own virtual network and will not be able to communicate with each other. You may want to utilize this feature if you have many guests that frequent your wireless network.

Doh! I don’t ever remember turning that setting on, but it sounds like something I would have done. None of the wireless devices on my network have ever needed to talk to each other before, so it probably made sense to turn it on, until now anyway. As soon as I turned off that setting all the devices could suddenly see each other. As the documentation says, this setting only isolates the wireless devices from each other. Since I’ve never tried to get any of my wireless devices to communicate before, it was never an issue. My wireless devices were still able to communicate with all the wired devices, though.

I’m posting this on the off chance it might help someone, and as a reminder to me to be careful when tweaking things because I often forget what I did.

Kalamzoo X Conference

X Conference is a small event that has been taking place in Kalamazoo, Michigan for three years, and it’s one of my favorites. I love the theme of the event, which is about improving developer soft skills, as opposed to most events which are focused on technologies. In the last two years I’ve heard talks on subjects like self-branding, community involvement, developer education, interviewing, and body language. Last year I also heard one of my all-time favorite talks by one of my favorite speakers, Alan Stevens. His talk, entitled “Does Your Code Tell A Story,” was just brilliant. The format also works very well: a single-track of 30-minute talks. It creates a great environment for conversations between talks, during lunch, and after the conference because everyone has heard all the same content. I can’t recommend this event enough. If you care about becoming a better developer, you need to get to this conference.

Agile and Beyond

I attended the Agile and Beyond conference in March. This is a one-day, regional event with a little over 500 attendees. The opening keynote by Mary Poppendieck was very good, as her talks always are. I was intrigued by her discussion of Dunbar’s Number and how it relates to team size. I attended a few interesting sessions during the day, but, for me, the highlight was definitely the closing keynote by David Hussman. I hadn’t heard of David before, but he’s now definitely on my favorite speaker list. I thoroughly enjoyed his talk and I recommend watching it.

This was a very good conference and I certainly plan to go back next year.

Getting WatiN Test Recorder to Run on Win7 64bit

I finally decided to check out WatiN today. The first thing I did was run the Test Recorder, but when I launched the app I received the following error:

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {98EDB477-3064-4D0E-A09E-CC73F9AAB324} failed due to the following error: 80040154.

I’m running Windows 7 64bit. After digging around I found the solution is to run the following command (with administrator privileges):

corflags /32bit+ "C:Program Files (x86)WatiN Test RecorderTest Recorder.exe"

Obviously, change the path to the executable, if necessary.

Orchard 0.9 Released

Version 0.9 of Orchard CMS released yesterday. This release includes the addition of Orchard Gallery and Gallery Server, which are two related Open Source projects I’ve been working on since I joined NimblePros in November. Gallery Server is a general purpose, back-end component gallery, and Orchard Gallery is a front-end for it. (Gallery Server will also be the back-end for NuGet.) You can check out the Orchard Gallery in action at this demo site. This has been a very interesting project to work on and we still have a lot more to do before the 1.0 release next month.

Cleveland GiveCamp: Report from the Trenches

This July I participated in the Cleveland GiveCamp, a first for Cleveland and for me. GiveCamps are weekend-long events where technology professionals volunteer their time to work on projects for non-profit organizations. When I signed up for the event, I admit I did so with a great deal of skepticism; I really had no idea what to expect. I found it hard to believe that over one hundred IT volunteers could show up, get assigned to random projects with complete strangers, and accomplish anything substantial in one measly weekend. I failed to see how this could be anything more than complete and utter chaos, but I was willing to give it a try.

There turned out to be quite a fair amount of chaos, but it was the kind of chaos caused by a high level of excitement and energy. Jon Stahl, Andrew Craze, Mark Schumann, and the rest of the organizing crew did a fantastic job of herding cats and keeping the chaos (barely) under control. I want to thank everyone who was involved with organizing the event. I don’t know how they pulled it off, but the entire weekend was surprisingly well-run. There were a few minor hiccups here and there, but there weren’t any crises. Since I was rather dubious going in, I wanted to share my experiences as a developer at GiveCamp in case it would help someone else who is thinking about participating for the first time.

This event took place at LeanDog, but there were too many projects and volunteers to fit on their boat. Fortunately, the people at Burke Lakefront Airport (which is right next door) were kind enough to allow us to use their facility for the weekend. I arrived at the boat a little before 5:00 on Friday and was informed that I was tentatively assigned to the Cleveland Tenants Organization (CTO) team. Since this was a completely volunteer event, the organizers had no way of knowing how many volunteers would actually show up. Many of the non-profits had been put on stand-by and had only been notified at the last minute that their project had been green-lighted. As a result, many things were a bit tentative as the event started up. I had some time to kill before the official kick-off meeting, so I milled around and chatted with some friends.

After the kick-off meeting they started organizing the teams. My name was called for the Cleveland Tenants Organization team, as expected. I met up with the rest of my team, and we headed off to dinner. Just as we were walking away I heard my name called again. I went back to check and, indeed, I had been assigned to two teams. Whoops! I was told to just find a way to work it out. As it turned out, a representative from the second non-profit couldn’t be located, so I caught up with the other members of CTO.

Over dinner we began discussing the details of the project. Like most of the other GiveCamp projects, our non-profit had an existing website which was a bit dated and hard to maintain, so our goal was to provide them with a more modern-looking and easier-to-maintain site. We quickly ran into a snag getting access to their existing site. We had FTP access, but no administrative access. After a few calls, text messages, and emails to various CTO employees, we decided to just set up a new account with a hosting provider. This worked out fine as it allowed their existing site to remain up and untouched while we worked, and it gave them the flexibility to flip the switch to the new site whenever they were ready. However, this is something I think could be improved upon for future GiveCamps, i.e. ensuring each non-profit representative brings with them all necessary information to access existing web hosting accounts. I’m sure an effort was made, but I don’t think all the reps fully understood what might be needed. Scrambling around to get this information can seriously delay a project.

Then we had to decide which development platform to use. Their existing site was static HTML that had been written with FrontPage. We discussed a few options, and then I went to the first stand-up meeting to report our status and hear how the other teams were doing. At the stand-up I learned that most of the teams were using WordPress, which is one of the platforms we had been considering. When I reported this to my team we decided to follow that lead, though no one on our team had any WordPress experience. None of us had enough knowledge to know if it was a good choice or not, but since everyone else seemed to be using it, it seemed like a good option. (In retrospect, I’m not sure it was.)

After we decided on WordPress, the next task was to come up with a basic layout for the site, so we began by browsing the plethora of free themes available. As we were scrolling through the various options, our representative asked a very simple question, “Are there any themes that don’t look like a blog?” It turns out, not really. Eventually we settled on a basic theme and then began working on customizing it. That was about as far as we got Friday evening.

Saturday was spent learning WordPress, figuring out how to make it not look like a blog, and then uploading content. Our team did a great job. Surprisingly, I didn’t end up doing a lot of development work. I helped out Saturday morning learning how to configure WordPress, but it seemed like most of my time was spent helping out in other ways. I reported for our team at the stand-up meetings, which were every few hours; helped secure some outside help from some WordPress gurus and a designer; provided Internet access with my phone’s WiFi hot spot because the wireless connection at Burke was overloaded; and various other miscellaneous things. I have to mention here the wonderful WordPress assistance we received from Heidi Cool. She really helped us out a lot. Thanks Heidi!

At Sunday morning’s stand-up, it was clear there were a few teams that were struggling. Our team had things well under control, so I decided to free myself up to help out. I left the calm, cool confines of the airport and headed over to the boat to see if I could lend a hand. Wow! The environment was quite different over there. It was loud, a little warm and a bit crazy. First, I jumped in and helped one team with some busy work breaking some long pages into shorter ones. But later I and several others were recruited to help out with another project. It was around this time that whole event seemed to find another gear. We were coming down to the last few hours and many people were coming off finished projects and jumping in to help others. The boat was buzzing with activity and it was kind of fun to watch. In some cases I think the extra push helped, but for the most part I think we only confirmed The Mythical Man-Month theory. Lesson learned.

In the end, I am amazed at what got accomplished in just one weekend. I think all but one of the projects were completed. That’s just incredible. All of the sites looked very nice and some were quite impressive. I’m happy I was able to participate is such a great event, and I will definitely be back next year.

Additional thoughts:

Something that I think would have helped out many of the teams would have been for the organizers to send out a message a month or so in advance saying something like “Just to give you a heads up, most GiveCamp projects end up being WordPress sites. So if you’ve never used WordPress, you might want to take a look at it before the event.” It would have been a big help for me. I’m not sure if all GiveCamps are so dominated by WordPress, but this one certainly was.

The spirit of GiveCamp is to spend the whole weekend on site, work until the wee hours of the morning and literally camp out, getting minimal amounts of sleep. While that certainly could be fun, I opted to go home at night. And as it turns out, so did the majority of volunteers. Our team, and many of the others, called it a day between 11:00 and midnight, and resumed between 8:00 and 9:00 the next morning. So don’t feel like you have to do the camp out thing if you don’t want to.

On Saturday, I really started to question whether WordPress was a good choice for what we were trying to do. I think WordPress is a great tool for what it’s intended for, but it’s intended for making blogs not web sites. I’m really not sure why this seems to be the tool of choice for events like this. It is easy to use, administer, and add content, but we had to fight with it a lot to make it not look like a blog. I’m sure it’s easy to do for a WordPress guru, but for people that have never used the tool before, there’s a lot of obscure tweaking that has to be done. I wonder if tools like Drupal and Joomla wouldn’t be better choices, since they start off with the assumption that you’re making a web site instead of a blog. I’ve heard WordPress 3.0 addresses this, so maybe it’s a better choice now. In any event, we went ahead with it. I think the final result ended up being pretty good, nonetheless.

GiveCamp will wear you out; it’s a pretty intense weekend. I strongly recommend planning ahead and taking the following Monday off. I did and it helped a lot, but it still took a couple days before I felt normal again.

It seems that every GiveCamp has a shortage of non-developer talent, e.g. designers, DBAs, copywriters, testers, etc. We need to work on recruiting these talents in the future.

I definitely plan on making the Cleveland GiveCamp an annual event. I’m also considering going to other GiveCamps in my region. Unfortunately, the next closest is in Columbus and seems to happen right around the same time. This year the Columbus event was the weekend before. Doing GiveCamps in back-to-back weekends is insane, and so is Greg Malcolm for doing it. 😉 It’d be nice if these events could be spread out a bit.

At the opening, a representative from each non-profit talked about their organization. The organizers told us that at the closing they wanted someone else from the team to do the final presentation. They wanted someone who had worked on the project to talk about what they had done. While I like the sentiment, I’m not sure it works in practice. Many of the non-profit representative usurped the final presentation because they really wanted to talk about what a fantastic job their team had done for them. And, I think that was a good thing. It felt really good to hear them talk about how much they appreciated all the work and how the site was going to help out their organization, either by saving them money or helping get their message out. So I say, let the reps do the final presentation.