No-Brainer Awards

Click on an item to get more information

ASP.NET Development

 General Software Development

Backup Utilities

There are things I've found in the technology world that are so good that they require virtually no thought regarding there use.  Here are the products that I think are no-brainers, sorted by category.

ASP.NET Development

  

Microsoft Enterprise Library 

Microsoft Enterprise Library, free from their Patterns and Practices group, adds some powerful capabilities to ASP.NET.  It's a "shared source" gift written by some very smart people at Microsoft - 81,722 lines of code (and 54,481 lines of comments) in 1,470 files!

The nifty thing about the Library is that all of this code makes it easy for you to write complex things in a few lines.  It consists of several areas of functionality, called application blocks, which are mostly usable for both ASP.NET and Windows apps.  As of this writing, the current version (3.0) contains 11 application blocks, such as:

  • Cryptography - aids in creation of data encryption and hashing.  Also makes it easy to safely deploy keys to multiple servers.
  • Data Access - vastly reduces the amount of code needed for data access.
  • Exception handling - sets up exception policies - you can determine whether exceptions are logged, replaced, and so forth.  You can add code to send email or text messages when very bad exceptions happen, and so forth.

The only downside is the documentation.  The blocks (at least the ones I've tried) are really simple to use - but the documentation is very in-depth, where  page of examples would do the trick better.  In fact, your best bet for learning the blocks is to find 3rd-party articles on the web that demonstrate their use. 

Anyone creating .NET apps would be doing themselves a grave disservice if they overlook this gem.  A couple of days of learning will vastly improve product quality and compress development time.

Resource Refactoring Tool for Visual Studio 2005

Localizing an application generally consists of:

  1. Developing the app with all hard coded strings in a single language. 
  2. Moving the hard-coded strings into a resource file where they are assigned to variables. 
  3. Searching through the code and change each hard-coded strings into the appropriate variable.
  4. Building a separate resource file for each language to be supported.
  5. Reading the appropriate language resource file to the string variables before a string is used.

This is a huge, tedious, and painful.

In the past I've used  the String Resource Generator tool to make this process somewhat easier.  This tool allows you to build a text file for each language, with variables and their associated strings.  The nice thing is that these are picked up by Visual Studio's Intellisense, making life much easier when going back through the code to replace the strings with variables (step 3 above).

Now Microsoft has introduced the Resource Refactoring Tool, a Visual Studio 2005 add-in that should should make this process a whole lot easier.  As you go through the code, simply right-click on a literal, select Refactor>Extract to Resource, and a pop-up window asks you for the details: the associated variable name, whether to replace all instances with this variable, and so forth.  Very simple.

While I haven't used the Resource Refactoring Tool in an actual project yet, it seems like a no-brainer unless it's somehow broken.

General Software Development 

  

CVS (or Subversion)

Basically, you're practicing unsafe coding if you don't use a version control system.   You will lose changes that you've made to your code and not be able to figure out when they disappeared, and thus will have to rewrite them - I guarantee it.

CVS is as old as dirt, but it's free and works incredibly well.  Basically, it's a system for keeping a project's source code up-to-date when multiple developers are working on a project.  A central Unix-ish server contains the master repository of the sources (and other important files).  A mirror of the repository lives on each developers drive.  When a developer makes a change, they commit the changed local file to the repository.  Developers also periodically update their local source files from the latest in the repository.  CVS is smart enough to deal with the details, such as what happens when two developers make changes on the same file at the same time.  Bottom line is that in years of using CVS, I can't recall a single time where it caused me grief.

The only downsides that I've found are:

  1. Command-line interface is - well - Unixian.  Lots of cryptic switches to memorize.  (I know, some consider this to be a benefit...)
  2. It does not integrate bug tracking with version control.  This is a very useful thing to have for maintaining a design controls and quality systems.  However, this can be accomplished in other ways, say, a spreadsheet that keeps track of which issues were (hopefully) fixed in which version, and so forth.

An alternative to CVS, named Subversion, is also available.  It seems to have some advantages and disadvantages.  Mostly, it makes a few operations easier (moving and renaming source files).  However, since I've had no problems with CVS, I've stuck to CVS.

Microsoft also has a commercial (e.g., "costs money") version control system, called Visual Source Safe.  By all accounts, even if it were free it would lag far behind CVS and subversion.

TortoiseCVS (and TortoiseSVN?)

TortoiseCVS is a free CVS GUI front end that eliminates the need for Windows users to navigate a command-line interface.  It makes using CVS an absolute breeze.

TortoiseCVS integrates with Windows Explorer, which is perfect.  Simply right-click on the folder or file to perform the CVS operation on, and select the operation.  You'll be presented with choices if appropriate.  And that's it.

For example, after I write some code, I right-click on the root of my project's source tree and select CVS Commit. I'm presented with a window that lists all of the files that I've changed from their state in the repository, so I can unselect any that I dont want to commit.  There's also a text box where I can add a comment, e.g., "fixed issues 12345 and 12346.", for later reference.  I click the OK button, and I'm done.  CVS the way it oughta be.

One suggestion I have is to use TortoiseCVS with SSH to keep communications secure - there are instructions for this in the TortoiseCVS documentation.

TortoiseSVN is the TortoiseCVS-equivalent for Subversion.  I assume that it's as good as TortoiseCVS, but I haven't actually tried it.

Backup Utilities

  

Mozy Backup Service

Mozy (www.mozy.com) is just the 'set and forget' backup that's perfect for most folks.  Mozy quietly works in the background, backing up the files and directories you specify to Mozy's servers via the Internet.  If your computer ever crashes, or if you do something bad to a file, then you can get onto Mozy's site and download a copy or have it snailmailed to you.

The process is automatic and unobtrusive: Mozy can be set to only back up when the computer is idle, or at certain times, and to tell you if a backup hasn't occurred in some time.  Backups are encrypted in transit and on Mozy's server.

I've been using Mozy for months, and it's as close to a perfect service as I've experienced.  It's just the thing to set up for non-tech-savvy users. It doesn't take the place of a periodic image of your hard drive, but it makes certain that your important files are safe.

Pricing is extremely attractive.  As of this writing, a 2 GB account for personal use is free.  An unlimited-storage account for personal use is $4.95 a month.  Corporate use (through www.mozypro.com) $3.95 + $0.50/GB each month.