Can’t eject external USB or Firewire drive in Windows 7

As a SharePoint developer, I work a lot with Virtual Machines (presently using Windows Virtual PC, with Windows 7).  I’m using these VMs with my laptop, and in order to get better performance, I’ve moved them to external hard drives.  (These drives have faster RPMs, larger caches, and a larger capacity, than the internal drive.)  I have one large external drive at home, another similar drive at the office, and a small, slow portable drive that I carry with me.

Office Space file copy screen capture

So, at the end of each day at the office, I copy the files from the external drive to my portable drive and then once I get home, I copy them from the portable to the larger external drive I leave at home.  I do this for a couple of reasons: so I can work at home and secondly, so I have backup copies.  (Often, I feel like I’m in the movie “Office Space” when copying the files before I leave the office).

Anyway, after the files are copied, I safely eject the external drives, and then hibernate my laptop.  I’ve been doing this for over a year now, but within the last couple of months I started to have issues disconnecting the drives.  Intermittently, some application/process would have a lock on some file on the drive that would keep Windows from safely ejecting it.

After looking into it, I found that it was actually the Windows search service that was accessing the drive! Since I wasn’t using Windows search to look for stuff on these drives, I removed them as locations to index.

To do this in Windows 7, you need to go to Indexing Options (just type “Indexing” into the search box in the Start menu…).  One of the choices displayed will then be Indexing Options, so click on it and you should then see a window similar to this:Indexing Options Windows 7

 

Click on the Modify button and you’ll see this window:

Indexing Locations Windows 7Notice the different drives listed above.  My “FreeAgent XTreme (F:)” drive was checked for some reason, which was causing the indexing service to scan the drive looking for new files to make available in the search results.  Ever since I unchecked this box, I’ve been able to safely eject the drive.

9 years of having a cell phone…

…or an excuse to write about my cool new phone.

I got a new phone this past week.  One which I think is really cool, but before I talk about it, I want stroll through the previous cell phones I’ve owned.

Almost nine years ago, my wife and I bought a pair of cell phones.  These were our first phones, and the excuse to get them was that my wife was pregnant with our first child at the time.  We thought it might be useful to have cell phones so she could get a hold of me if or when something was up.

The phones were pretty minimal – some Motorola cheap phone from Verizon that I can’t even find a photo of on the net now.  They were really reliable and Verizon’s network is really good here in central Ohio, except for one area – our house.  We hardly get a signal and if we do get a call started, it usually drops out.

A few years later, after I had gotten into .Net development, it was time to get new phones.  My wife wanted something smaller and I wanted something I could write .Net apps for.  After some searching, I got an Audiovox Thera on closeout from Tiger Direct.advxthera

The Thera was a Windows PocketPC phone, running PocketPC 2002.  I could load the .Net Compact Framework v1.0 on it and build apps.  I could also sync the calendar/contacts to 1194937my Mac using Missing Sync.  It didn’t have a data plan, but that was alright.

It was a good PocketPC, but a horrible phone.  It was hard to dial without looking at the screen, because there were no buttons to feel – just the flat screen.  Talking on the phone was difficult without the wired ear plug, because it would act like a speaker phone.

I built an app that I used to track my gas mileage, but that was about it.  I lived with it for about three years before upgrading to my next phone.

  Samsung_i730

My next phone was a used Samsung i730.  A couple of the guys at work at these phones and I thought they were pretty good.  It had built in WiFi, blue tooth, a slide out keyboard, and most importantly, ran Windows Mobile 5, so I was able to build apps for it.  Again, the only one I built was an upgraded version of my gas mileage tracker.

These phones are now considered pretty thick and they have an antique looking antenna that can slide out even further.  The keyboard is pretty small and so is the screen.

So, fast forward another three years and I get a promotion at work.  More importantly, I get a promotion at work and now work is going to pay my cell phone bill! So, now I am the proud new owner of an HTC Touch Pro 2 on T-Mobile.

touchpro2-htc-per02It arrived last week and I am really impressed. It is running Windows Mobile 6.5 with a touch interface.  It has 3G and WiFi and most importantly – I have a good cell signal at my house!  It don’t have 3G coverage, but it does have edge at my house, which doesn’t matter too much since I can use my wifi connection instead.

It’s got a camera which can take both still and videos.  It has GPS and Google maps.  It has the weather.  It has a Bing app, with maps, gas prices, search.  All very cool stuff.

Having the data plan has really opened up what I can do with the phone.  I’ve got it configured to connect to my work email and Gmail, as well as Facebook and Twitter.

I’m looking forward to using it when I travel too.  At some point, I’ll also get to write another gas mileage app….

HTC-Touch-Pro2-from-T-Mobile-USA-3

What’s up with these ads?

I’ve started to notice particular ads on Facebook and MSNBC.  It’s just some random mug shot photo with text around it, but I started to notice the same weird faces showing up on different sites for different topics.  Here’s a couple of examples:

 

FacebookAd1 FacebookAd2facebookad3facebookad4

After Googling about these ads, I found that apparently ClassesUSA is ripping off the ads from LowerMyBills.  I find that really funny, since I think the ads are awful. 

Apparently, I’m not the first to notice how bad these ads are: http://kidicarus222.blogspot.com/2009/12/refinance-your-home-or-rot-in-street.html

SharePoint 2007: “Failed to extract the cab file in the solution.” when trying to perform addsolution

I ran into an error today, while trying to execute the following: stsadm –o addsolution mySolution.wsp .  The error was “Failed to extract the cab file in the solution.”

A quick search found blog entries stating that either a file in the WSP contained an illegal character or two files were named the same.  I looked through my files and found a couple of graphics files with names containing a parenthesis.  Since all of my file names were unique, which ruled out the one suggestion, I decided to try renaming the files, leaving out the parentheses.

After renaming them, I retried my stsadm command and it worked fine. (“Operation completed successfully.”)

One thing to note: I had manually deployed these same graphic files to a SharePoint library using Designer without any issues.  I guess the solution deployment must be more particular (or maybe Designer handles the name differently).

Apple iPad: Out of this world hit or colossal failure?

apple-ipad-6

As someone who loves technology, I was very interested in the Apple announcement this past week.  I read some of the live blogging during Steve’s presentation and have read some of the pundit blogs in the last few days.  Most of the reactions I’ve seen are either: Apple hit it out of the ballpark (see Apple ][, Mac Plus, original iMac, iPod, iPhone) or Apple just delivered another dud (see Apple Lisa, first Mac laptop, 20th Anniversary Mac, Mac Cube, Apple TV). So which is it?

I think the iPad will be successful in certain scenarios, but first let’s rule out where the iPad doesn’t make sense. iPads won’t be used in the enterprise.  The form factor doesn’t make sense for typical office functions for extended periods of time (the occasional document editing on weekends might happen).  Plus, enterprise IT only likes devices that can be centrally managed and Apple has a history of not playing well in this space.

I also don’t think it’ll be a laptop replacement.  As the laptop has replaced the desktop, it is now the main computing device.  It’s the thing that we attach our devices to (printers, scanners, extra storage, etc), the thing that we use at the office and the home to get work done.  The iPad won’t replace the laptop for any of these scenarios.ipad-apple-large

The iPad can serve the casual computing niche extremely well.  What do I mean by casual computing?  For me, it’s the time that I spend with the laptop surfing and reading my RSS feeds in my family room with the tv on in the background.  It’s for the times when I need a trivia question answered (like when we need to find out where we’ve seen that actor before via IMDB.com).  Or during the sixteen hour drive to Disney World, when the kids want to watch a movie.

One thing I would need for vacations, would be the ability to get photos off the camera and onto the iPad, so I could then post them to the net.  (I like to get copies of my photos onto Google photos just in case something would happen to my camera before I got home.)Lenovo-IdeaPad-U1-Hybrid-Notebook-Slate-Tablet-Combo-screen

So when am I going to get one? Eh, I’m not.  The price is just too high for me to drop on a casual device. I’ll continue to use my laptop for both work and some casual.  Our desktop (a Mac Mini) will still be the main computer in the house, with our finance, photos, and music.

If I was going to spend money on a new device, I think a better fit would be something like the Lenovo IdeaPad.  It was announced at CES this year.  It’s a small laptop, with a detachable screen.  When the screen detaches, it changes from a Windows based machine to a custom Linux machine, with functionality like that of the iPad. For just under $1,000 you get two computers in one.

Only time will tell if the iPad is deemed a success. I’ll be looking back at this post in a couple of years to see how things actually turned out compared with how I think today….

SharePoint Site tab appears when user doesn’t have permission to the site

We have a rather simple WSS portal that has about six sites, shown using the standard navbar (“tabs”) across the top of the page.  This navbar is shared among all of the sites.  Each subsite has different permissions, mostly giving certain users some level of edit permission on those subsites.

Well, one of the sites has some out of the box Content Editor webparts and we wanted to allow a group of users to edit the content using these web parts.  They already had contribute permission, so they could upload documents into libraries.  However, they couldn’t edit the content because they didn’t have the edit page permission.

So, I created a new role with the “Add and Edit Pages…” permission (one of the SharePoint granular permissions you can grant) and then I granted our Editors group this role/permission.  When I logged in as an editor, I was surprised to see a tab appear in the navbar that should only be accessible by IT Administrators (it’s an “Admin” site that has some pages that IT can use to manage the portal).  When I clicked on it, I got the standard SharePoint access denied page.  However, we didn’t even want our users to see this tab.1_1

After some research, I found that the edit page permission grants users the ability to see all links, so they can edit them, even if they don’t have access to the pages that those links point to.  This makes sense, but it’s not the behavior that we were looking for!

SO, I went back to the drawing board and created a new web part that could be edited without relying on the edit page permission.  I showed it to our main editor today for the first time and she was thrilled.  She thinks the new part is much easier to use, because there is a simple edit button (that only editors can see) that then toggles the web part into edit mode. When she’s done, she just clicks a save (or cancel) button, which saves the changes and puts the web part back into display mode. 1

 2

Using the out of the box content editor webpart, she would have to put the page into edit mode, select edit from the web part’s menu, find the edit HTML button on the web part properties panel, make the changes, click save in the web part, click ok in the properties panel, and exit edit page mode.  Whew. (Here’s the screens:)

4 

35

In the end, this redesign worked out.

Goals for 2010

So Brian Jackett tagged me in his blog post, suggesting that I post some goals for 2010.  Like Brian, I have a formal goal document at work for professional goals.  Unlike Brian, I’m not nearly as ambitious with my goals.

Professional

I used to have a huge list of technologies that I wanted to learn. After a few years of having that same list, I’ve finally gotten more realistic about what I can accomplish in a year.  This year, I’m going to focus on:

  • SharePoint 2007 Development -- I've scheduled my exam (WSS dev 70-541), which is an exam I've had on my list for a few years now. If I can pass it, I'll have passed all four of the SharePoint 2007 exams.
  • Windows Server 2008 – The first Microsoft exams that I took were for Windows 2000.  At the time (October 2000), I was going to try to get the MCSE certification.  I think it was something like seven tests at the time.  I took the first three, but failed the fourth (I think it was 70-219).  I took the MCSA beta exam and passed that, but didn’t take any more.  (By that point in my career, I had moved onto development roles.)  SOO, this year, I want to get back into Windows Server, and Active Directory in particular.
  • SharePoint 2010 – Like every other SharePoint person, I’ll need to dive into 2010 sometime soon.

There are other technologies that I’m curious about: Ruby, ASP.NET MVC, Google’s Android, and probably others that don’t come readily to mind.  These don’t make my list because I’m prioritizing topics that I can see myself using on billable projects.

Personal

My biggest personal goal is to move my family to North Carolina.  Moving south is an idea that we’ve kicked around for years and last year we finally decided to get serious about it.  Our timing couldn’t be better as a home buyer, however, since we need to sell our home in Columbus, our timing couldn’t be worse.

This goal is going to require so much time and energy (with getting our house ready to sell, finding a place to live in Charlotte, moving, settling in – oh boy), that I’m not going to list any others.

Activation errors when installing Office 2010 Beta

microsoft-office-2010-logo-300x193

I decided to replace my Office 2010 Technical Preview with the Beta, which was released in November and I ran into an error with activation.  Since I didn’t see this really documented on the net (it probably is, but I couldn’t find it), I decided to write up my experience.

When I first tried to install the beta, I got an error saying that I had to first uninstall the technical preview.  Ok, no problem.

After uninstalling the tech preview, I installed the beta.  It never prompted me for a license key and everything seemed to go fine, until I fired up Outlook for the first time.  When I did, Outlook came up like normal, but I got a message saying that I needed to activate.  I searched and found this: http://www.microsoft.com/office/2010/en/activation.aspx . This page explains that you need to enter a new license key.

After clicking the Change Activation Code button, I got this message in another dialog: “The setup controller has encountered a problem during install. Please review the log files for further information on the error." Ugh.

I searched and found some odd references to a “Office Setup Controller” folder in the C:\Program Files\Common Files\Microsoft Shared\OFFICE12 and how I should move it to my desktop.  This fix didn’t work for me.

SO, what finally did work?  I uninstalled Office 2010.  Downloaded a fresh copy of the beta (the file downloaded was named ProfessionalPlus.exe), installed it, ran Outlook – got the same activation dialog and the same controller error.  Ran the ProfessionalPlus.exe again and this time it allowed me to enter a license key.

AND THEN, when I fired up Outlook, it asked me to activate online – which I did.  It works fine now.

I’m thinking this is all due to these installers being “beta”, but what a pain to get an otherwise very stable/usable version of Office running.

Virtual PC in Windows 7 – fonts look bad?

After installing Windows 7 and learning how to use the new Virtual PC, I noticed something odd with the way fonts were occasionally displayed in Visual Studio.  It took some testing, but I figured out that if I ‘Enabled Integration Features’ with VPC, then ClearType wouldn’t be enabled.  It would look like this:

ClearTypeNotEnabled

With integration features disabled, it looked like this:

ClearTypeEnabled

These screen shots don’t show how different the two look when you’re actually using it.  The most noticeable piece is the ‘W’ in the where clause.

I left this alone for several months, but recently decided to try and figure it out.  (I thought maybe I had a beta version of the integration features or something).  Searching the net, I found this discussion thread, confirming my suspicion, and it offered a solution:

http://social.technet.microsoft.com/Forums/en/w7itprovirt/thread/7ccc8c6f-7580-4c2d-97e1-5ecbfefe47fe

ClearType in Remote Desktop with XP
http://www.ytechie.com/2008/12/cleartype-in-remote-desktop-with-xp.html
If you want ClearType over RDP with XP SP3 (sorry, only SP3+), add the following registry key:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations]
"AllowFontAntiAlias"=dword:00000001

Even though my guest OS is Windows 2003, I thought I’d try it anyway. After changing the registry, rebooting the VPC, and logging in using the integration features – fonts looked the same.  So much for that fix.

I’m hoping that Microsoft comes up with a fix for this.  Windows Virtual PC seems to have taken one step forward and two steps back from Virtual PC 2007.  It does appear to have  better network performance, but the integration feature UI is poorly designed and buggy.  The management console is just a custom folder view, which is jarringly different from the previous version (who thought a custom folder view could be a proper management console?).  Plus, there still is no x64 guest capability, which is going to be required by SharePoint 2010 developers.

SharePoint 2007: The template you have chosen is invalid or cannot be found

I ran into an error at work recently when I went to deploy my new SharePoint site, which was a site definition inside a SharePoint solution file.

I was deploying the site to our build server.  I added the WSP to the farm, deployed it to the web app, and then went to create the new site based on my template.  However, I got an error almost immediately, after clicking create.  The error was “The template you have chosen is invalid or cannot be found”.  I check to make sure that the solution had been deployed and even checked that the files were in the 12hive.  Ok, good there.

I retracted/deleted the solution and redeployed.  No luck.

So, I went back to my dev environment, removed the solution, and followed the same steps I did on the build server – no error. Huh?  I turned to Google and amongst the noise, I luckily found this blog post: http://blogs.edwardwilde.com/2009/02/15/the-template-you-have-chosen-is-invalid-or-cannot-be-found/.

At that point, I remembered that another developer on my team had recently deployed a new site he is working on. (BTW – he has a great blog: http://www.BrianTJackett.com ) Well, since we hadn’t installed each other’s sites onto our local dev environments (Virtual PCs running locally on our laptops), we didn’t notice that we had both picked the same  Template ID.  This ID is located in the WEBTEMPsitename.xml file, like this:

<?xml version="1.0" encoding="utf-8" ?>
<!-- _lcid="1033" _version="12.0.4518" _dal="1" -->
<!-- _LocalBinding -->
<Templates xmlns:ows="Microsoft SharePoint">
  <Template Name="PortalAdministration" ID="11006">
    <Configuration ID="1"
    Title="Portal Administration"
    Hidden="FALSE"
    ImageUrl="/_layouts/images/stsprev.png"
    Description="Custom site definition for Portal Administration"
    DisplayCategory="Admin Sites">
    </Configuration>
  </Template>
</Templates>

We did this because after searching the sites we had already created, this number was the next on in the sequence.

Once I had discovered all of this, the fix went pretty quick: change the ID, rebuild the WSP, redeploy and voila!  The new site created just fine.

Simplifying your tech life, step 1: declutter your computer

I’ve been building my own machines for a while now and I’ve gotten into a routine of installing certain apps when I do I rebuild.  I’ll not only grab the latest Microsoft updates, plus Office, but I’ll also install a whole list of utilities.  This list keeps growing and was often something like the following:

  • PDF reader (I go back and forth between FoxIt Reader and Adobe)
  • FireFox and Chrome
  • Instant messengers (MSN, GoogleTalk, Skype)
  • Tweetdeck
  • Live Mesh
  • Some kind of free antivirus (Microsoft’s Security Essentials is my preferred one now)
  • iTunes/QuickTime
  • Windows Live apps (Live Writer is great – it’s what I’m using to write this blog)

I’m sure I’ve forgotten a few things, but anyone who has reinstalled their OS more than once or twice probably has a similar list.

Anyway, I was faced with rebuilding my main laptop for the third time this year (Windows 7 beta, RC, and RTM) and I decided to do something a little different, based on comments that Paul Thurrott has made in his Windows Weekly podcast with Leo Laporte.  Instead of installing a whole load of software, I would wait until I actually needed it and then install it.

So after a few months my new install was Win7 x64 Ultimate, Office 2010 (tech preview/beta), Skype, GoogleTalk,  Live Mesh, 7zip, Live Writer, etc.  For work, I really only needed Office, since my current work project is SharePoint development and it is contained inside a Virtual PC.

I noticed that apps that I had always installed previously, I didn’t this time.  The biggest difference?  I didn’t install another browser.  I was actually using IE8 (!) much to my surprise.  There was a time that I would never use IE, but IE8 is pretty good.  I did add the Delicious toolbar and also LastPass (really cool password keeper). But no FireFox and no Chrome and no Safari.  (In IE8, I’ve really gotten used to the Accelerators.)

I’ve been using FireFox since around version 0.3.X (? – before it was named FireFox) mainly because of tabbed browsing, but also because of the security holes in IE5/6.

So, next time you’re faced with rebuilding your computer, I’d suggest you take a look at the time and effort that goes into installing and maintaining all that software and maybe cut some of the clutter out.  Like me, you might be surprised at the results.

Cloud backup saves the day

I’ve had a rash of hard drive failures at home recently.  In one case, having a backup of the files in the cloud, saved me from losing 40 gigs of data.

The first hard drive that went bad was one that I was using with my Media Center PC.  I had repurposed an internal drive from my server by putting it into a USB drive enclosure.  Media Center was using it to store the recorded TV video files.  Since these files weren’t that critical, I wasn’t worried about backing them up.  When this drive failed, Media Center started using the other drive that was in the machine.MacMini

The other hard drive that failed was one that I had setup for use with our Mac Mini.  The drive was another external drive in a USB enclosure and I was using it for our iTunes library as well as the Time Machine backup.  mozylogoLuckily, I had setup Mozy to do backups on the Mac last spring.  Mozy is a service that allows you to backup files from your machine to their machines via the net.  The home version that I use ($5/month) is rather simple and pretty much just works.   (Mozy allowed me to backup the external hard drive, while Carbonite would only let me backup the first hard drive, for whatever reason.)

So, I bought a new hard drive (1TB/7200RPM/32MB cache --  from Micro Center for $84!) and put that in my server.  I then took two drives out of the server and passed them down to the other machines.

After I got the repurposed drive set up on my Mac, I went to Mozy and downloaded my files using their web restore.  I had to wait a couple of hours while they were gathering up the files I requested and zipped them up into .DMG files.  Each file was around 1.5 gigs, which made downloading the files a little easier (I didn’t have to worry about downloading 40 gigs via one file).  I then opened them on my Mac and copied the individual files from the .DMG to the new drive.  Pretty easy.

As a side note – when I pulled these bad drives out of their cases, I was surprised to note that both drives had 2006 manufacture dates.  These were from two different manufacturers too.  I’ve heard that the average age for a drive is three years, at least I heard this a few years ago, not sure if this was anecdotal or actual industry figures.

SQLBulkCopy versus standard INSERT statements

Part of my current project involves several batch processes that are run after normal working hours.  Most of these jobs are doing either one of two things: importing data from a text file or exporting data to a text file.  (Since my project is replacing an existing set of applications, we were required to maintain compatibility with the other systems that are sending or receiving data to or from us.) Our data is stored in a typical SQL Server 2005 database.

net_log_h_3We decided to use .Net based console applications that would be kicked off by my client’s ControlM.  For imports, ControlM moves the file from whatever system it is coming from, to our server and then executes our console app.  For exports, it does the opposite.

Anyway, most of our console apps finish within a few minutes but we had one that was taking over twenty-five minutes to complete.  This was within our acceptable range and we were testing on servers much less powerful than our production hardware, so we didn’t investigate how to make it quicker.

Fast forward a few months and we’ve moved our application to production.  Our batch jobs are all running, but we noticed that the job that was taking twenty-five minutes was now taking forty minutes typically, and a couple of days it took almost an hour.  At this point, we decided to look at the code again.

I had coded this app to load data basically using SQL INSERT statements for each row in the table.  Unlike the other batch applications which were loading hundreds of rows, this app was loading hundreds of thousands of rows.  Luckily, searching for a quicker solution turned up this article ( http://www.4guysfromrolla.com/articles/102109-1.aspx ) describing SQLBulkCopy, which was something that I had never seen before.

ADO.NET’s SQL Bulk Copy class gives us a way to much more efficiently load lots of data into our SQL database.  So, I reworked our app to use bulk copy and boy, did it work as advertised.  Our load times went from 40-60 minutes down to 40 seconds!  In fact, the first time I ran it, I thought something wasn’t working since it finished so quickly.

SharePoint ALCM: A real world example

For the past year, I’ve been working with a client that is in a very unusual position, at least one that has been rare in my career.  My client is an established business being spun off from their corporate parent, so they are starting up their IT department from scratch.  I had a similar experience almost a decade ago, when I joined an IT department right before a huge growth spurt in staff and responsibilities.

I was brought on board to help with their SharePoint portal initiative.  This included not only developing the SharePoint sites, but also helping to define the application lifecycle management for the portal.

First, here’s the technologies we used:

  • Windows Server 2003 R2
  • Windows SharePoint Services 3.0
  • Visual Studio 2008
  • WSP Builder
  • WSeVSS
  • SQL Server 2005
  • Visual Source Safe 2005

Some of these choices were made by other teams (Server 2003 and SQL 2005), but the rest my team got to decide.

We decided on the following environments:

Development

The development environment is set of VPCs running locally on the developers’ laptops.  It is two VPCs running Windows Server 2003.  One VPC is a domain controller and the other VPC is the actual SharePoint server.  The developer is completely responsible for and in control of this environment.

Build

The build environment is a typical development environment, including all of the development tools, plus SharePoint and SQL Server.  Build is intended to only be used and seen by the development team.

As the name suggests, the primary purpose of this environment is to build the code.  Since we’re doing SharePoint development, this means compiling the code and creating the SharePoint solution files (*.WSP’s).

The secondary purpose of this environment is integration testing.  The WSPs are installed and deployed on the build server.  This gives the development team an opportunity to check that the newly deployed WSP doesn’t negatively impact another developer’s code.  This same step could happen in the development environment, but for this project we didn’t take the time to continuously update all portions of our dev SharePoint sites.

Test

The test environment consists of two servers: a SharePoint Server and a separate SQL Server.  All code is migrated to test using WSP files by the development team.

The primary purpose of this environment is to give the IT testing team an environment to do their testing. Since the development team controls deployments to the Test environment, we’re able to react more quickly to issues raised by the testing team.

UAT

The UAT (User Acceptance Testing) environment consists of three servers: two SharePoint servers and a clustered SQL Server. 

UAT serves several purposes.  First, the development team does not have access to promote code to UAT.  Instead, the Windows Admin team takes responsibility for code migrations.  This forces the development team to document the code deployment procedures and allows the Admin team to practice them.

Second, since UAT has more than one web front end, it allows the code to be tested on an environment that more closely resembles the production setup.

Third, UAT is the primary testing environment for our business users.  By having a separate testing environment for IT testers and business testers, we’re able to avoid scheduling and data conflicts.  We’re also able to present a more stable environment to business, since the test environment is more fluid with code updates.

UAT is also serving another group of business users that we didn’t really anticipate early in the project, but we were able to accommodate anyway: training.  We were able to have a week of training without impacting our development team or our IT testers.

There is also at least one more important reason for UAT: it serves as an troubleshooting environment for any production issues that might arise.  Again, since it closely resembles prod, prod backups can be restored to the UAT servers for debugging without taking down the entire prod farm.  In an extreme disaster, it could also serve as a production farm while prod is rebuilt.

Production

Production is the actual environment used by end users (kinda obvious).  It consists of three SharePoint servers plus a clustered SQL Server.  Code is migrated by the Windows Admin team from the UAT environment.

At this point in the project, I do think these environments and the procedures we put in place are serving the client well. Of course, like any project, we have areas where we realize that we can improve.  Below is a list of some of our ideas for improvement:

Automate the build process

This is something that the team is starting to look into.  The client recently hired a strong developer who is familiar with Cruise Control.Net, so he is working to automate the code build and deployments.  This will greatly reduce or even eliminate the time a developer spends on the builds/deploys.  Also, like any automated process compared to a manual process, it will reduce build mistakes.

Separate the Active Directory domains

This is something that I haven’t mentioned up to this point.  Due to business requirements, we had to be able to authenticate users with both Windows Auth and Forms Based Authentication, with the user accounts stored in Active Directory.  Working with the Windows Admin team, we set up a Dev/Test AD domain and a UAT/Prod domain.  The prod domain was the only one that had a trust relationship to a domain owned by another company.  This relationship had to be tested, so we put UAT in the prod domain.

However, as we approached our prod date, it was decided that we couldn’t do certain things because the domain will be prod.  This started to reduce our ability to test certain scenarios.

What we should have done and what we may yet do, is create a UAT domain, with a “partner” domain that would mimic the real partner’s domain.

Change source control

A lot of developers will be surprised to read that the development team chose Visual Source Safe.  The client was already licensed for Source Safe (through their MSDN licenses) and the development team was familiar with Source Safe.  We didn’t have time to evaluate too many options for source control,  so in this case the team went with the devil we knew.  I think the development team will be looking into some flavor of Team Foundation Server in the next six months.

This project has been very interesting and I’m glad I got to do it.  My co-worker has written a few blog posts covering specific topics for this same project, so if you found this interesting, you may want to check out his blog as well.

Google’s Chrome Frame in Windows IE8 issues

GoogleChromeFrameI received an invitation to Google’s Wave yesterday (I have no idea why) and so I went immediately to go check it out.  One of the first things I ran into was the suggestion by Google that I install Chrome Frame, so I did.

I then accessed Google Wave fine, but didn’t really do too much.

Today, I noticed while doing my typical browsing (using multiple tabs in IE8) that when I’d close a TAB, it wouldn’t close.  It’d stay open for what seemed like minutes (I didn’t clock it) before finally closing.  Then I noticed that the other TABs were locked and I couldn’t scroll down until the TAB I had closed actually closed.

I didn’t think of it at first, but after a while I decided to disable the Chrome Frame add on.  Once I disabled it, my IE went back to normal.

I have a pretty plain installation right now after my rebuild last month.  I haven’t even taken the time to install FireFox or Chrome like I normally do and all of my work related stuff is contained within a Virtual PC (so no Visual Studio or similar tools installed on the base).