Practical Programming Pearls For .NET Developers

Kraken

Kraken is my personal class library for .NET.  It has evolved since v1.0 to provide a variety of classes to make .NET programming easier.  It continues to evolve over time.  The v2.x version of Kraken supports .NET v2.0 and VS2005/VS2008.  The v3.x version supports .NET v3.5 and VS2008.

The source code for Kraken is not available for several reasons.  The primary reason is to avoid a proliferation of "unofficial" versions floating around.  However you can use Reflector or another tool to look into the assemblies to see how something is implemented.

Features

  • Data access library to isolate connection management from applications.
  • Threading classes to make working with multi-threaded applications easier.
  • String helper class to provide additional support for strings.
  • Reflection helper class to help with reflection.
  • Many more...

Downloads

The core library is contained in a Windows Installer package and is needed by everyone.  Kraken is installed in the GAC.  Multiple versions can co-exist.

The SDK is a Windows Installer package that adds the necessary files and links to hook Kraken into Visual Studio 2005 and expose the documentation and symbol files for Intellisense.  It also installs a merge module for installing Kraken from other installation programs.

Version History

Version Release Date Comments
.NET Version 3.5  
3.0.0 13 December 2007 Download Functionally equivalent to v2.3.0 but recompiled for v3.5 and with all obsolete members removed. Release Notes  Alert
.NET Version 2.0  
2.3.0 13 December 2007 Download Adds some utility classes and enhanced support for Windows services.  Release Notes  Alert
2.2.0 18 March 2007 Download Update to provide a reworked data access layer and some minor enhancements.  Release Notes
2.1.1 25 January 2007 Download This was a minor update to move Kraken from v1.1 of .NET to v2.0.

Critical Issue Alert in v2.3.0 and v3.0.0!!

TimeZoneEx will not work properly under Windows Vista.  Attempting to use it may cause an exception.  The problem lies in a change made to Windows to support more complex daylight savings time (DST) rules.  In Vista a new dynamic time zone structure and functions were added in addition to some registry changes.  In previous versions of Windows a single DST rule existed for a time zone and it was year agnostic.  This required that Windows be updated when the DST rules changed and invalidated DST calculations for any prior years.  With Vista each time zone can have different DST calculations for each year.  While necessary to support the complexity of DST it does break existing code that assumed a single DST for a time zone, such as TimeZoneEx

While updating TimeZoneEx to support dynamic DST calculations is possible it would require either breaking support for previous versions of Windows in order to use the new APIs or implement the logic needed to support DST, which is not trivial.  Since TimeZoneEx has been marked obsolete as of v3.5 of .NET I do not feel that the benefits of fixing this class is worth the time and effort it would take.

For clarification, TimeZoneEx will work when used to represent a time zone that does not support dynamic DST.  TimeZoneEx.GetTimeZones will throw an exception if called as it will encounter the dynamic time zones.  These issues will not be fixed as the class is marked as obsolete.

Legalese

Now for the legality issues.  Kraken is freely available for use in personal or commercial applications without any restrictions.  It would be nice if you give credit where credit is due but it is not required.  To lead by example I must now inform you that not all the classes are my own.  Some classes are either directly or indirectly influenced by others.  To this end the following classes and their original authors are listed below.

  • InterlockedEx - Portions of the class come from the following sources:
    • Morrison, Vance. Understand the Impact of Low-Lock Techniques in Multithreaded Apps., MSDN Magazine. October, 2005.
    • Richter, Jeffrey. Concurrent Affairs: Performance-Conscious Thread Synchronization., MSDN Magazine. October, 2005.
  • SpinWaitLock - Richter, Jeffrey. Concurrent Affairs: Performance-Conscious Thread Synchronization., MSDN Magazine. October, 2005.
  • TimeZoneEx - Modified for style and to enhance some functionality.   Michael Brumm