Thursday, December 16, 2004

An ongoing Introduction to MSIL

Just stumbled across this excellent Introduction to MSIL by Kenny Kerr. It kinda' makes my brain hurt... but in a good way.

[Listening to: Static-X - Cold]

Wednesday, December 15, 2004

Your personality summarized in 26 links.

An intriguing meme found on KC Lemson's blog. lear the address bar in your browser, type in every letter of the alphabet, and list out what is the first URL on the history list. No cheating now...

A - http://www.adtmag.com/blogs/devcentral/ - Developer Central Blog.
B - http://www.bbc.co.uk/radio4/hitchhikers/game.shtml - 20th Anniversary edition of the HitchHiker Adventure Game.
C - http://c3dsp.westjet.com/internet/sky/checkFlights.cgi - Checking flights on WestJet airlines.
D - http://www.danielmoth.com/Blog/ - Picked up this link from some blog. Not into .NET CF so didn't subscribe.
E - http://home.earthlink.net/~mrob/pub/ibook.html - bad hardware workaround courtesy of TheDailyWTF.com.
F - http://www.freelists.org/archives/oracle-l/03-2004/msg00545.html - Oracle news group.
G - http://games.slashdot.org/article.pl?sid=04/12/02/0017233&from=rss - /. post on Acclaim's auction.
H - http://www.hack.net/ - Got this from some blogs. Didn't work in Opera. Didn't really try either.
I - http://www.ibiblio.org/Dave/Dr-Fun/df200412/df20041210.jpg - Cool Darth Santa comic.
J - http://www.jetbrains.com/resharper/survey.html - Trying to win a resharper license.
K - http://www.kk.org/cooltools/... - Cool Tools
L - http://www.latticesoft.com/Products/LatticeDataMapper.aspx - Persistance Framework for .NET
M - Corporate webmail.
N - http://www.networklifemag.com/ - Another link from another blog. Not subscribed.
O - http://www.octanecreative.com/ducttape/sightings/index.html - Duct Tape Rules!
P - http://www.panopticoncentral.net/archive/2004/12/01/2598.aspx - Paul Vick's article on Black Hole projects.
Q - Nothing.
R - http://reviews.cnet.com/... - C|Net product alert page on the ultimate gaming PC.
S - http://science.slashdot.org/article.pl?sid=04/12/15/0226220&from=rss - /. article on LEGO logic gates.
T - http://tahiti.oracle.com/ - Still looking for Oracle info.
U - http://www.ultimateears.com/ - High end in-the-ear headphones.
V - http://www.visit4info.com/details.cfm?adid=6099 - Way cool commercial from Toyota - Bugger!
W - http://www.westjet.com/ - Still looking for that flight too.
X - Nothing.
Y - Nothing.
Z - Nothing.

[Listening to: Enya - Athair Ar Neamh]

Tuesday, December 14, 2004

Wednesday, December 01, 2004

XmlPreCompiler / XmlSerializerPreCompiler

Like most people I have struggled too often with XmlSerializer. Mathew Nolton wrote a UI wrapper around Chris Sells'
XmlSerializerPreCompiler called XmlPreCompiler. This should help some.

[Listening to: Faster Pussycat - Slip of the Tongue]

Friday, November 26, 2004

Nine Tips to Enterprise-proof MSMQ

A slightly older (but still useful) link on DevX by Michael Jones: Nine Tips to Enterprise-proof MSMQ. It deals with performance and reliability (usually at odds with each other.)

[Listening to: Crazy Town - Only When I'm Drunk]

Thursday, November 25, 2004

Saying No to .NET Remoting

I haven't gotten there yet (or anywhere recently, but that's another issue) but here's some tips from Chris Hewitt about which gives some guidance/recommendations on various distributed communication technologies:
Saying No to .NET Remoting

[Listening to: Weezer - Jamie]

Tuesday, November 16, 2004

15 Seconds : 10 Steps to a Successful Versioning and Deployment Strategy for .NET

A very useful set of guidelines for versioning, deployment and security from Michele Leroux Bustamante, originally found in this blog entry: 10 Steps to a Successful Versioning and Deployment Strategy for .NET

[Listening to: Eminem - Kids]

Guidelines - a hidden feature for the Visual Studio Editor

A neat little VS gem from Sara Ford: Guidelines - a hidden feature for the Visual Studio Editor.

Kinda cool. Definitely one of those "My Visual Studio is better than yours" things.

Found via the VSEditors blog

[Listening to: KoRn - Dead Bodies Everywhere]

Wednesday, November 10, 2004

Deterministic Finalization

Updated: Changed title to reflect the series instead of just the first article

I just stumbled across Andy Rich's blog (I can't remember which blog I got it from -- apologies to the author.) In it he has an excellent series on Deterministic Finalization:

  • Deterministic Finalization I - a primer for CLR Dispose
  • Deterministic Finalization II - The C++ DF Model
  • Deterministic Finalization III - Benefits, part 1
  • Deterministic Finalization IV - Benefits, part II


  • I know it sounds geeky but Deterministic Finalization, Garbage Collection, IDisposable, etc really interest me. Such is my life.

    [Listening to: Cirque Du Soleil - Carvena]

    Monday, November 08, 2004

    Creating a partially-trusted AppDomain

    Peter Torr expands on a set of blog entries from Shawn Farkas with: Creating a partially-trusted AppDomain.

    I'm going to keep collecting these links until I either get it, or give up on it. I put the odds about even on those two.

    [Listening to: George Clinton - Play That Funky Music]

    Tuesday, November 02, 2004

    Introduction to MSH (a.k.a Monad)

    From Jon Udell: An Introduction to MSH. I looked at this a while back but I didn't spend much time to figure it out. Maybe I'll have to now.

    [Listening to: One Minute Silence - Brainspiller]

    Friday, October 29, 2004

    MSDN error on VS2003 while running as non-admin

    I've recently dropped my main XP user down to the "average schmo" level like I should (and like I have in my primary development VirtualPC image.) When I tried to pull up the help on anything the installation wizard for VS2003 would pop up, eventually failing with this error:

    Error 1606.Could not access network location wwwroot$: Unable to get security info for this object.

    In case anyone else has this problem, here's how you fix it (verbatim from Felix Wang):

  • Log on with the Admin user.

  • Rename the following file:

    C:\Program Files\Common Files\Microsoft Shared\Office10\mso.dll

  • Launch VS.Net and let the reparation to finish.

  • Launch MSDN.

  • Close VS.Net and MSDN.

  • Search for the file named "CookDoc.dll". By default, it should be in
    "C:\Program Files\Common Files\Microsoft Shared\MSDN".

  • Let's register the file by the following command:

    RegSvr32 "C:\Program Files\Common Files\Microsoft Shared\MSDN\CookDoc.dll"

  • Logon with the original user.


  • Scooped from usenet on microsoft.public.vsnet.setup in this thread. In case this link doesn't work the original post is titled "VS.NET/MSDN Annoyance" on Mar 9, 2004.

    [Listening to: Concrete Blonde - It's a Man's World]

    CreateProcessAsUser

    Any blog entry that includes usage instructions of use in rare circumstances and with caution deserves a link. K. Scott Allen's sample code / wrapper around CreateProcessAsUser

    [Listening to: Iron Maiden - Caught Somewhere in Time]

    Tuesday, October 26, 2004

    Easily Creating a StrongNameMembershipCondition for an Assembly

    Another gem from Shawn Farkas: Easily Creating a StrongNameMembershipCondition for an Assembly

    [Listening to: Electric Light Orchestra - Turn to Stone]

    Creating an AppDomain with limited permissions

    Shawn Farkas has to be on my top 10 list of bloggers. His blog entries and snippets are awesome and (eerily enough) tend to be right along the lines of stuff that I'm going to need. How does he know what I'm doing? Hey Shawn, that isn't you hanging around in the bushes outside my office window is it?

    Without further ado: Creating an AppDomain with limited permissions.

    [Listening to: Eartha Kitt - Where is my man]

    More Performance Tidbits for library writers

    More Performance Tidbits for library writers from the performance guru Rico "measure first" Mariani.

    At some point either they'll figure out a way to really profile in a VPC image or I'll have to knuckle under and install VS2005 on my host PC. 'Til then, my head is firmly in the sand.

    [Listening to: Alice in Chains - Junkhead]

    Monday, October 25, 2004

    Getting the Current Permissions in a Named Permission Set

    Shawn Farkas posted a snippet on Getting the Current Permissions in a Named Permission Set. I like snippets. Snippets are good. Long live snippets.

    Does it make sense for me to define my own Named Permission Set for my service? Don't know yet. Haven't spent enough time looking.

    [Listening to: Kittie - In Winter]

    Friday, October 22, 2004

    Programatically changing file permissions

    I'm back to implementing some permission related unit tests that I balked at earlier.

    It took me a bit of time to find how to remove all permissions from a file. Since I don't want to have to go through this again I'll post it here.

    Basically I'm pulling what I found in Keith Brown's absolute must read wiki: The .NET Developer's Guide to Windows Security in How to program with SIDs into a class.

    I implemented it in a typical Resource Acquisition Is Initialization manner using IDispose so that I know I'll restore the permissions to their original after my tests are done.

    Here's the class (a little light on error checking for brevity):

    class ApplySecuritySettingsToFile : IDisposable
    
    {
    #region Private Members
    private FileSystemAccessRule m_AccessRule = null;
    private FileInfo m_FileInfo = null;
    #endregion


    #region Constructor
    public ApplySecuritySettingsToFile (string fileName,
    FileSystemAccessRule accessRule)
    {
    if (fileName == null && accessRule == null)
    return;


    m_FileInfo = new FileInfo (fileName);
    m_AccessRule = accessRule;


    FileSecurity sd = m_FileInfo.GetAccessControl ();
    sd.AddAccessRule (m_AccessRule);
    m_FileInfo.SetAccessControl (sd);
    }
    #endregion


    #region Dispose pattern
    private bool m_bIsDisposed = false;


    ~ApplySecuritySettingsToFile ()
    {
    Dispose ();
    }


    public void Dispose ()
    {
    if (!m_bIsDisposed)
    {
    if (m_FileInfo != null && m_AccessRule != null)
    {
    FileSecurity sd =
    m_FileInfo.GetAccessControl ();
    sd.RemoveAccessRule (m_AccessRule);
    m_FileInfo.SetAccessControl (sd);
    }


    GC.SuppressFinalize (this);
    m_bIsDisposed = true;
    }
    }
    #endregion
    }
    And here's how you use it to Deny FullControl (i.e. remove all permissions) to file C:\temp\temp.txt for the BUILTIN\users group:
    using (new ApplySecuritySettingsToFile (@"C:\temp\temp.txt",
    
    new FileSystemAccessRule (
    new SecurityIdentifier (
    WellKnownSidType.BuiltinUsersSid,
    null),
    FileSystemRights.FullControl,
    AccessControlType.Deny)
    )
    )
    {
    // You (and everyone else for that matter) now have
    // no permissions whatsoever to C:\temp\temp.txt

    }
    You could just as easily add permissions using AccessControlType.Allow.

    Hope it helps.

    [Listening to: Marilyn Manson - Mother Inferior Got Her Gunn]

    Thursday, October 21, 2004

    Monday, October 18, 2004

    Number Formatting in .NET

    An overview of Number Formatting in .NET via Kit George of the BCL Team.

    I too have spent far too much time looking for the right format string on MSDN. This is a step in the right direction.

    [Listening to: Rage Against the Machine - The Ghost of Tom Joad]

    Thursday, October 14, 2004

    Nifty VS2003 tips for breakpoints and the "Find" combo box

    Roy Osherove shows a few really nifty tricks: Advanced debugging tips and stuff you never knew about the "Find" combo box

    [Listening to: Faster Pussycat - Babylon]

    Programmatic .NET ACL Definitions

    Another awesome security related code tidbit from Michael Willers:
    TaskDriven Working with ACLs on files.

    I'm already subscribed to his feed, but I somehow managed to miss this gem when it came out fresh. Much thanks to Jeff Newsom from Thinking Out Loud for reposting the link that actually made it past my forehead.



    [Listening to: Soundgarden - Pretty Noose]

    Wednesday, October 13, 2004

    Upcoming Changes to System.Xml in .NET Framework 2.0 Beta 2

    Dare Obasanjo provides an overview on the upcoming changes to System.Xml in .NET Framework 2.0 Beta 2.

    [Listening to: Collective Soul - All]

    The Osherove.Interception framework

    Roy Osherove presents his Osherove.Interception framework. I'm not entirely convinced of how I would use this (or even if I should) but it definetely deserves looking into despite his use of the word automagically. Ugh.

    I had previously blogged about it here as it pertained to unit testing.

    [Listening to: KoRn - Blind]

    Saturday, October 09, 2004

    Another keeper from MbUnit: AssemblySetUp/TearDown

    Now that I've installed the latest MbUnit from TestDriven.NET I can make use of the TestFixtureSetUp and TestFixtureTearDown support in MbUnit (+ Assembly Setup and TearDown).

    This has greatly simplified my code. In each of my test fixtures I used to have to have a SetUp method which calls a static initializer from another class to initialize my log4net stuff:

    public class MyTests
    
    {
    [SetUp]
    public static void SetUp()
    {
    StaticInitializer.Initialize()
    }
    [Test]
    public voidSomeTest()
    {
    ...
    }
    }

    public static class StaticInitializer
    {
    private static bool s_bIsInitialized = false;
    public static void Initialize()
    {
    if (!s_bIsInitialized)
    {
    log4net.Config.BasicConfigurator.Configure (...);
    s_bIsInitialized = true;
    }
    }
    }
    Now all I need is:
    public class MyTests
    
    {
    //No extra stuff at all
    [Test]
    public voidSomeTest()
    {
    ...
    }
    }

    [assembly: AssemblyCleanup (typeof (StaticInitializer))]
    public static class StaticInitializer
    {
    [SetUp]
    public static void Initialize()
    {
    log4net.Config.BasicConfigurator.Configure (...);
    }
    }
    The rest is handled for me.

    Sooo much nicer.

    Friday, October 08, 2004

    Loading an assembly from a "working directory" at design time

    Steve Maine may have just helped me out of a problem that I didn't even know I had yet: Loading an assembly from a "working directory" at design time. Since I plan to load user assemblies I would've fallen over this eventually. Now I'm prepared... Or at least I've lost my excuse of not being prepared.

    [Listening to: Collective Soul - The World I Know]

    An exercise in implementing a domain-driven design

    Steve Maine runs through a set of articles (Part I, Part II and Part III) doing an exercise in DDD (Domain Driven Design).

    Not sure if I'll jump on the bandwagon, but it looked interesting enough to persist here.

    [Listening to: Limp Bizkit - 9 Teen 90 Nine]

    Wednesday, October 06, 2004

    VS2005 Export Template Wizard

    Craig Skibo details the new VS2005 Export Template Wizard. This seems to be a great way to provide out-of-the-box wizards to allow customers to customize your app.

    [Listening to: George Clinton - The Shagadelic Austin Powers]

    Unofficial NUnit Extensibility Framework (MbUnit too)

    Roy Osherove puts together another creepy cool unit testing extension to both NUnit and MbUnit.

  • Introducing: Unofficial NUnit Extensibility Framework - make your own test attributes easily!

  • First the automatic database rollback feature, now this. Too cool.

    I echo Jonathan's sentiment: this belongs in TestDriven.NET

    [Listening to: Stone Temple Pilots - Sin]

    Wednesday, September 29, 2004

    System.Security.AccessControl

    Valery Pryamikov might have just saved me a bunch of spelunking through MSDN2 (which is still pretty raw.) I had reached a point where I wanted to start adding permission related unit tests, but I quickly got lost in beta documentation with no examples.

    I started going through Keith Browns excellent wikibook: "The .NET Developer's Guide to Windows Security" but quickly realized that I should just read the whole thing instead of just jumping in looking for a sample and jumping back out.

    So instead I added a nice juicy //TODO: so that I can see it in the task window (one of my favourite features of VS2003 and up) and moved on.

    What do I find today but a blog entry on Playing with System.Security.AccessControl.

    Nice.

    [Listening to: Primus - Fisticuffs]

    Thursday, September 23, 2004

    A couple links on MSMQ Processing

    Wallace McClure posts a couple of articles on MSMQ stuff:

  • MSMQ processing of a string
  • MSMQ Processing of multiple pieces of data

  • I haven't gone through them in any detail, but they look useful enough that I post it here so I don't lose them.

    [Listening to: KoRn - Blind]

    Saturday, September 18, 2004

    An alternate to MbUnit's CurrentFixture

    Now that my library of MbUnit unit tests is growing it's becoming a non-trivial amount of time to run them, something that I'd rather avoid when doing a very tight red/green/refactor loop.

    To speed things up I've been using the CurrentFixture attribute like so:

    [CurrentFixture]
    
    [Test]
    public void DoSomeTest()
    {
    ...
    and the associated property of the AutoRunner in main:
    public static void Main (string[] args)
    
    {
    using (AutoRunner auto = new AutoRunner ())
    {
    auto.Domain.Filter = FixtureFilters.Current;
    ...

    The issue is, I keep having to check out my previous test fixture to remove the attribute so I can worry only about my current fixture. That leads to a lot of comments like "Removed CurrentFixture attribute" in my version control.

    Here's what I now do. I don't use CurrentFixture at all. Instead I have the following in main:
    public static void Main (string[] args)
    
    {
    using (AutoRunner auto = new AutoRunner ())
    {
    auto.Domain.Filter
    = FixtureFilters.Type ("My.Full.Class");
    ...

    Now I only need to check out the main line (or more often just keep it checked out) to work on another fixture.

    [Listening to: Stone Temple Pilots - Trippin' on a Hole in a Paper Heart]

    Tuesday, August 31, 2004

    VS2005 Beta1 - Source doesn't match IL while stepping through DLL

    I am having the weirdest problem. I have a unit test .EXE which exercises my code which lives in a .DLL assembly. However, the code that the debugger is stepping through doesn't match what's actually happening.

    For example, say I have this:

    1: public bool Load (XPathDocument doc)
    
    2: {
    3: using (new LogIndent (log.Info, "Load"))
    4: {
    5: if (doc == null)
    6: {
    7: log.Warn ("doc is null -- nothing to load");
    8: return;
    9: }
    10:
    11: if (log.IsDebugEnabled)
    12: log.Debug ("doc=" + doc);
    13:
    14: try
    15: {
    16: XPathNavigator nav = doc.CreateNavigator ();
    17: XPathNodeIterator iter = nav.Select ("[snip]");
    18: if (iter != null)
    19: {
    20: while (iter.MoveNext())
    21: {
    22: Dump (iter.Current);
    23:
    24: string flowName;
    25: flowName = iter.Current.GetAttribute (
    26: "Name",
    27: iter.Current.NamespaceURI);


    I have a break point on line 3 which the debugger drops me off at. At each step I'm hitting F11 - Step Into. Here is what I see:

    3: using (new LogIndent (log.Info, "Load"))
    7: log.Warn ("doc is null -- nothing to load");

  • Note that I should have stepped into the LogIndent constructor since the code exists in this assembly.

  • Plus, I shouldn't have jumped over the if

  • Also, I shouldn't have stepped into this if at all since doc is not null (I checked it in the calling application.)

  • 11:    if (log.IsDebugEnabled)

    Now when I step into I'm in the constructor for LogIndent that I should've hit first!?! If I continue a bit further:
    12:      log.Debug ("doc=" + doc);
    
    22: Dump (iter.Current);
    25: flowName = iter.Current.GetAttribute (

    Here again
  • I should have stepped into log.Debug

  • I should have hit the XPathNavigator, XPathNodeIterator, if and while statements

  • I should have stepped into Dump

  • to top it off, stepping into GetAttribute drops me into log.Warn with the message "doc is null -- nothing to load" from line 7

  • However, if I switch the assembly to an .EXE then everything behaves normally.

    Is it me? Should I submit this to LadyBug? Ugh.

    [Listening to: Eminem - Amityville]

    Monday, August 30, 2004

    Enabling CodeWright 7.x / VS.NET 2003 synchronization

    After upgrading my version of VS to VS.NET 2003 at work I was missing the Add-in required to synchronize files between VS and CodeWright. After a bit of spelunking here's what I found. The add-in menu is completely controlled by the registry.

    First, register CWVS7Adin.dll as you would any COM dll.

    Then, save this to a .reg file and import it.

    REGEDIT4

    [HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.1\Addins\CWVS7Adin.Connect]
    "FriendlyName"="Codewright synchronization"
    "Description"="Synchronizes files between VS.NET and Codewright"
    Now when you open up the Add-in manager dialog you should see it properly.

    [Listening to: Tool - 4 degrees]

    Updated: shrinking down .reg entries to fit screen

    Sunday, August 29, 2004

    Using System.Reflection to get at private fields in a class

    6:41 In my unit testing binge I have come across the need (albeit a questionable one) to validate the contents of values internal to a class.

    It took me a bit to figure out how to do this, so I figured I'd share it here.

    The magic is in FieldInfo.GetValue (thanks to Stefan Goßner for pointing me in the right direction here.)

    For instance, I have this:

        public class FlowManager
    
    {
    private OrderedDictionary<string, IBlock> m_Flows;

    //... etc ...
    }
    I would get a reference to m_Flows like this (stripped down, but you get the idea):
        private OrderedDictionary<string, IBlock> GetFlows (
    
    FlowManager flowManager)
    {
    FieldInfo field = fm.GetType ().GetField (
    "m_Flows",
    BindingFlags.NonPublic | BindingFlags.Instance);


    if (field == null)
    return null;

    return field.GetValue (flowManager)
    as
    OrderedDictionary<string, IBlock>;
    }

    Updated: playing with formating to make the source look like source

    Saturday, August 28, 2004

    NDoc and VS2005 Beta 1 -- Has anyone gotten it to work?

    I'm trying to use NDoc to generate my documentation, but both the GUI and Console version complain that my assembly is invalid:

      Error: LoadAssembly: Exception is System.BadImageFormatException: The format of the file 'Gesture.Hookup.Core.dll' is invalid.

    When I see things like this I add the following to the .config file of the app that's blowing up:
      <configuration>
          <startup>
              <supportedRuntime version="v2.0.40607" />
          </startup>
      </configuration>

    But that didn't work. I even added:
      <requiredRuntime version="v2.0.40607" />

    but no go.

    Has anyone gotten this to work?

    HookUp update

    I've started working on this again. Slowly. Very slowly.

    Mostly I'm getting the infrastructure going. I'm working in VS2005 Beta 1. I put together a few of the utility and base classes as TDD as I could. (I'm weak.)

    First of all I'm developing as a non-admin, using Least Privilege.

    I'm using MbUnit for unit testing. I couldn't get the GUI working, it gives me a ThreadAbortException while trying to populate the tree. Since I've set up the test cases as an exe with an AutoRunner I don't really need to worry about it yet.

    I put in log4net for logging, although I can't seem to get any output during my MbUnit test cases. It's probably because of the way MbUnit loads the AppDomain. I haven't really investigated any further.

    I have cleaned everything up with FxCop and I only ignored 2 warnings:

  • "Avoid having a namespace with a small number of types" on a namespace where I'm holding some assembly/project level constants
  • Avoid building non-callable code into assemblies" on the VS generated Resources.cs file

  • Not too shabby.

    I am in the process of adding all of the xml comments so I can use NDoc. I'm such an NDoc junkie. How is it that a geek gets excited about created documentation? Or Unit Tests? Hold on, am I dead?

    Finally, I have just added PowerCollections into the mix. Haven't really gotten started on them yet, but soon.

    Thursday, August 19, 2004

    VSHOST -- the Hosting Process

    Dave Templin explains what that MyApp.vshost.exe is and what it's doing in my bin folder.

    [Listening to: Monty Python - Always Look on the Bright Side of Life]

    Wednesday, August 18, 2004

    Of Repaving, Virtual PCs and Paying Attention

    Well, it came time to repave my machine (as it always seems to do.) No sweat. I had all of my dev stuff on a VPC image. I even had the C partition going unused from a previous repaving.

    So, I install XP + updates + firewall + virus scanner. All is well.

    I installed VS2003, Office, etc, etc. All is well.

    I mount my VPC iso and install. All is still well. I'm on a roll.

    Now comes time to load my VPC image. Boom. Odd. It's complaining about some setting in the Virtual Machine. Maybe I constructed this one with a different amount of memory. Oh well, I'll just blow away the Virtual Machine .vmc file since it doesn't really hold all that much. All the good stuff is in the .vhd file anyway.

    I create a New Virtual Machine and load my Virtual Hard Drive. Invalid format?!? Huh? It tells me to go through the XP recovery steps. Fine. {Getting a bit queesy now.}

    After chugging along for hours (or so it seemed) it was recovered. Okay. Reboot the VPC and... Boom. UGH!

    Only now do I finally notice that I've mounted the wrong ISO. I mounted the Connectix 5.2 VPC instead of VPC 2004. I'm an idiot. But now it's too late. I didn't think to enable Undo Disk before trying this. It's toast.

    Nuts.

    It's a damn good thing that I had all my source in VSS which I archived before the repave. Saved my ass it did.

    The moral of the story. Pay attention dimwit or you might lose something permanently next time.

    It's a good thing I didn't go into medicine: "Nurse, you did backup the patient like I asked right?"

    [Listening to: Powerman5000 and Rob Zombie - Blast off to Nowhere]

    NSort: Generics and Testing

    Another keeper from Jonathan de Halleux of MbUnit fame:
    NSort: Generics and Testing.

    This is a pointer to a sorting library NSort, a nice refresher (read: reminder) on Composite Unit Testing plus a neat way of extending MbUnit without actually touching it. Sweet, sweet, sweet.

    [Listening to: Genesis - The Lamb Lies Down on Broadway]

    Tuesday, August 17, 2004

    Help Make Blogs More Visible!

    There are by some estimates more than a million weblogs. But most of them get no visibility in search engines. Only a few "A-List" blogs get into the top search engine results for a given topic, while the majority of blogs just don't get noticed. The reason is that the smaller blogs don't have enough links pointing to them. But this posting could solve that. Let's help the smaller blogs get more visibility!

    This posting is GoMeme 4.0. It is part of an experiment to see if we can create a blog posting that helps 1000's of blogs get higher rankings in Google. So far we have tried 3 earlier variations. Our first test, GoMeme 1.0, spread to nearly 740 blogs in 2.5 days. This new version 4.0 is shorter, simpler, and fits more easily into your blog.

    Why are we doing this? We want to help thousands of blogs get more visibility in Google and other search engines. How does it work? Just follow the instructions below to re-post this meme in your blog and add your URL to the end of the Path List below. As the meme spreads onwards from your blog, so will your URL. Later, when your blog is indexed by search engines, they will see the links pointing to your blog from all the downstream blogs that got this via you, which will cause them to rank your blog higher in search results. Everyone in the Path List below benefits in a similar way as this meme spreads. Try it!

    Instructions: Just copy this entire post and paste it into your blog. Then add your URL to the end of the path list below, and pass it on! (Make sure you add your URLs as live links or HTML code to the Path List below.)

    Path List
    1. Minding the Planet
    2. Luke Hutteman's public virtual MemoryStream
    3. JayBaz_MS blog
    4. A day in the life of a home-grown project
    5. (your URL goes here! But first, please copy this line and move it down to the next line for the next person).


    (NOTE: Be sure you paste live links for the Path List or use HTML code.)

    Another milestone in my progression into the BlogSphere

    Well, my blog has been linked to for the first time in a "main feed". Alan Dean has done me the honours here refering back to my "me too" blog on PassWORDS vs. PassPhrases. Thanks a bunch Alan.

    I guess Chris and Raymond can close up their laptops and practicing their hunting/gathering skills -- I'll take over from here ;)

    I have been linked to before in a follow up post by Sebastien Lambla here.

    While I'm on the podium I still must thank Jonathan de Halleux who posted the first ever comment to one of my blog entries.

    Now all I need is a "first-order" link. You know, the ones where someone links to some original content on my blog. I guess I need some original content now.

    [Listening to: Guns 'N Roses - One in a Million]

    [PermissionSetAttribute] Least Privilege

    I've been looking for something like this. I'm all for the least privilege thing, but I'm not quite sure where/how to start. Maybe this'll give me a leg up.

    Alan Dean shows a good starting point for
    Developing software with least privilege using PermissionSetAttribute. Via DotNetJunkies.

    [Listening to: Beatles - Something]

    Wednesday, August 11, 2004

    Application Verifier

    Rusty Miller brings up what looks to be a very useful testing tool: The Application Verifier.

    He says it can help track down heap corruption. Hey, isn't that what C# is for ;-)

    Friday, August 06, 2004

    Duelling Collection Libraries

    [Insert banjos here.]

    Brad Abrams points to a couple of collection library projects:

    PowerCollections
    A new library from Peter Golde modelled after the BCL framework. So far there is only one usable class, the OrderedDictionary
    C5
    A more complete library paralleling System.Collections.Generic from Peter Sestoft et al.

    [Listening to: Disturbed - Dropping Plates]

    Cheapskate alert: Essential XML now available as a FREE download

    This does my inner-cheapskate a world of good. Essential XML is now available from TheServerSide.NET as a FREE download.

    Thanks to Rob Caron for the pointer to Brian Ritchie's entry here.

    [Listening to: Cardigans - Sabbath Bloody Sabbath]

    Friday, July 30, 2004

    New BCL features in Beta1

    A nice overview of the New BCL features in Visual Studio 2005 Beta1.

    Of particular interest to me (or it should be anyway) is the ACL support. Now I have even fewer reasons to not write secure systems. Nuts.

    I'm also intrigued by the Debugger Display Attributes.

    [Listening to Lost Prophets - New Noise]

    Wednesday, July 28, 2004

    ReaderWriterLock + IDispose

    Eric Gunnerson points to a useful wrapper for ReaderWriterLock implementing IDispose courtesy of Sebastien Lambla.

    [Listening to: KoRn - A.D.I.D.A.S]

    PassWORDs vs. PassPHRASES

    Robert Hensing posted an article on his new blog, humourously titled: Why you shouldn't be using passwords of any kind on your Windows networks . . .. Great stuff. Read the comments too.

    [Listening to: Pat Boone - The Wind Cries Mary] (really!)

    Tuesday, July 27, 2004

    MSDN Solutions at a Glance

    An Architecture and Design solutions FAQ from MSDN.

    Possibly even more useful are the other documents in this area in the TOC.

    Now I just have to find time to read them. Sigh.

    Thursday, July 22, 2004

    Tuesday, July 20, 2004

    Monday, July 19, 2004

    Database Unit Testing issues and solutions: Rollback And RestoreDatabase abilities

    Roy Osherove outlines his epiphany surrounding unit tests with databases. Truly brilliant. Needless to say this is way better than what I used to come up with.
     
    [Listening to: Ugly Kid Joe - Cat in the Cradle]

    Thursday, July 15, 2004

    Mailframe Configuration System

    Another potentially useful configuration library: Mailframe Configuration System (from thinking-out-loud here.)

    [Listening to: Pantera - Living in a Hole]

    Using the Server (rather than Workstation) Garbage Collector with the .NET Framework (CLR)

    Scott Hanselman collected some useful articles on the Server GC: Using the Server (rather than Workstation) Garbage Collector with the .NET Framework (CLR)

    And to think that I didn't even know there were 2 GC's.

    Add Functionality Anywhere in VS with PocketProd

    From PowerToys: Extending VS.NET with PocketProd. Haven't had the chance to use it yet, but hopefully it still works with VS2005 Beta.

    Code Snippet - Schema Description

    From the VSEditor's Weblog, The Schema for VS2005 Code Snippets.

    This will probably be invaluable as I start adding playing with Snippets.

    Saturday, July 10, 2004

    Visual Studio 2005 Beta here I come

    Downloaded the 3.6 GB DVD image... check
    Uninstalled the Tech Preview... check
    Sleep,Work,Eat... check
    Extract .img files (Thanks to IsoBuster)... check
    Installing Visual Studio 2005 Beta... working

    I'll check back if this ever completes.

    [Listening to: Def Leppard - Bringin' On The Heartbreak]

    Friday, July 09, 2004

    Custom Configuration Section Handlers

    Don Box points to a couple nice articles on custom configuration file handlers from Craig Andera and Jeff Newsom. Notice in the comments another article on the subject from Phil (a.k.a. haacked).

    [Listening to: Tragically Hip - The Heart of the Melt]

    Creating your own Custom PatternLayout, PatternParser, and PatternConvertor with log4net

    I'm a big log4* fan, so naturally I'm all over Scott Hanselmans blog on Creating your own Custom PatternLayout, PatternParser, and PatternConvertor with log4net.

    Thanks for doing the recon for everyone Scott.

    [Listening to: Tragically Hip - Gus: The Polar Bear from Central Park]

    Thursday, July 08, 2004

    UML Symbols for Visio

    Linked through Scott Hanselman: UML Symbols for Visio.

    If this saves the headache of dealing with the built-in UML integrity checks I'll be a happy man.

    thinktecture - Ingo Rammer's Weblog: The Missing Parts Of System.Messaging

    Ingo Rammer of Thinktecture fills in some Missing Parts Of System.Messaging.

    Don't know if I'll need this, but hey -- I'm a pack rat.

    Automatic (empty) Unit Test Case generation in Reflector -- NeedItNeedItNeedIt

    Jonathan de Halleux once again floors me with this gem: Automatic (empty) Unit Test Case generation in Reflector.

    Oh sweet heavenly ham I need this. I can't wait until it's available.

    GC Performance Counters

    Maoni details all of the GC Performance Counters. Sweet.

    Now I just have to write enough code to worry about performance.

    Improving XML Performance in .NET Framework Applications

    Dare Obasanjo points to a couple useful articles on Improving XML Performance in .NET Framework Applications.

    High-performance XML

    Daniel Cazzulino presents a series of blog entries on High-performance XML:

  • High-performance XML (I): Dynamic XPath expressions compilation
  • High-performance XML (II): XPath execution tips
  • High-performance XML (III): returning well-formed XML from WebServices without XmlDocument
  • High-performance XML (IV): subtree transformations without re-parsing
  • High-performance XML (V): in-memory XML Schema validation without re-parsing
  • I'm back -- time to catch up

    Now that I'm relatively settled in at the new job it's time to throw out the occassional blog entry. Be prepared for some older links that I haven't had time for until now.

    Thursday, June 17, 2004

    Not much blogging lately (or for the next while)

    I'm switching companies in a couple weeks (from HealthCare to Semiconductors -- how's that for a jump.) So, I won't be blogging to much since I have to get a ton of stuff done before I go.

    .NET Remoting, Enterprise Services and the Future - Indigo

    From dasBlonde: Some useful links for .NET Remoting, Enterprise Services and the Future - Indigo. It might as well have had my name on the to: list.

    Wednesday, June 09, 2004

    Richard Wurdack on Profiling, Virtual PC's and Blue Screens

    Richard Wurdack posts a couple of articles (Part 1 and Part 2) on Profiling, Virtual PC's and Blue Screens which will almost definitely save me time in the future. It wouldn't've even occurred to me that you cannot use a profiler from a VPC. Maybe I've been spoiled. Originally found on Rob Caron's blog here.

    Tuesday, June 08, 2004

    Checking For A Valid Strong Name Signature

    Shawn Farkas post an article that just reeks of something I'm going to need: Checking For A Valid Strong Name Signature.

    Monday, June 07, 2004

    Free home edition of XMLSpy

    WooHoo, more free stuff: Free home edition of XMLSpy. Courtesy of Roy Osherove's ISerializable here.

    devMetrics 1.0: Free C# Software Metrics

    From the Powertoys WebLog devMetrics 1.0: Free C# Software Metrics. I've always been intrigued by software metrics from a geek standpoint, although I've never actually found a use for them. Who knows, maybe in time...

    Asynchronous Commands in ADO.NET Whidbey

    Some information from Wallace B. McClure about Asynchronous Commands in ADO.NET with an example.

    Thursday, June 03, 2004

    Little known Win32 APIs: DisableThreadLibraryCalls()

    I am a glutton for cool API calls. Courtesy of Larry Osterman: Little known Win32 APIs: DisableThreadLibraryCalls()

    [Listening to: Kiss - Cold Gin]

    Writing managed code for semi-trusted environments

    A useful article (albeit an old-ish one) on Writing managed code for semi-trusted environments by Ivan Medvedev. By way of an MSDN article by Keith Brown here (by way of Ken Brubaker's blog here).

    [Listening to: Ramones - Journey to the Center of your Mind]

    Updated Writing Secure Code 2nd Ed Errata

    An Updated Errata to one of my all time favourite books: Writing Secure Code 2nd Ed by Michael Howard. Poached from one of my all time favourite blogs by Michael Howard.

    [Listening to: Bif Naked - I'm afraid of Britney Spears]

    Wednesday, June 02, 2004

    Running Processes as a Different User

    Another gem from Shawn Farkas: Running Processes as a Different User. Definitely a keeper.

    [Listening to: Beastie Boys - Back in Black]

    Monday, May 31, 2004

    Enterprise Services and app.config

    Armand du Plessis shows how to use an app.config with Enterprise Services.

    [Listening to: Rusty - California]

    Sunday, May 30, 2004

    Saturday, May 29, 2004

    Visual Studio 2005 Brief emulation sucks

    I got all excited when I saw the Visual Studio 2005 Community Technology Preview May 2004 had Brief emulation. Unfortunately it sucks. First Alt- keystrokes don't work -- they still access the menu items. Also, the Line selection ended up being a normal selection. Ah well.

    [Listening to: Eric Cartman - Come Sail Away]

    Slight change of direction

    I'm putting what little I've done aside and starting fresh. I'm doing this for a couple of reasons:

  • Some/most of the current code was actually copied from my previous attempt. So it's a bit of a cheat.
  • I want to try some of the new code generation/code quality tools in the new Tech Preview
  • I have my solution broken out into several assemblies (Core.Messaging, Core.Configuration, Utility.Logging, Utility.UnitHelpers and Utility.Xml.) What's happening is that I'm pre-supposing where classes belong. Also, since I have a Unit test assembly for each real assembly I have quite a few to deal with. This makes loading and compiling the solution all that much longer.
  • I should be breaking code up along Code Access Security boundaries, not perceived usage boundaries.
  • I don't have that much code yet, so no is as good as it's going to get if I'm ever going to do it.

  • Wish me luck

    [Listening to: Sir Mix-A-Lot - Baby Got Back]

    Update: added point for Code Access Security

    Friday, May 28, 2004

    Installing Visual Studio 2005 Community Technology Preview May 2004 + MbUnit

    Just installed Visual Studio 2005 Community Technology Preview May 2004. Boy that takes a long time. Uninstalling the Tech Preview from March (after recommendations from numerous blogs) and the installing the new one blew away a good 4-5 hours. Running all of this under a Virtual PC certainly can't help either.

    One reminder: if you're using MbUnit (or pretty much any other tool that looks at assemblies) don't forget to add the following to the section of their app.config:
      <supportedRuntime version="v2.0.40426" />

    Runs like a charm now.

    [Update: Forgot to convert < and > into &lt; and &gt;. D'Oh]

    High-performance multithreading is very hard

    From Raymond Chen's absolute must-read blog - The Old New Thing we have: High-performance multithreading is very hard. Very useful links in this puppy.

    [Listening to: Styx - Renegade [I really must swap discs -- I already have this song "blogged"]]

    Making Strings more Secure in Whidbey

    Shawn Farkas gives an overview of the new SecureString class which goes a long way to Make Strings more Secure. (via Dana Epp.)

    [Listening to: Soundgarden - Pretty Noose]

    Wednesday, May 26, 2004

    Path.Combine

    An extremely useful (albeit old) tidbit from Craig Andera on Path.Combine.

    [Listening to: KoRn - Ass Itch]

    Mvp.Xml - XML cool utilities

    From Daniel Cazzulino, Mvp.Xml: XML cool utilities

    Looks like some useful tools but once again I'm unsure of the licensing. It uses both the Common Public License and a "Other/Proprietary License". Haven't downloaded yet to see what that means.

    Can anyone out there dumb these licenses down for the likes of me?

    [Listening to: Sarah MacLachlan & Delerium - Silence]

    WSE 2.0 Tracing Utility

    From the Daily Grind, Mike Taulty's WSE 2.0 Tracing Utility.

    I'd be a fool to not realize that I'll need web services somewhere. I'd be a bigger fool to think I'd get them right the first time and not need a tracing utility. Know what you are I always say.

    [Listening to: KoRn - Counting]

    Tuesday, May 25, 2004

    XPathReader

    Found this useful nugget from Oleg Tkachenko: Signs on the Sand: On XPathReader. Lot's of other useful nuggets too.

    By way of Daniel Cazzulino here.

    [Listening to: Beatles - Something]

    Threat Modeling Tool now available

    Lifted from Michael Howard's must-read blog:

    Threat Modeling Tool now available.


    Finally, it has been posted - Frank Swiderski's Threat modeling tool is now available for free download on MSDN. From the blurb:

    The Threat Modeling Tool allows users to create threat model documents for applications. It organizes relevant data points, such as entry points, assets, trust levels, data flow diagrams, threats, threat trees, and vulnerabilities into an easy-to-use tree-based view. The tool saves the document as XML, and will export to HTML and MHT using the included XSLTs, or a custom transform supplied by the user.


    Read Michael's article original here.

    [Listening to: Beastie Boys - Fight for your Right]

    Web Services Developer Center Home: Programming with Web Services Enhancements 2.0 (Web Services Enhancements (WSE) Technical Articles)

    Courtesy of the Daily Grind: a couple of useful articles on Web Services 2.0

  • Web Services Enhancements 2.0
  • Programming with Web Services Enhancements 2.0

  • [Listening to: Faith No More - Gentle Art of Making Enemies]

    Eric's list of the Best C# Bloggers

    Eric Gunnerson has compiled a list of the Best C# Bloggers. Who knows, maybe next year...

    [Listening to: Iron Maiden - Mother Russia]

    Copy Constructors vs ICloneable

    Shawn A Van Ness revisits his previous assumptions of Copy Constructors vs ICloneable. Courtesy of Paul Bartlett.

    [Listening to: Black Sabbath - Children of the Grave]

    Enterprise Service Application reconfiguration

    Not exactly sure if I'm going to need this but it kind of "smells" like it might. So, here it is
    Enterprise Service Application reconfiguration from Ingo Rammer.

    [Listening to: Sarah McLachlan - Unchained Melody]

    Thursday, May 20, 2004

    FREE XDN Professional for .NET Bloggers

    Mike Schinkel, president of Xtras.Net is generously offering a
    FREE XDN Professional Membership for anyone who blogs frequently about .NET throughout the month of May 2004. If you are a .NET blogger, see Mike's post for how to get your free XDN membership.

    First saw this in the Daily Grind from Mike Gunderloy.

    Wednesday, May 19, 2004

    Enterprise Instrumentation Framework (EIF) vs log4net

    Daniel Cazzulino compares the Enterprise Instrumentation Framework and log4net here.

    I've tried EIF both personnally at work and I have to agree: it's too heavy for me. Who knows, maybe I'll change my mind but for right now: I like the simplicity of log4net.

    I have a question (before I start using it): Can anyone boil down the Apache licence v 2.0 to plain english. This is the part that has always made be paranoid with open source licenses: I'm never 100% sure of whether or not, but using an OS tool/library/whatever, I would need to make my source available.

    This particular license seems quite open, but, if I use log4net in my app, does that make my app a "Derivative work"? I'm thinking not because in section 1 in the definition of "Derivative Works" (emphasis is my own):

    For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

    Am I just being paranoid? Advice is welcome.

    [Listening to: Marilyn Manson - Irresposible Hate Anthem (Live)]

    Using the XSLT Transform with XML Signatures

    Shawn Farkas posts on
    Using the XSLT Transform with XML Signatures. Not sure I really get when I will need to use it, but I sense that I will. Posted here for posterity.

    [Listening to: Eminem - Kids]

    Making Class Library Project your default

    Many thanks to Daniel Cazzulino for finding a way to
    Make Class Library Project your default. (By way of Armand du Plessis.)

    Tuesday, May 18, 2004

    NTime - Performance unit testing tool

    Everyone needs a good profiler. I'll check this out (when I actually have something to profile.)

    NTime - Performance unit testing tool (Courtesy of the PowerToys WebLog)

    [Listening to: Daniela Mercury - Rosa Negra]

    Managed DPAPI Part I: ProtectedData

    Shawn Farkas shows how to use the new Managed DPAPI in

  • Part I: ProtectedData
  • Part II: ProtectedMemory.

  • I figure if I'm going to button down the configuration of this system I'll need something like this.

    [Listening to: Styx - Renegade]

    Assembly.LoadFrom + FileNotFoundException

    Jonathan gives us a solution to an
    Assembly Loading puzzle. I will eventually need to load my own assemblies, so any hints, workarounds, fixes, best practices: straight to the blog.

    Update: He's posted a follow up here

    Monday, May 17, 2004

    IT Security at Microsoft Overview

    Michael Howard points to an overview of IT Security at Microsoft. If you care about security (rhetorical question) you should be reading his blog.

    Friday, May 14, 2004

    App.config Examples

    Suzanne Cook gives some useful examples of App.config.

    She doesn't post often, but when she does it's a keeper.

    [Listening to: Tripping Daisy - Rise]

    Thursday, May 13, 2004

    Like the new skin?

    Couldn't help myself. Blogger.com has added a ton of new features.

    [Listening to: Adema - Freaking Out]

    Moving from NUnit to MbUnit -- here goes nothing

    With some encouragement from my first ever Blog Comment (thank you Jonathan) I'm trying to convert from NUnit to MbUnit. I figure I'd document as I go.

    Having dropped the latest version of MbUnit onto my VPC I figure I'd load some existing assemblies to see what happens when using the MbUnit GUI against an NUnit assembly.

    First, add an assembly. Hang on... no menus. I had a brain-blip. For a second or two (I hope it was only that long) I couldn't figure out just what to do. Thankfully my well trained right-mouse-button-index-finger jumped in and pulled me out of my haze. Of course, the context menu. Where was I again? [Is it time for my pudding?]

    Oh, yes, adding assemblies. Adding my previously compiled assembly gave me a security exception. I guess this isn't too much of a surprise as I'm developing as a non-admin. In particular it was a security error from Microsoft.ApplicationBlocks.ExceptionManagement trying to access the registry. Cool thing is, this error "went away." Okay so I cheated. I ran the app as an admin, then I ran as my user again.

    Running a second time I get a different error (progress, no?) It's a System.BadImageFormatException. I know this one. Since I'm running the .NET 1.1 binary on a Whidbey/CTP2005/.NET 2.0 machine it tips over. I can deal with that. Just as the following line to the MbUnit.GUI.exe.config
            <supportedRuntime version="v2.0.40301" />

    Okay, third times a charm right. Not quite. The app runs. Adding assemblies appears to be working but nothing happens. Running tests does nothing. Removing assemblies does nothing.

    Let's try recompiling with MbUnit...

    First removing all references to NUnit.Framework; easy enough.
    Add references to MbUnit.Framework.dll. You'll need MbUnit.Core.dll too.
    Replace using NUnit.Framework; with using MbUnit.Framework; (for TestFixtureAttrbite a.k.a [TestFixture]) AND using MbUnit.Core.Framework; (for TestAttribute a.k.a [Test])

    This probably would've been all that's required except that I have some custom NUnit type assert code for things that NUnit missed like AreEqual methods for System.Xml and System.Xml.XPath. So for that there were a bunch of code changes required. I can't help but notice the MbUnit.Core.Framework.Xml namespace. Perchange my custom stuff can go by-by?

    BTW: If you aren't using Lutz Roeders amazing .NET Reflector why don't you? Developing in .NET with it is like a kybrd wtht vwls.

    So far, so good. I have an assembly.

    WooHoo. I'm able to run the tests. A few aren't working, but hey, I changed some code and replace the whole unit testing framework. 2 failures out of 64 tests isn't too bad (I'll look at those later.)

    There's a few hiccups with the GUI (loading multiple assemblies caused some grief) but it mostly worked. And the HTML report is sweeet. Once I get the kinks ironed out I'll post again.

    That's all for now. Got to get some sleep for my day job. Sigh.

    [Listening to: Rob Zombie - Return of the Phantom Stranger]

    Composite Unit Testing with MbUnit

    Jonathan de Halleux uses MBUnit for Composite Unit Testing. I so have to try this.

    I originally saw this in a CodeProject article. It seemed almost useful then (no offence Jonathan) but it didn't click until now. I'll let you know how it goes.

    Beware File.OpenWrite

    I can just see me falling for this. CraigBlog - Beware File.OpenWrite. Courtesy of Craig Andera

    Exclusive read access to MSMQs

    Jeff Key gives tips on
    exclusive read access to an MSMQ queue. This might be useful.

    Wednesday, May 12, 2004

    New version of SnippetCompiler

    Via the Larkware Daily Grind there is a new version of Jeff Key's awesome SnippetCompiler App

    Wednesday, April 07, 2004

    Whoo boy it's been a while

    As you can tell it's been a while since my last blog (not counting my shameless plug for some free software.)

    As sad as it is to admit, the "real world" interfered with my plans. Neo where are you when I need you.

    A lot's happened since I last worked on anything. Primarily, Whidbey has been released in a couple flavours. First the PDC bits, then, more recently, the VS 2005 Community Tech Preview. I figured it would be an excellent opportunity to use the next version of the tools and start HookUp over again. Let's face it, at the pace I'm going I'll hit version 1.0 right around the time that VS 2020 comes out.

    This also provides an opportunity to start a "proper" Test Driven Development (TDD) project. I've done a fair amount with NUnit while pretending to do TDD, but to be honest it was more of a TSAABOCIWD approach (Test Sometime After A Bunch Of Code Is Written Development.)

    I plan to hook in NUnit from the start. Also I will be making use of FxCop which is currently at version 1.30. There's no better time to start.

    Following the advice of a number of blogs I've avoided SourceSafe this time. I played briefly with Subversion and TortoiseSVN with limited success. After a few dozen pages of docs I got my heirarchy set up and was starting to get accustomed to the environment when I corrupted my database. Not a great start. It's a crying shame too, the integration was nice.

    So, instead, I switched to Vault. It appealed to me for a couple reasons: 1) it's a commercial product, so hopefully is more stable (fingers are crossed.) 2) it's free for single users. The drawback I see is the need for a SQL server. Since I'm running the Whidbey stuff in a VPC instance the extra cycles for SQL server hurt a bit.

    I'll leave it there for now. Wish me luck

    [Listening to: Puddle of Mudd - Bring me Down]

    Wednesday, February 04, 2004

    Free defect tracker from Axosoft

    Axosoft is offering bloggers a free 3-user version of their .NET & SQL based OnTime defect tracking software (bug tracking software). For more information, visit http://www.axosoft.com/Free3UserOffer.htm.

    How can I resist?