Windows 8 Developer Preview Safe Mode(1 min read)

In Windows 8 the 'Safe Mode' option is not available on the boot with F8 screen, prompting several guides on creating an additional boot entry using BCDEDIT and chaning the properties via the Windows GUI -- not much use if your machine has already run into trouble.

Shift+F8 is the secret key that gets the old boot options menu, with 'Safe Mode', but you need to hold it down during POST and keep holding it down until the "Advanced Boot Option" screen appears, otherwise you can't time it right (unlike F8, or F10 below, which you just hit at the beginning of the boot).

Also the Edit Boot Options menu, available via boot with F10, is still available, and that allows low level control of all the boot options.

I couldn't track down a current reference for the options, but did find one for Windows XP / Server 2003, most of which still appear relevant: http://support.microsoft.com/kb/833721

To get the same as 'Safe Mode with Networking':

  1. Press F10 while booting
  2. You should get a text screen titled "Edit Boot Options", with a section "Edit Windows Boot options for: Windows Developer Preview"
  3. There should be an input area that already has "/NOEXECUTE=OPTIN" (in my case it also had "/HYPERVISORLAUNCHTYPE=AUTO", which I think is because I am running Hyper-V)
  4. Add "/SAFEBOOT:NETWORK" (Note: "/NOGUIBOOT" doesn't seem to work -- it still shows the loading screen, so options like "/SOS" didn't work)
  5. Hit ENTER to boot

Safe Mode is important for an early Developer Preview like this as drivers issues are much more likely (I ran into problems trying to add the NVIDIA drivers for my Alienware M14x and had to boot into safe mode to uninstall them).

Comparison of logging frameworks(1 min read)

I added a comparison of the major logging/tracing frameworks for .NET to the CodePlex site for Essential.Diagnostics, to demonstrate how System.Diagnostics stacks up against log4net, NLog and the Enterprise Library.

I also added a performance comparison (the source code is in the CodePlex project if you want to verify the results).

Look at the results for yourself, but I think System.Diagnostics does okay -- and the extensions in Essential.Diagnostics (plus others such as Ukadc.Diagnostics and UdpPocketTrace) fill out the gaps compared to log4net and NLog. Similarly on the performance side, all have very little overhead (NLog is a winner on overhead, but does relatively worse on actually writing the messages to a log file).

What about the Enterprise Library Logging Application Block? Well, I just don't think it does well compared to the others. Sure it was a lot better than .NET 1.0 System.Diagnostics, but a lot of that was added in .NET 2.0 System.Diagnostics (such as multiple sources). In some cases it is worse than what is currently available in the standard framework -- e.g. no delayed formatting. This shows up in the performance figures which indicate several magnitudes greater overhead than any of the other frameworks!

I'm obviously biased, but I really think that the best solution is to stick with the standard, out-of-the-box, System.Diagnostics, extended where necessary to fill any gaps (Essential.Diagnostics, etc, for additional listeners, filters & formatting).

P.S. Also check out my guidance on Logging Levels.