Linux is only free if your time is worthless.
-- Jamie Zawinski

Development tools.

In your day to day usage of the computer you might find yourself wishing for that one tool that can help you do this particular task at hand. Chances are that it has already been written and the only reason why you are not using it is that you have not found out about it yet! I find this particularly annoying, since my Google-Fu is not that strong (luckily I work with people with strong Fu). But anyhow, this is a short list of tools that you absolutely have to check out, if not use. I'm going to assume that you are a windows shop and a game programmer for this list to apply...

Unixutils

This little package is native ports of common unix utilities like grep, sed, awk and make. Incredibly useful and everyone should have c:\usr\local\wbin in their path!

http://unxutils.sourceforge.net/

Windows resource kit

This package should be installed on every windows computer, just because these tools should have been included in the base windows package. You get tools like linkd (fake symbolic links on NTFS), robocopy (incredibly useful copy tool to create mirrors of remote directories) and lots more. Download, read the docs and marvel at the fact that they are not in the standard distribution...

Resource Kit Download

Poolmon

Poolmon is one of those little know tools that are distributed on your original windows CD, but not installed by default (yeah, dig it up again and install it ASAP). It's a little tool that helps you track down memory leaks within the kernel. Why would you ever want to use this? Surely you can do nothing about the kernel memory leaks? Not really true though, since most drivers today live inside the kernel namespace, and also allocates from the kernel resources. Once you run out of the kernel memory, it's game over -- your computer will crash and burn. To the rescue comes poolmon where you can see which pools are running out of memory, and hopefully by looking at this list of pools you can figure out which driver, or subsystem is not playing nice. We had a problem where the copy protection that Maya uses caused systems to go down since it leaked memory each and every time you launched a new executable. It's also informative to see how much kernel resources your virus scanner is using. It makes me want to cry.

Sysinternals

Sysinternals have long made tools that are incredibly useful for debugging windows machines, head over to their site and browse through the entire set of tools. I will mention two tools, procmon and process explorer. Process explorer gives you a good overview of what the system is doing, you can drill down on processes and watch what they are doing and inspect their callstacks (if you have their symbols), what their environments looks like etc. You can see their data IO throughput to get a gauge of how they are hitting disk as well as how much memory they are using. It's my primary tool to diagnose any windows issues. After you've identified what the heck is going on, which process is running amok, you can drill down further on that process with procmon, which essentially is a truss program for windows -- it dumps all the API calls that a given process is doing. So you can see all the registry, file and Win32 API calls being made with their parameters and return codes. This way it's pretty easy to see for example that a process is trying to open a file at the wrong location etc.

Oh, yes. You should also subscribe to Mark's blog (he's one of the guys behind sysinternals).

Paint.NET

This is my goto graphics application on windows. Sure, I have Photoshop installed at work, but I still use this, just because starting up Photoshop is like booting another OS and 98% of the time all the functionality I need as a programmer is already available in Paint.NET. The fact that it's written in C# and has the associated boot time with .NET should give you an idea how bad Photoshop is...

http://www.getpaint.net/

Scilab, a MATLAB clone

MATLAB is the defacto standard numeric matrix manipulation programs out there. You can write programs and plot the results inside MATLAB and it's incredibly powerful and useful for those kind of tasks (e.g. analyzing large datasets). However it's very expensive and a free alternative is scilab, which pretty much emulates most of MATLAB. I use it as a slightly more programmable calculator at times...

http://www.scilab.org/

Total Commander

Total Commander. It used to be called Windows Commander, but MS cracked down on the developer and made him change the name. Still it doesn't matter, it's pretty much the best file manipulation tool out there, it makes my daily life so much better when I sit and want to move files around or just find stuff. If you remember Norton Commander (or Directory Opus) back in the day, this is pretty much the same, but on a modern windows OS. I highly recommend this piece of software and encourage you to try it out and buy it. The guy has been around for a long time and the program is very stable.

http://www.ghisler.com/

Visual Studio plugins

We'll it's time to at least promote my own plugins a little bit, but really you should at least have something that quickly opens any file inside the solution with just a keypress. Visual Assist does this for you, but I dislike it due to the fact that it's so slow. I've got my own plugin, NiftySolution, that does the quick open of any file inside the solution, as well as other small features like timing of the entire build etc. Additionally, if you use perforce, you should consider not using the default plugin that comes with perforce -- it's really crap and super slow. Simply having a custom tool bound to 'p4 edit' on the command line work, or you could install NiftyPerforce which is designed around being as non intrusive as possible and fast as possible, while still giving you shortcuts to the most common operations.

Scite

Well, really I just have this one goto editor that I hook up everywhere. Nothing really special about it other than it has most features that I want in an editor and that it's free. Syntax highlighting, multiple tabs, autoindent etc. Pretty full featured. And despite the name, it is great :)

http://www.scintilla.org/SciTE.html

WinMerge

There are several merge / diff programs out there, but there is one default free one that pretty much has it all and which you should try out first before going to buy a commercial one (which usually are not actually better, just slightly slicker often).

http://winmerge.org/

doPDF

Save a tree, don't print stuff that you're just going to archive. Instead send them to a PDF and store the resulting file on the network somewhere. doPDF is a printer driver that acts like a printer inside Windows and when you "print" to the device it will spit out a PDF file instead.

http://www.dopdf.com/

Comeau compiler

Often if you are in doubt weather or not a certain piece of C++ code is valid, a second opinion is often useful. Trying to compile some code with another compiler usually gives away non standards compliant code. My favourite goto compiler for this thing is the Comeau compiler, simply because they have an online form for compiling code. Sure, you could go the trouble of making the Visual Studio compiler not compile with extensions, or trying to compile with the strict and pedantic options for GCC. But just pasting the code into this form is usually quicker.

In closing

So that's a sampling of what I use day to day. Of course I have a lot of custom python scripts that help me out in various situations. What's your favourite tool of the day that they will pry from your cold dead hands?

Comments