Thursday, April 16, 2009

Disable Loopback Checking on Windows Server 2003

I updated my Windows Server 2003 running on a VMware image with the lasted April 2009 updates from Microsoft this morning. The result was that none of my SharePoint sites worked afterwards. The solution for me and one of my colleagues turns out to be this old known issue
http://wcornwill.wordpress.com/2006/06/06/mapping-host-headers-causes-looping-windows-authentication/
and
http://www.sharepointblogs.com/george/archive/2009/04/16/error-401-connecting-to-local-iis-website-after-3-credential-prompts.aspx

I would only recommend to disable the Loopback checking for developing environments.

Disable Loopback Checking

  1. open regedit
  2. Find HKLM\System\CurrentControlSet\Control\Lsa
  3. Create a new DWORD value called DisableLoopbackCheck and give it a value of 1
  4. Restart the computer


Tuesday, April 14, 2009

Developers 10 Commandments for preventing errors

Over the years of programming, I have gone from a simple spaghetti developer to an object oriented, method mineralized, property loving, defensive coding and structure focused (spaghetti) developer. So what is the difference? When I think about it, my code may look like a spaghetti program today, for the untrained eye that is, because of object inheritance, events, properties and so forth. But it's much better organized than it was just 20 years ago. The big advantage is that it is much easier to spot and avoid errors than in the good old spaghetti programming days. But I still need to avoid programmatic and logic errors, therefore I follow these 10 basic commandments in writing code.

  1. Assumptions are the mother of all errors.
  2. The most lacy developer do things right the first time.
  3. If something can go wrong, then it will at some point do.
  4. Never implement bad exception handling. Like the Ostrich-algorithm, where you put your head in the ground and pretend that nothing has happened.
  5. Know your events or you program will fail.
  6. Errors usually appears where you least expect them to.
  7. Users come from the dark side and they got errors with them.
  8. Unit test... unit what?
  9. Keep it simple! However this does not apply for the female developers, they are able to multi task!
  10. Always include a dead-man switch in a While loop, if it potentially can loop forever.

You will find some of the commandments more relevant than others but they all still holds an important message.

Defensive programming (link)

When using a defensive programming strategy and following the commandments I tend to think what can go wrong in my code and how to prevent it from doing so or simply handling it. This turns into rock solid applications that help me sleep better at night. The effort required is actually less than that of the ordinary "spaghetti code", because you don't spend the time constantly debugging your code in the end when the users keeps coming back with new errors that they have found.

Three strikes and you're program is out.

In the beginning when a user first starts to use a program, they have the stomach for three errors before they tend to give up on it and look for another solution. Therefore it's very important that the users are not presented with the errors directly in the face every time something goes wrong. Fallback gracefully when an error occurs is very important so the users don't feel abandoned.

Detailed description of the commandments.

  1. Assumptions are the mother of all errors.
    Picked up from the movie Under Siege 2: Dark Territory (1995), where one of the bad henchmen (Penn) believes that he has killed Casey Ryback (played by Steven Seagal), but it's just an assumption and therefore Ryback is able to continue haunting the bad guys and finally finishing them off (think of yourself as one of the bad guys :-) The same thing applies to code - when you assume something will work, it will for sure come back to haunt you. (Nobody wants a Ryback running around and destroying their program). Every error in a program is there because the developer assumed that it was fine there was no possible scenario for an error. Don't make assumptions – know for sure and handle any possible outcome!

  2. The most lacy developer do things right the first time.
    If you want to save time and errors when creating a program, do things right the first time. Otherwise you just end up forgetting that you have skipped a step here, cut a corner there, so on and so forth. Yet again resulting in an error when you least except it.

  3. If something can go wrong, it will at some point do.
    This is a universal rule (another variant). Don't try ignoring it. The only thing is to make sure that nothing can go wrong. However even the best developers cannot avoid all errors therefore contain the error so it will not affect the outside world and implement a graceful fallback error handling routine.

  4. Never implement bad exception handling. Like the Ostrich-algorithm, where you put your head in the ground and pretend that nothing has happened.
    This is a common error handling that I have seen in various places, where the developer knows that something can go wrong, but is too lazy to implement a descent error handling logic. Thereby resulting in a possible unstable program. This happened to me once when another developer in my team made an empty try catch statement around a database call. When the call to the database failed - and it did happen from time to time - the code simply just continued like nothing had happened, resulting in that the database data became invalid. So I had to spend 2 full days debugging the entire code in order to find out why the program was unstable and not knowing where the error prune part was hiding.

  5. Know your events or you program will fail.
    This is one of the most important things you can do when coding in object oriented languages. Know in what order things happen in. I have seen a lot of developers writing a lot of bad code in ASP.NET because they simply haven't allowed themselves the time to study how a Page lifecycle works.

  6. Errors usually appears where you least expect them to.
    This is another law of the Universe. You might as well accept it!
    If you ever think a certain situation will never occur, you are properly wrong. I have heard this so many times "This will never happen… yada yada yada" – but trust me, it will! So always implement at least a minimal form of error handling.

  7. Users come from the dark side and they got errors with them.
    No developer can foresee every possible outcome of a program and users have the tendency to pick out the situations that you had never have thought of. So always think of in general error handling, so you can say to yourself… "Whatever happens, I have covered it."

  8. Unit test... unit what?
    This is an important thing to remember, especially when doing a lot of backend logic. There has been written a lot of topics on this subject and therefore I will not cover it here.

  9. Keep it simple! However this does not apply for the female developers, they are able to multi task!
    Male developers tend to develop programs with their forehead. This puts a constraint on how many of lines of code that they can handle simultaneously. Males like giant things, but giant methods are a bad thing. It is easy to lose overview of what is going on in the method with too many lines of code and therefore the possibility for errors sneaking in is greater. Keep your methods at a minimum, even if they are just used once in a call from one other method.

  10. Always include a dead-man switch in a While loop, if it potentially can loop forever.
    All developers in world has made this one at least once in their lifetime. Creating a While statement but forgets that they can potentially run forever and it stalls the process. So if there is even the slightest chance that a While statement can loop beyond its intention, introduce a dead-man switch. A simple counter that can only count to a certain amount before ending the while loop.

This more or less concludes my 10 commandments. Read it, learn from it and hopefully improve on it.

Monday, April 13, 2009

WSPBuilder documentation

I know that the documentation on using the WSPBuilder hasn't been fulfilling to say it nicely, but that's the way it is.

The good thing is that other people have been nice and done some work on this. This is what I have found so far (in random order), sorry if have forgot someone.

WSPBuilder - Walkthrough of the Visual Studio Add-in
http://www.zimmergren.net/archive/2009/04/08/wspbuilder-walkthrough-of-the-visual-studio-add-in.aspx

WSS: Development - Quick Start with WSPBuilder
http://rasor.wordpress.com/2008/10/12/wss-dev-quickstart/

WSS Dev: WSPBuilder Templates
http://rasor.wordpress.com/2008/10/12/wss-dev-quickstart/

WSS Dev: HowTo debug a WebPart
http://rasor.wordpress.com/2008/10/24/wss-howto-debug-a-webpart/

Change the WSPBuilder DeploymentTarget to WebApplication
http://blog.mastykarz.nl/change-wspbuilder-deploymenttarget-webapplication/

Intro to WSPBuilder
http://www.michaelbowersox.com/2009/01/18/intro-to-wspbuilder/

WSPBuilder Folder Structure
http://www.michaelbowersox.com/2009/01/28/wspbuilder-folder-structure/

Developing SharePoint Solutions in Visual Studio
http://greggalipeau.wordpress.com/2008/05/18/developing-sharepoint-solutions-in-visual-studio/

TFS Build and WSPBuilder
http://alex-tfs.blogspot.com/2009/01/tfs-build-and-wspbuilder.html

How to get TFS to automate your WSP builds with WSPBuilder
http://pointstoshare.spaces.live.com/Blog/cns%21AEC42F315B4528B0%213290.entry

The WSPBuilser Manual
http://wspbuilder.codeplex.com/SourceControl/changeset/view/33013#166101

My Blog.
http://keutmann.blogspot.com/2008/02/visual-studio-addin-and-templates-for.html

New! (2009/08/02)

Creating a code-only webpart and deploying as a feature
http://www.sharepointsean.com/articles/Pages/CreatingaCode-Onlywebpartanddeployingasafeature.aspx

Please comment with more links if you know one.

Friday, April 10, 2009

WSPBuilder - Walkthrough of the Visual Studio Add-in

I know that there are not much documentation on how to use WSPBuilder in the install package, but my good friend Tobias Zimmergren have written a great post on SharePoint development with WSPBuilder Extensions. Check it out. http://www.zimmergren.net/archive/2009/04/08/wspbuilder-walkthrough-of-the-visual-studio-add-in.aspx

WSPBuilder Extensions 1.0.5

This version of WSPBuilder Extensions 1.0.5 now fully supports development on an x64 bit systems and Windows Server 2008.

Installs correct CABLIB.DLL for x64 systems. (No need for manually installing)
"Copy to 12 hive" function now works on x64 systems.
Support for IIS7
Minor bug fix for "Recycle App Pools"
Supports VisualBasic Project/Item templates. (Thanks to Chip Sockwell)
wspbuilder.exe is included in this package.

Install notes.:
Be sure to uninstall the old version of WSPBuilder Extensions before installing the new version.

Happy SharePoint coding folks

/keutmann