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).

History of Microsoft SharePoint

The Microsoft SharePoint team put together a very good blog post detailing the history of SharePoint.  They posted it on Monday, October 5, 2009, just a couple of weeks before the big SharePoint 2010 announcements they’ll be making at the SharePoint Conference.

SharePoint2001Box

My own history with SharePoint, going back to a proof of concept I did with SharePoint Portal Server 2001, isn’t nearly as happy as they describe.  What I do remember from eight years ago, was some of the very odd UI that it had.  (I think this stemmed from SharePoint’s data storage being based on Exchange.) If I remember right, you had a drive in Windows Explorer that exposed documents and other related bits, much like Exchange’s M drive.

I did love the idea of the search engine in SharePoint from 2001.  We pointed it to our internal file servers, Exchange, and some external websites and I was constantly amazed about having search results from all of these sources in one screen.  SharePoint 2007 still has this ability and I think this is still a great way to promote adoption of SharePoint within an organization.

IE 8 warning message for pages with both HTTP and HTTPS content

After doing a clean install on my laptop using Windows 7 RTM, I found that IE8 was constantly showing me the following error message:

“Do you want to view only the webpage content that was delivered securely?”

I remembered this from the first time I installed IE8 and I had forgotten how to get rid of it.  (Trivia note: with IE8 Beta, clicking “Yes” would allow you to see the content, with IE8 RC and RTM, clicking “No” does….)

Well, after a quick search, I found this post that fully explains what’s going on and how to fix it:

http://blog.httpwatch.com/2009/04/23/fixing-the-ie-8-warning-do-you-want-to-view-only-the-webpage-content-that-was-delivered-securely/

SharePoint in plain English

This is a very cool video, describing SharePoint’s collaboration strengths.


SharePoint in Plain English

Windows 7 taskbar: recent documents

Here’s another cool new feature of Windows 7, in the task bar.  If you have an application that opens files like, Microsoft Word, when you right click on the application icon, you’ll see a list of recently opened documents.  You can also pin particular documents there.

win7_ff_taskbar_10 (Thanks to Paul Thurrott’s article here: http://www.winsupersite.com/win7/ff_taskbar.asp)

I’ve pinned my most common apps in the taskbar, much like Mac OSX’s dock, and it’s growing on me.  At first, I thought of the taskbar as cluttered, but after using it for a few weeks like, I’ve found that I’m launching those apps faster than if I was digging into the start menu.

Also, I’ve found that I really like having the apps pinned in the same location in taskbar, instead of just the order that they were launched.  I’ve always launched Outlook first and I’m used to having it on the left side of my taskbar.  It would always annoy me whenever I had to relaunch Outlook while other apps were already open, because it would then appear somewhere in the middle or right.  I went so far as to look into utilities that would set the order of windows in the taskbar under XP.  I don’t have to worry about such things with Windows 7!

Forms Based Authentication and Active Directory

I recently had to configure Forms Based Authentication for our website (in my case SharePoint, but the same would apply to a plain ASP.NET website) and I wanted to configure it to use Active Directory for the account storage.  Our website is going to be accessed at the corporate office, using Windows Integrated Authentication and we’ve set up a separate website pointing to the same content for our extranet users.  Both corporate and extranet accounts are going to be stored in AD.

Just for review, FBA uses different providers for different pieces of functionality.  The membership provider gives you user accounts.  For groups, you’ll need a Role Provider.  The third piece can be a profile provider.

The first step I did was to configure the membership provider for Active Directory.  There are plenty of examples on the net, so I won’t cover it again here.  (Microsoft’s documentation is here.)  I got that working fine, so I moved on to the next step, configuring a role provider.

What I soon discovered was that Microsoft doesn’t provide an AD role provider. If you want to pull back group membership, you’ll have to either buy a 3rd party provider, grab an open source one, or build your own. I was pretty skeptical (and am still thinking I must be missing something), but as of January of this year I couldn’t find an MS role provider for AD.

Skeptical

SO, I used this one: http://www.codeproject.com/KB/aspnet/active_directory_roles.aspx

It’s worked well so far.  This provider also has the ability to use a SQL database to cache a user’s roles.  They did this after finding that SQL can provide a faster response than AD.

Next month we are going to stress test our application, and I’ll find out how much of a difference the SQL caching makes.

Clearing saved passwords in IE6 and Windows XP

I’m building out a Windows SharePoint Services 3.0 (SharePoint 2007) site for my client.  The site uses two different methods of authentication, one for intranet users and one for extranet users.

The intranet users will be logging onto their workstations using their corporate domain based username and password.  We have one Url in SharePoint for these users, which is set to the out of the box Windows authentication.  When the user goes to this Url, IE6 is set to send the credentials to the site, so the user should never be prompted to enter their name/password.

The workstations that our extranet users have are configured to be more like a kiosk than a traditional Windows desktop.  After their machine boots, it automatically logs onto the domain using a generic account (the account is not tied to just one user).  Since the Windows user account that they logged onto  the machine is different than their own user account (also domain based), they are challenged for a name and password.  We decided to use a web form to log them to avoid the ugly Windows auth dialog, giving them a better user experience.  We used Microsoft’s Active Directory membership provider, and then borrowed/built our own AD role provider, both of which work well.

So, when we started testing, we created some test accounts and gave the test accounts access to the site. These test accounts simulate the different roles that people will have, so our testers needed to be able to log in with different accounts.  Since we didn’t give their normal accounts access, IE (IE6 on Windows XP in our case) would display the ugly Windows authentication dialog, the users would enter the test account username/password and then click the “remember password” checkbox before clicking ok.  We instructed our users to save their passwords because of a certain bit of functionality that required this – that’s another blog post.

Well, after testing, we’re finally ready to have them access the site using their account.  We gave their account access, set this website to be in their IE’s intranet security zone, and told them to go to the site.  The users that had helped out with testing were still being prompted for a username/password, while users that didn’t do the testing were not prompted.

To fix this, we tried clearing the IE cache, which didn’t work.  We then cleared anything and everything that IE allows you to clear in the Internet Options window.  None of that worked.

So after searching on the net, I found this: http://www.tech-archive.net/Archive/Windows/microsoft.public.windows.inetexplorer.ie6.setup/2005-12/msg00067.html

The following method will clear the credentials already cached in Windows
XP joins a workgroup:
1. Open Control Panel and go into User Accounts.
2. Select the account and then choose "Manage my network passwords".
3. A "Store User Names and Passwords" dialog will appear.
4. Click Remove button to clear any passwords (for the affected sites.)

After doing this on the users’ workstations, they were able to navigate to the site without entering any username and password in IE – success at last!

Copy progress in Windows 7 taskbar

Here’s another cool feature in Windows 7 – when you copy files, not only does the copy dialog show your progress, but so does the icon in the taskbar.  This is great for longer running copy tasks.  I can let that run in the background, and glance down at the taskbar to see the status.

CopyIconPicture courtesy of: http://www.ditii.com/2009/01/30/windows-7-pin-explorer-as-progress-bar-on-taskbar/

Best new Windows 7 feature – Aero Snap

Some people probably won’t agree with me, but I think the best new feature in Windows 7 is Aero Snap.  Aero snap allows you to drag a window to either the top or the sides of the screen and have the window automatically resize.  If you drag it to either side, it will resize to half the screen – dragging it to the top maximizes the window.

AeroSnapThe picture above shows what happens to the windows when you drag the first window the left, and then the other to the right.

I use this a lot for file copying now.  I also hardly use the maximize button anymore – preferring instead to just drag the window to the top of the screen.

Central Ohio Day of .Net – 2009

I attended the Central Ohio Day of .NET (CODON) a few weeks ago and had a great time.

I attended Josh Holmes keynote first thing.  Josh focused on simplicity and how we should keep that in mind when building solutions.  I liked the content and I thought Josh did a good job of delivering it. Josh Holmes presenting the keynote

Jeff Blankenburg presentingI then attended Jeff Blankenburg’s CSS talk.   Jeff did a really good intro to CSS by showing several of the most common layout samples that you see on the net.

 

Leon Gersing giving his JavaScript is Awesome talkAfter Jeff’s, I saw Leon Gersing’s “JavaScript is Awesome” talk.  Leon is not only very entertaining (at least I think so), he’s also off the charts knowledgeable about whatever I’ve seen him discussing.  This was the third time I’ve seen Leon present and he’s always given me something to think about.  This time it was the RIA (rich internet application) and what it should be built with.  JavaScript, Flash, or Silverlight.   When I was first looking into back in 2002, I was leaning toward Flash, given the richness of the platform.  However, JavaScript has come a long way with all of the libraries available now.  I’m torn about Silverlight – I like the idea of taking advantage of my .Net experience, but I’m not sold on it.

After lunch, I went to David Giard’s talk on Microsoft’s new Distributed Cache technology.  David is a fellow Sogetian and he was fearless in his demos.  He actually uninstalled the bits he needed at one point, and he said that he had never done that before.  It worked, but I would never have been able to do that if I was presenting!

The technology that David was presenting was pretty cool.  I’m looking forward to putting it to work in place of traditional ASP.NET Session.Chris Poteet

I then attended Rick Kierner’s SharePoint talk.  I’ve been doing SharePoint development/administration for a while now, so I went looking for the arguments as to why a developer should want to use SharePoint.  Unfortunately for me, Rick’s talk was aimed at getting devs who had never used SharePoint, better acquainted with VSeWSS (Visual Studio Extensions for Windows SharePoint Services).  However, this seemed the appropriate level for the audience that was there.

For the final breakout session, I went to Josh Holmes and Chris Poteet’s talk on Designing for the User.  Sessions like this one are great to attend.  They made some really good points about UI design and user experience that I think a lot of us forget.  Josh told this great anecdote about bank tellers and the point was devs may believe that a new solution is going to be great, but if we interrupt the end users’ workflow in a negative way, we may actually be doing more harm than good.  (The bank tellers in his story went from being able to process a deposit in seconds to taking over a minute per one – which meant longer lines at the bank and frustrated customers and tellers!)  Chris also told a good story about an upscale hotel in Dubai and how his experience was radically different than one might expect.

 

I was glad to see several people from Sogeti were there.  I think there was probably about a dozen of us from Columbus and Cincinnati, plus I think there might have been a few from Detroit.

Anyway, CODODN was a great day and it’s amazing that this whole thing is put together by volunteers!

(The photos on this page are courtesy of David Giard.  He put a whole album of photos up here: http://www.flickr.com/photos/29942169@N08/sets/72157617123586782/)

SharePoint Central Administration Website – javascript errors

I ran into an issue with my SharePoint Central Administration website recently.  This was in a my development Virtual PC, using IE7.

Central_Administration

I would open the SCAW which appeared to be fine, but some of the functionality wasn’t working.  I’d click on certain buttons and nothing would happen.  I then noticed that IE was reporting javascript errors.

I tried using FireFox.  Some of the errors that I saw in IE weren’t in FireFox, but some of SCAW (usually popups) didn’t work.

Rather try to figure out what I did (I’m assuming that I did something that caused this), I decided to remove the Central Admin site and reinstall it.  SO, I used the wizard to remove and then used the wizard to install a fresh SCAW site, which worked fine.

IE 8 released today

Microsoft released the new version of IE today, IE 8.  I used the Beta last fall (bad), and then the RC they released in January (much better), and I installed the final release tonight.

I haven’t seen much difference yet (from the RC version) but I’ll post anything interesting I see.

The link to download it is here: http://www.microsoft.com/windows/internet-explorer/default.aspx

Central Ohio Day of .Net – April 2009 – Registration Open

CentralOhioDoDNLogo_small

Registration for this year’s Central Ohio Day of .Net is now open: https://www.clicktoattend.com/invitation.aspx?code=136826

It is being held in the same place that it was last year, at the Roberts Centre in Wilmington, Ohio.

I went to last year’s event and the content, facilities, day were all great.

This is how we do it…series

I’ve decided to write a series of blog posts about how I use technology around the house.  Things like how I’ve set up my home network, how I’ve set up computers for my seven and four year olds, how I’ve set up my media players, etc.  Basically, how I’ve organized my digital life.

I’ve read posts over the years with helpful tips and this is my way of paying back.