This blog has been moved to

Monday, December 18, 2006

I am Time Magazine's Person of the Year!

I wanted to take this opportunity to thank all my loyal readers that helped me achieve this award. Special thanks go to my wife, Christine, and family that have sacrificed so much so that I could write these blog posts.

Person of the Year- You

Monday, December 11, 2006

The beta for SQL Prompt 3 is now available

I just installed the beta for SQL Prompt 3 today. For those that don't know what SQL Prompt is, it is basically Intellisense for Query Analyzer. They are currently giving away v2, but they are planning on selling v3 (get v2 while it lasts). If you like Intellisense in Visual Studio and you also write T-SQL, you'll probably appreciate the productivity improvements with SQL Prompt.

They've made some great improvements to the Intellisense dropdown. It is, of course, context sensitive, but it is also organized in categories. It allows you to view just a certain set of candidates (such as columns or functions). It's vaguely reminiscent of Visual Assist X (VA). It would be nice if they made it work more like VA. One of the things I like most about VA is that I can type any part of a method/property/etc and it will list it in the dropdown. If you have a couple of hundred choices, being able to type "order" and getting all of the candidates that include "order" somewhere in the name is very handy!

Another feature that I really like about the new SQL Prompt 3 is the auto-expand. If you type out a stored procedure name, SQL Prompt 3 can automatically expand the statement to include the parameters as well. You can also expand a * to the complete list of columns simply by hitting TAB when the caret is next to the *.

SQL Prompt 3 offers many configurable options to allow you to setup your environment the way you like it. It also includes the ability to add snippets that can be automatically expanded for common or complex SQL statements.

I'm glad they decided to limit the number of products they support. I use Query Analyzer exclusively for writing SQL (I tried using Visual Studio, but could never get used to it). I would much prefer a product that works very well for one or two products than one that almost works ok for a half dozen very different products. One thing I often wonder is why they didn't just create their own IDE for SQL scripts. It seems like it would integrate well with their other products (which I haven't used, but they look intriguing). It would be nice to have a SQL IDE that integrated with VSS. Perhaps they could have even integrated it with Visual Studio (or at least be able to open up Visual Studio projects to get to the SQL scripts embedded in them).

A word of warning, the Automatic Closing Characters feature doesn't work very well. In fact, I had to turn it off. Often times I would type a single tick and it wouldn't add the second tick. However, when I added the second one, it would add a third! Fairly annoying. Even when it did work correctly, it still suffers the same annoying problem as most tools that implement this which is if you type the closing character yourself, you end up having to remove the extras. VA handles this much better. It seems to remember when it automatically adds a closing char and will remove it if you type it yourself (VA is the first tool that I have not turned this feature off).

Another issue that I've seen with SQL Prompt 3 are that the columns in the dropdown cannot be resized. This means I usually only see the first part of the column name and rarely see the column type. I can expand the whole dropdown, but all of the columns expand with it. This means the dropdown has to be absurdly wide in order to show the entire column name (good thing I have a widescreen monitor :).

If red-gate is reading this, a couple of features that I would like to see in the release (at least the next version), are...

  • Expand UPDATE and INSERT statements. It would really save me a lot of time if I was able to type "UPDATE MyTable[TAB]" and have the columns laid out for me similar to the auto-expand feature for stored procedures. It's much easier to delete the ones I don't want (even if it's most of them) than to add the ones I do want.
  • Being able to view a list of references in a script. For instance, view all the lines that use the Employee table or the FirstName column from the Employee table, or the @DoSomething variable.
  • Provide some SQL refactoring capabilities. Changing the name of a variable is the only one that comes to mind, but I'm sure if I spent some time on this I would find some other useful refactorings in a SQL script.
  • Spell check. Who can't use a good spell check program to check their comments :). This is something I didn't realize I needed in an IDE until I installed VA.

If you develop T-SQL scripts, SQL Prompt 3 will greatly improve your productivity. This is a must-have tool for all T-SQL developers.

Here's the link to the announcement on red-gates website...

This post turned out much longer than I planned :). I hope you have found the information useful.

Saturday, December 02, 2006

Amazing how much times have changed.

This is an article about my mom from a long time ago (obviously). She was one of the first kids to get the polio vaccination. Do you see anything odd about how much information the newspaper provided about an 8 year old child? Name, age, address, school, parents names. I'm surprised they didn't just put her whole daily schedule in the paper.

Posted by Picasa

Friday, November 17, 2006

Securing Text Data

Perhaps it's just me, but trying to figure out how to secure text data is confusing. Based on all of the articles available, if you are creating an application that uses passwords or other sensitive information, you should use a SecureString, that much is clear. However, a SecureString isn't very useful since it is encrypted (you can't compare a SecureString against a database value, pass it to your credit card processing, etc).

After many hours of research, I was able to find a single example of how to secure text in an MSDN article (of course, it's only mentioned in passing). How to encrypt and decrypt a file by using Visual Basic .NET or Visual Basic 2005 contains a reference to the ZeroMemory API that allows you to clear a string from memory and GCHandle to make sure you don't end up with a bunch of copies of the string.

The following code will create a string, pin it in memory using GCHandle (to make sure it doesn't get moved or have multiple copies made), then destroy the contents of the string so that it can't be held in memory.

    Sub Main()
Dim str As String = "HI"
Dim gh As GCHandle = GCHandle.Alloc(str)
ZeroMemory(str, str.Length * 2)
End Sub

Private Declare Sub ZeroMemory Lib "kernel32.dll" _
Alias "RtlZeroMemory" _
(ByVal Destination As String, _
ByVal Length As Integer)

The idea behind this is to leave the text in memory for a very short period of time to make it very difficult for a hacker to get. The sensitive text can be stored in a SecureString until you are ready to use it.

Before I found the ZeroMemory solution, I had written another one that I'm going to post here just because it seems interesting. Basically, I use reflection to call a method on System.String that is intended to be used by StringBuilder that will replace a char without making a copy of the string (typically Strings are immutable, any changes to it result in a copy of the string).

    Public Shared Sub DestroyString(ByVal str As String)
Dim mi As MethodInfo
mi = GetType(String).GetMethod( _
"ReplaceCharInPlace", _
BindingFlags.NonPublic _
Or BindingFlags.Instance)

For i As Integer = 0 To str.Length - 1
Dim ch As Char = str(i)
Dim args() As Object
args = New Object() {ch, ChrW(0), i, 1, 0}
mi.Invoke(str, args)
End Sub

I am currently working on another article for Code Project on securing text data, complete with a PasswordBox WinForm control, SecurePassword class, and more. Once it is available, I will post a link to it here.

Saturday, November 11, 2006

Event-Based Asynchronous WebRequest

I've created my first Code Project article! I was looking for a place to upload some code so I could share it from my blog, but the only place that I could find was Code Project, of course that meant that I had to write an article too.

If you are interested in reading about using the WebRequest/WebResponse classes (including processing of the response stream) or implementing the Event-Based Asynchronous Pattern (the pattern used by the BackgroundWorker component), you can read my article at Event-Based Asynchronous WebRequest.

The article includes a project that contains a BackgroundWebRequest component that can be used to perform asynchronous web requests from a WinForm application.

Friday, November 10, 2006

The Holy Grail of .Net Threading

The Epiphany

I was working on a project that needed to be able to process a WebRequest/WebResponse from a thread within a WinForm application. I tried several approaches, including using a BackgroundWorker, however, what I really wanted to do was create my own component similar to the BackgroundWorker, but specifically for WebRequests. Unfortunately, I didn't know how they did it.

As I was driving home from work I had an epiphany. The obvious solution would be to use Reflector for .NET to figure out how Microsoft did it.

Meeting Up With Sir Galahad

I opened the class up in Reflector and used the File Disassembler (an add-in to Reflector) to output it as a VB class. I waded through the code trying to understand what it did when I found the first hint as to the location of the Holy Grail, the AsyncOperation class.

This class looked important in the threading for BackgroundWorker, so I looked up the documentation for it. In the first sentence of the remarks, it contained a link to the Holy Grail.

The Holy Grail of .Net Threading

The Event-based Asynchronous Pattern is a design pattern that is useful for creating a class that can run operations on a separate thread, but will raise events on the main thread (very useful for threading in WinForms).

MSDN has a series of articles that clearly describe this pattern and how to implement it. The Asynchronous Programming Design Patterns node in the MSDN documentation discusses several different asynchronous patterns that you can use.

Wednesday, November 08, 2006

ClickOnce Deployment Rocks!

Just recently I configured an internal tool I'm working on to use ClickOnce deployment. It is the first time I've used it and I have to say that it certainly lives up to it's name.

At least for a small, simple application like the one I've been working on, all you have to do is open up the project properties and push the "Publish Now" button under the Publish tab (VB.Net anyway).

It automatically generates a webpage that other people can use to install the application and, if the application is updated, it will automatically reinstall the next time the user opens it.

For the app I was working on, the most difficult thing to figure out was how to include some assemblies I was referencing from the GAC. To do this, open the project properties, go to the Publish tab, open Application Files, and change the Publish Status to Include. When somebody installs the application, the assemblies are automatically copied locally (they are not installed to the GAC).

If you are interested in where the files are installed on the users machine, it appears they are placed in C:\Documents and Settings\<user>\Local Settings\Apps\2.0\. The application will be in a directory with a randomly generated name.

Monday, November 06, 2006

Book Review - Engineering Your Start-up

Book: Engineering Your Start-Up: A Guide for the High-Tech Entrepreneur

Author: James A. Swanson, Michael L. Baird

Rating: Recommended

Review: This book is focused on financing a high-tech startup. Although I recommend the self-funded approach, it's important to know the ins and outs of financing so that when you want to grow your self-funded company, you haven't made any major mistakes that will make that more difficult than it already is.

This book is a bit dry and technically challenging (at least for non-finance people). However, the authors do a decent job of defining the jargon used in the industry.

A few of the gold nuggets in the book...

  • Ch 6, Startup Financing Terminology and Stages - This includes some of the most basic terminology that a entrepreneur should know to keep from looking too foolish :).
  • Ch 8, Evaluate Markets and Target Customers - Reinforces the arguments for a small (but potentially profitable), niche market and discusses ways to analyze the market to make sure that you can succeed (at least increase your chances).
  • Ch 20, The Legal Form of Your Startup - Definitions for all of the basic types of organizations (Class C, Class S, Partnerships, etc).
  • Ch 21, Making the Startup Decision - Things you need to consider when starting a business, especially while still working for another company.

Monday, October 30, 2006

Protecting Data in .Net

Security is a big issue in computing these days. One way you can protect user's data is by using the DPAPI (Data Protection Application Programming Interface) available on Windows.

The article Managed DPAPI Part I: ProtectedData provides a very good explanation of what this is, so I won't bore you with the details here, but I will provide you with a code sample that you can use. To use this code sample, simply create a C# console application in VS.Net 2005 and paste this into the main file (I believe it will be called Program.cs).

One thing that should be mentioned, this does not protect the data in memory. It can be used to protect data that is written out to disk, but an industrious hacker can get the sensitive information out of memory. Check out Managed DPAPI Part II: ProtectedMemory for more information on protecting data while it is in memory.

using System;
using System.Security.Cryptography; // reference assembly System.Security.dll
using System.Text;

namespace DPAPIExample
class Program
static void Main(string[] args)
string test = "hello world";
string encryptedValue;
string decryptedValue;

encryptedValue = Encrypt(test);
decryptedValue = Decrypt(encryptedValue);

// This is an article on using the ProtectedData API (a wrapper around DPAPI)
private static byte[] sEntropy = System.Text.Encoding.Unicode.GetBytes("put whatever you want here");

public static string Encrypt(string text)
Byte[] data = Encoding.Unicode.GetBytes(text);
Byte[] protectedData = ProtectedData.Protect(data, sEntropy, DataProtectionScope.CurrentUser);
return Convert.ToBase64String(protectedData);

public static string Decrypt(string encryptedText)
Byte[] protectedData = Convert.FromBase64String(encryptedText);
Byte[] data = ProtectedData.Unprotect(protectedData, sEntropy, DataProtectionScope.CurrentUser);
string text = Encoding.Unicode.GetString(data);
return text;

Friday, October 20, 2006

IE 7

I've been using Firefox for some time now and I really like it. However, being a technology junky, I felt compelled to install IE 7 as soon as it was released (I tend to avoid betas if at all possible).

IE 7 definitely feels like a modern browser. It has tabbed navigation, redesigned and streamlined toolbars, and a built-in RSS feed reader (though I plan on continuing to use Thunderbird for the RSS feeds I subscribe to). IE 7 also has the ability to add extensions, however, I haven't found any that I want to use (where's the Bork Bork Bork! translator?) and most of them cost money.

Firefox still has some very compelling features (specifically a better selection of extensions), however, I think I will stick with IE 7 for now (at least until Firefox 2 is released :).

Thursday, October 19, 2006

Project Vote Smart

If you're planning to vote, you should check out Project Vote Smart. It's a great, non-partisan website that essentially aggregates a lot of information about politics, including voting records.

They also offer a survey that candidates can fill out (voluntary) that helps them define their position on many relevant issues (the survey is called NPAT - National Political Awareness Test). You can find out some very interesting (scary?) stuff about candidates positions.

The one thing I would love to see on the website is more community discussion. It would be interesting to be able to have an open debate about current issues, especially over legislation. We always hear about how important legislation is often hijacked to get unpopular (corrupt?) legislation passed. An open community discussion on this website would quickly show bad legislation for what it is and maybe start finding out some bad legislators.

Personally, I'm not too happy about Donald Young (R) the Alaskan representative and chair of the Transportation and Infrastructure committee.

``I'd be silly if I didn't take advantage of my chairmanship,'' Young said, according to the Anchorage Daily News. ``I think I did a pretty good job.'' Bloomberg, Sept 2nd, 2006

Monday, October 16, 2006

Best Financial Advice Ever!!!

Dilbert's Unified Theory of Everything Financial'

1. Make a will

2 .Pay off your credit cards

3. Get term life insurance if you have a family to support

4. Fund your 401k to the maximum

5. Fund your IRA to the maximum

6. Buy a house if you want to live in a house and can afford it

7. Put six months worth of expenses in a money-market account

8. Take whatever money is left over and invest 70% in a stock index fund and 30% in a bond fund through any discount broker and never touch it until retirement

9. If any of this confuses you, or you have something special going on (retirement, college planning, tax issues), hire a fee-based financial planner, not one who charges a percentage of your portfolio

Tuesday, October 10, 2006

PowerShell Developer's Conference

I just finished the PowerShell developer's conference and it looks like Microsoft is pretty serious about it. A number of Microsoft teams are developing enterprise products around PowerShell (such as Exchange 2007).

Microsoft is pushing the use of PowerShell snapins to be coupled with MMC 3.0 snapins. Basically they want developers to create PowerShell snapins that provide the functionality to administer an application and then create a MMC 3.0 snapin to provide the GUI environment (this would use the PowerShell API to run the PowerShell snapin).

This approach makes administering an application across the enterprise much simpler. Many I.T. administrators prefer a command-line over a GUI, especially if they can create a script to perform repetitive tasks.

I'm hoping that Microsoft builds PowerShell into Visual Studio. It would be nice to have such a rich command-line hosted within VS, especially if it has full access to the IDE object model (possibly an alternative to some macros). Unfortunately they were unable to give us any news about upcoming uses of PowerShell because the event was being recorded for distribution on the Internet and so it was not considered an "NDA" event.

They did have good swag (second definition:)though. They gave out a PowerShell labeled USB drive and t-shirt as well as a Microsoft System Center scarf and a foam Ch 9 guy.

Friday, October 06, 2006

PowerShell = Command-line + .Net

PowerShell is the future of the command-line for Windows. It's most significant feature is the fact that it is built around .Net and is easily extendable by .Net. In fact, you can use reflection to access any .Net object!

It includes the ability to assign alias's to frequently used commands, define functions, and call a number of pre-defined (and very useful) CmdLets (the equivalent of a command-line utility). It also has it's own scripting language including looping and conditional constructs reminiscent of C#.

Another feature I really like is the ability to navigate to non-filesystem drives, such as the registry. This allows you to navigate the registry the same way you would navigate the file system. You can define your own drives based on the drive providers that come with PowerShell (there are a number of them) or you can create your own provider using .Net.

PowerShell has not been released yet (due Q4 2006), however, you can download RC2.

PowerShell Home Page

Download PowerShell

PowerShell Team Blog

Thursday, October 05, 2006

SQL Intellisense, Intellisense for SQL Server - SQL Prompt

This seems to be a very cool tool I've just discovered. It runs in the tray and turns Query Analyzer (I'm not sure about other editors) into a full featured editor! It includes intellisense with auto-complete, snippets, formatting, etc.

It is currently free, but not for long. Once version 3 is released (sounds like sometime this month), they are going to start charging for it.

SQL Intellisense, Intellisense for SQL Server - SQL Prompt

Friday, September 29, 2006

Business-of-Software Book Review

This is a review of some of the books I've read over the last year concerning the business of software. I'll post more reviews as I finish some of the other books in my collection.

  • MUST READ - Micro-ISV: From Vision to Reality (Bob Walsh) - This book has a lot of information to help decide what features a product should have, who the market for the product should be, and how to market to that group. It also includes what legal issues you need to consider when launching a product. The book uses a lot of examples of real software companies to illustrate the concepts in the book.
  • MUST READ - Eric Sink on the Business of Software (Expert's Voice) (Eric Sink) - This is a collection of articles written by Eric Sink for various publications. He is the founder of SourceGear, a software company that produces a version control system (he also has a great blog!). The articles seem to cover most of the aspects of running a small software company, such as marketing, funding (or how to avoid it :), hiring, etc. The articles are well written and sprinkled with enough humor to make them enjoyable. Eric is the author that coined the term "Micro-ISV".
  • Recommended - Bringing Your Product to Market...In Less Than a Year: Fast-Track Approaches to Cashing in on Your Great Idea (Don Debelak) - Ok, this is not, technically, a book on the business-of-software, but it's still a great book to read to understand many of the issues that a startup might face. It's main claim to fame is the concept of turbo-outsourcing which is pretty much a non-issue with software (unless there are specific hardware requirements). Since software has such significantly different production requirements and distribution channels than typical marketable products, I wouldn't put this on my "must read" list, but I still believe it's worth reading.

Thursday, September 28, 2006

Friday, September 22, 2006

A Scathing Review From Joel on Software

It doesn't sound like Joel is very excited about his new cell phone.

Amazing X-Ray Glasses from Sprint!

This review cracks me up. It's one of the harshest reviews I've read in a long time.

Sunday, September 17, 2006

Palm OS Programming is Hard

I've been wanting a project calculator for my Palm for quite awhile now, however, I haven't found any online, so I decided to try writing one myself. I've written Palm OS applications before (many years before) and figured I would be able to create something fairly quickly.

I was wrong. It's taken me all day just to get a Hello World application to run in the debugger (using the Palm OS Garnet Simulator), and I can't seem to launch the debugger from the Palm OS Developer Suite IDE <grrr>. There seems to be plenty of documentation for advanced concepts, but no basic tutorials.

Oh well, hopefully I will get the hang of it and have my project calculator soon. Of course, I could really use one now to figure out how much it will cost to remodel my bathroom. I guess I will just have to do it the hard way :(.

Saturday, September 16, 2006

A Lament of Tableless HTML Layout

I haven't worked seriously with web application development for a number of years and recently decided to try my hand at it again.

On the whole, I like ASP.Net 2 and master pages. ASP.Net 2 is much more like the original ASP which allowed for rapid development of web applications. I'm not saying that ASP.Net wasn't an improvement over ASP, but they did move away from some of the core benefits of ASP (such as being able to view changes to code without recompiling).

However, in my recent exploration of web development I decided to try out tableless layout, basically using divs and CSS to create a layout instead of using tables (Why avoiding tables (for layout) is important). After playing with it for a few hours, It seems that CSS (and CSS compliance) still has a way to go before this becomes as robust as tables are. It's difficult, and sometimes impossible, to get divs to work the way I want (often things that were trivial using tables).

[Table Senryƫ...]

Tables are so lovely

so easy to design

now they are no more

Now you know why I'm a programmer instead of a poet :).

Tuesday, September 12, 2006

Favorite Blogs

I mentioned that the reason I was inspired to create a blog was because of a few other blogs that I've enjoyed reading. Some of my favorites include...

  • Joel On Software - One of the best blog authors for software development on the web. Good information on software trends and the business of software.
  • Eric.Weblog() - Another great blog author and funny (in a self-deprecating way). He wrote the book Eric Sink on the Business of Software (essentially a collection of essays from his blog).
  • Scobleizer - Lots of posts, but the information is often interesting and timely (it's nice to know what's going on outside my little beige, padded box).
  • Mini-Microsoft - An anonymous Microsoft insider rant. Lengthy and bitchy posts, but interesting in a car wreck sort of way :).
  • Channel 9 - A great inside look at Microsoft's emerging technologies. It contains tons of video interviews with Microsoft employees showing off upcoming products.

Trying out Windows Live Writer

I was unhappy with the blog editor in Blogger so I've been searching for a desktop blog editor that I can use instead. After spending way too long searching for one, I decided to try out Windows Live Writer (by Microsoft). The software is still in beta, but it looks promising.

One of the things I wanted to try out is uploading photos with my post. Here's a picture of my family at a recent Luau we had in our backyard (the picture is actually taken in front of a wall hanging in our basement). Unfortunately this feature did not work for me. When I tried to publish the post, Live Writer said Blogger did not support image upload. I ended up using Picasa to upload the file which meant I had to create a post and then delete it :(.

Being new to blogging, I'm not sure what features to really look for, but Live Writer seems to have all the features I can think of, including several different views such as normal, web layout, web preview (includes template), and HTML code (it seems to create reasonable HTML) and a spell checker (very handy to avoid embarrassing myself to badly). It's also built to be extensible, and with Microsoft backing it, it's likely to have a lot of good extensions soon. The fact that it's free is compelling as well (hopefully it will stay that way).

If you are interested in a good review of this software, check out Writer is Microsoft's first Live killer app on ZD Net.

Thursday, September 07, 2006

Privacy on the Web

The battle is raging with no end in sight. What is going to kill the Internet, privacy violations or anonymity?

It seems like every website out there requires registration. Unfortunately, not every website respects their users privacy (not every website adheres to their privacy policy either). When these websites release their users information (either intentionally or not), their users email becomes stuffed with spam. I know that I have lost many valid emails due to the spam blockers that I have set up (I only allow people that are already in my contact book to email me).

On the flip side, anonymous users clog public sources of information (such as blogs) with spam and rude, obnoxious, and often times obscene posts making it difficult to find good posts in popular sites.

Recently I have become aware of a subversive element in the web in favor of anonymous browsing. A couple of my favorites are and It appears that both of these sites have been active for years, I guess I'm not as Internet savvy as I thought I was :(.

spambob is a free, anonymous, on-the-fly email service. You don't need to register to use it. When you are on a website that asks for an email address, simply type any email address you want from and, voila, instant email address. If you want to check your email, simply go to and search for the address you used. Since there's no registration, anybody on the Internet can read the email, however, since there's no registration, the email can't be traced back to you and your inbox doesn't get stuffed with spam. Clever!

BugMeNot allows people to share registration information so that you don't have to register at all! Considering the number of news sites that force registration to read articles (usually the second page of an article ) it's nice to know that you don't have to provide all of them with your personal information. If you use Firefox as your browser, there is actually a plugin that will automatically fill in the login information for you (through the context menu) so that you don't even have to go to the BugMeNot website!

The big question is "is this ethical?" This is certainly a major topic of discussion. First let's define the argument as using anonymous information to get into free services that don't appear to have any reason to require registration in the first place. I don't condone stealing paid-for services or intellectual property.

That being said, I still can't think of any arguments for this being ethical. From a purely ethical standpoint, if you don't agree with the site's policy, boycott the site. Allow capitalism to rein. If the site believe's the policy is threatening their success, they will either change it or fail. Unfortunately business isn't always run in a rational way (at least from the consumer's perspective) and there's always enough people that are willing to provide personal information that the success of a large site is not threatened by a few people who refuse to use their site.

On the scale of 0 to 10 on the ethics meter with 0 meaning I'm going to Hell and 10 I'm going to Heaven, I would have to rate this a 4. Certainly not helping, but also not killing my chance of getting into Heaven (I just have to hold the door open for a couple of elderly ladies to make up for it :). I'll still use the boycott method most of the time, but it's nice to know there are alternatives.

Just call me Chris

Here's my new fake identity...

Christopher M. Gibson
4106 Stonecoal Road
Grelton, OH 43523

Email Address:

Phone: 419-550-0656
Mother's maiden name: Clark
Birthday: April 27, 1973

Visa: 4556 8616 1018 8182
Expires: 5/2007

Fake Name Generator

Wednesday, September 06, 2006

My Favorite Tools

Here is a list of some of my favorite tools that I use on a regular basis (ok, some of them I just started using today :).

In order to keep this post a reasonable length, I wasn't able to include all of the features for each product that I wanted to. So if something seems moderately interesting, check out the link to find out about all of the features that it provides.
  • Google Desktop Search (Free) - Considering Outlooks terrible search engine, Google Desktop Search has proven very useful for finding emails concerning specific issues. I just type in the issue id into the search box (pops up by pressing Ctrl twice) and voila, every piece of correspondence associated with that issue.
  • Quick Launch for Google Sidebar (Free) - I've tried several diffent ways of organizing my most commonly accessed tools, projects, documents, etc and this is definitely the easiest. I just create a directory structure with a bunch of shortcuts in it and QuickLaunch shows them in a small window within the Google Sidebar and allows me to quickly navigate to the item I'm interested in and launch it with a single click without having to clutter my desktop with more windows.
  • Thunderbird (Free) - Easy to use tool for viewing news groups and rss feeds. It is closely associated with Firefox.
  • Firebird (Free) - A very nice relational database that is completely FREE! One of the best features is that there is a version that can simply be copied to the bin directory of your exe without any fancy installation. Great for embedded databases. It can also be placed on a server and can support very large databases with many connections (according to the website anyway:).
  • IB Expert (Free) - If you are going to use Firebird, you'll want to use IB Expert to manage your databases. It's actually quite a nice database management tool with plenty of handy features.
  • Zip Genius (Free) - I've had the need for a command-line zip utility and ZipGenius works great for that. It also has a good Windows interface, though I've never had the need for anything more complicated than the built-in compression utility in Windows XP.
  • NUnit (Free) - Every developer needs a good unit test utility and NUnit is the one for .Net developers.
  • The Regulator (Free) - A very useful regular expression evaluator. I can't imagine trying to create a complicated regular expression without this tool.
  • Reflector (Free) - If you don't have access to the source code, the Reflector is the next best thing. It can decompile most .Net binaries into the programming language of your choice. Very handy for learning about poorly documented features and figuring out how to get around bugs that won't be fixed until the next release of .Net (if you're lucky).
  • Process Explorer (Free) - A super-charged version of Windows Task Manager. My favorite feature is the ability to add descriptions to all of the processes so that you can determine what processes should and should not be running. It also gives you the ability to kill handles to files without killing the process (very handy if you want to delete a file that is locked by a required Windows process).
  • Color Cop (Free) - Handy little color picker that lets you determine the color for any pixel on your screen (much simpler than taking a screenshot and pasting it into a image editor that has a color picker). One of the neatest features is that the tool doesn't have to be installed, it can simply be copied into the directory that you want (for me it's my QuickLaunch directory).
  • Paint.Net (Free) - A MS Paint replacement. A simple image editor that can create moderately complex images (it's not Adobe Photoshop, but at the price, I ain't complainin'). It supports layers, different effects, and several other features that are needed for creating a reasonable image. I mainly use it for cropping screenshots before I send them in an email (it works great for that!).
  • Refactor! ($99) - An outstanding refactoring tool for Visual Studio 2005 users. Once you use it, you'll never understand how you could have developed without it. There is also a free version available for VB.Net users.
  • Beyond Compare ($30) - A diff tool that is easy to use outside of a source control tool. I especially like the ability to compare files and directories directly from the Windows Explorer context menu. If you are using VSS 2005 (or one of several other supported source control tools), you can setup Beyond Compare as the default diff tool.
  • PS Hot Folders ($19.95) - This is an awesome utility that allows me to quickly navigate to my "favorite" directories (beyond Desktop, My Documents, and My Computer) in any standard Windows Open and Save dialog. No more hunting for my development or download directories.
If you notice any great tools that I've missed, please post a comment so that I can check it out.

First Post

As a first post I figured I should tell a little about myself and why I'm blogging.

To keep it short, here is a brief history of my professional career...
  • 1999 - Graduated from the Computing and Software Systems program at the University of Washington
  • 1998 - Started work at U.S. Web, now defunct (yes, it's a word). Started there as an intern and was hired full time once I graduated. Worked on MS ASP web applications.
  • 2000 - Went to work for a dot bomb called Jacknabbit developing a Internet scheduling application for service providers (like doctors and hair stylists). For some reason, if you don't sell anything you become unable to pay employees and they tend to leave, funny (ok, not really funny).
  • 2001 - Got hired at a company called Freerein, also defunct (noticing a trend here?). The intention was to build mobile applications, unfortunately, they forgot to actually build anything and became unable to pay it's employees.
  • 2002 - Lean times in the industry forced me into a contract position at Microsoft. However, I did take the opportunity to learn C# and ASP.Net and my trend was broken, the company is still in business.
  • 2002 - While at Microsoft, a friend of mine told me about a position at a company called Intuitive located in Kirkland. During the last 4 years at Intuitive (I can finally say I have a stable job :), I have helped design and build the UI framework that are product is built on. The product is an ERP system for manufacturing companies that is being converted from Access to .Net. We were recently purchased by Made 2 Manage.
  • 2005 - Received a certificate in Object-Oriented Analysis and Design Using UML from the University of Washington.
I am also married with 2 kids and 2 cats. I've lived in Washington state my whole life. I graduated from Cascade High School in 1990 and took a few unproductive years off before starting college. While in college I delivered pizzas for Round Table Pizza in Mill Creek for 5 years (still the best pizza around).

I have been subscribing to some great blogs for several months now and have benefited considerably from it. By blogging, I am hoping that I am able to share some useful information myself and make a positive contribution to the Internet.

As a software engineer, I plan on writing about topics that I believe will appeal to other software engineers such as programming insights, tools, business of software, books, links of interest, etc. If you find my posts useful, please leave comments to keep me motivated to keep blogging.