Using an abstract base class for Windows Forms

I found the need to use an abstract base class. This architecture forces each detail form to provide an implementation for a Save() method.

(1) Unfortunately, the Windows Forms designer doesn’t support inheriting from an abstract base class. Fortunately, I was able to use a type descriptor to tell the designer to use a custom concrete class that inherits from the abstract class.

(2) Unfortunately, this caused some user interface element z-ordering code to fail as it relied on variables being set before it was called; these variables were not yet set by the designer at the point it was called. Fortunately, I was able to create a method on the base class and call it from the initialization code: this fixed the issue.

(3) Unfortunately, this method call was placed among auto generated code and was deleted, of course, when the designer recreated the code. Fortunately, I was able to create a property which does the work and gets persisted by the designer.

It’s been a lot of work just to make an abstract base class compatible with the windows forms designer. Now that it works, I may wish to consider refactoring it.

Excited about Windows 7

I’ve been rather excited about the release of Windows 7 RC (release candidate). I have been running the beta for some time now and have found that I appreciate several of the features in this new release of my operating system.

  • View windows side-by-side by dragging them
  • Maximize windows by dragging them to the top of the screen
  • Enhanced search (at Start button)
  • Quicker boot, fast resume from standby
  • Opening files faster with just two clicks and no desktop clutter (using jump lists)
  • Watching video across a remote desktop session

A feature I wish was available in all versions of Windows: Problem Steps Recorder.

If you want to see some of these in action, Microsoft has released a Windows 7snack.

Better than open source

I’ve spent some time, recently, integrating third-party time tracking software to work with our payroll workflow. It just doesn’t happen to code billable time the way we need to do it. I’m also involved on the other end, getting our accounting system to receive the time data. The same company that makes the time tracking software also provides a way of sending it to our accounting system (in another, licensable, application), but it is not quite what we need, either.

Not only in my professional career do I find challenges in getting disparate systems to share information, but also on a regular basis as a consumer. I’ve recently been trying to move from a Community Server blogging system to WordPress blogs. I’m preparing to upgrade my operating system to Windows 7 RC. I use online applications that change from time to time.

I can see why some people feel it is easier to start over instead of migrating data when it comes to using a new application, especially in small businesses. If you look at the examples I have used above, in reverse order, you’ll recognize that using a new version of an online application is usually straightforward. There may be a notice about new features and changes, but there’s not much work on the users’ end to get their information into the new interface.

If you consider a desktop application update or operating system update, there may be some work required – as in updating Microsoft Office file formats to a latest version – but there is very likely an upgrade path available.

As soon as we consider moving information from one proprietary system to another one, there is a tremendous amount of work involved. This work has been reduced in a few select cases, but it feels like wading through water on a sandy and pebble-strewn beach trying to find a lost ring.

Try migrating image tags from Microsoft Windows Photo Gallery to Microsoft Expression Media. Good luck! It’s another one of those situations where a seemingly natural transition is not available. As for my blog migration plans, I’ve not yet been able to put my existings posts up on WordPress. I’m trying to migrate from one blog to another, that seems natural, right? I’m not trying to pull my Facebook posts into a blog, or the letters I have sent to my family.

Back to the example about extending the usefulness of a time tracking system. With 100+ flavors of such software available in the Google Directory, wouldn’t it seem that the wheel was already reinvented enough so that we could sift through what’s available and find an excellent solution? Here’s what keeps me in the business of developing software: we needed to fine tune the way a product works, and there’s no simple, straightforward, predictable way of  making those changes (unless the product creators thought of the type of change you want to make). So we end up with a need to understand how to move information through the existing product. Oh and there’s little documentation on how to do that.

Plenty of opportunity lies ahead. Developers could write pages of documentation to make extending their solutions easier, but they would need to include some functionality that their software doesn’t directly need to function. You tend to see software that can import information more than you see software that shares what it “knows.”  WCF encourages exchange of information, but I haven’t yet seen a way of exposing data in a completely transparent fashion without spending considerable time developing such an API. Twenty or thirty years from now, will we see more connected applications? I hope we will. And I hope it will be easier to connect them.

Who’s done the best making your information transportable?

Managing my blog

Now that I have used Microsoft Windows Live Writer and WordPress for a few days, I want to state my enthusiasm! I’ve found Live Writer to provide most of the features I want, and some really nice features that Word 2007 doesn’t provide like extensibility and setting publish dates in the future. I’ve installed a useful plug-in for pasting code from visual studio. I love the way Live Writer creates thumbnail previews of my pictures in my post. It has an extremely smooth setup process with WordPress, as well.

I’m still trying to pick a theme that works well, and isn’t too distracting. I’m sure this will change again. Pasting code from Visual Studio that is too wide, tends to get hidden, so I either have to use some tricky coding, or shorten any offending lines. It is helpful that Live Writer shows me a preview of how my post will appear. I hope WordPress ads don’t start appearing all over my pages, but I’m taking this risk.

I can say that I’m excited about this new setup.