Development Tools
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...
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...
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...
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.
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).
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.
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?
Interesting. I've never used scilab, but I like octave, and for quick calculations I usually use speedcrunch. Instead of unixutils I simply use cygwin with the puttycyg terminal. I like that I can download many unix apps and compile them on cygwin just typing `.configure&&make`, that's for example the case of yacas a symbolic math tool that, while it may not be as good as mathematica, it usually fits my needs.
When I need to merge a lot of code I usually switch to my linux box and use meld. I'll give winmerge a try, but in my experience meld is better than most of the commercial tools that I've tried.
is dopdf any better than cutepdf?
Personally I'd recommend Pylab and matplotlib as a matlab replacement.
Also, in my experience, Total Commander is not half as good as Directory Opus is.
If you like unxutils, you may also want to look at GnuWin32 for a more complete collection of utilities: http://gnuwin32.sourceforge.net/
Everything Search: Lightweight, super fast, as-you-type, file search
Workspace Whiz: Mainly for the Visual Studio as-you-type file open
RockScroll: Large scroll bar that shows the outline of the current file. If you double click a word, it highlights all occurrences of that word, both in the file and in the scroll bar.
>What's your favourite tool of the day that they will pry from your cold dead hands?
P4Win over the god-awful P4V
Ignacio,
yacas seems pretty cool, I have to try to use it next time I need some math help. Looks like the online Java client would get me most of the way.
Speedcrunch looks pretty sweet as well, I'll try it out!
As for dopdf, it usually does the job as far as I'm concerned, but my needs are mostly very modest -- often it's just to print the receipt from a webpage so that I can store it. And of course it's free.
davidnr,
I'll check pylab out, it looks novel and of course nowadays I'm more fluent in python than in MATLAB anyways :)
As for Directory Opus, I didn't even know that they had a Windows version! I fondly remember it from my Amiga days. I'm afraid that I'm too set in my ways with Windows Commander, I've been using it for years now :) Any killer features in Directory Opus that would make me consider a switch? I love the fact that I can code my own plugins to Windows Commander...
Totalnubee,
GnuWin32 looks interesting, I'll check it out!
Daniel,
Yes for sure, p4v is the devil :)
Hi Jim,
I tried out NiftyPerforce and it is working nicely, thanks for this free tool! The auto add is probably the best part, no more 6+ click combination every time I need to add a file.
If you are looking for potential improvements I would suggest making the 'Open a diff on the item' action diff against depot, not head version of the file. Usually you want to see what changes you have made to the depot version, not what changes you have made + changes anyone else has made since you last synced to head. Also the 'Show the item in p4win' has the potential to be very powerful however it opens a new p4win window instead of using an existing one, which causes a lot of clutter quickly.
You are missing one of my favorites, can't use a computer whithout it!
launchy
Nice post :)
Daniel,
Good catch about the head revision diff, I guess I never noticed because I'm almost always on the head revision :)
The p4win feature to show the active item really should use the existing instance (I usually have multiple instances open and it should be smart enough to go to the "correct" instance (i.e. the one with the same clientspec as you trying to open) ... if you get a new instance each time, then that sounds like a bug. Would you mind opening an issue for this and pour as much info as you could about your setup etc so that I could try to reproduce? You can see the issue list at: http://code.google.com/p/niftyplugins/issues/list
Cheers,
Jim
Hi,
I tried installing NiftySolution (I've got MSVS 2005 SP2). Unfortunately, it says it can't open ..\MSEnvShared\Addins folder, Which in fact does not exist (this is a network path to where some of the settings are stored). Any ideas?
dk,
It sounds like you don't have permissions to install the plugin on that path (perhaps the network path is protected?). I would recommend to just download the path and copying the .dll files into a suitable location (any Addins folder will do).
/j
Thanks Jim,
I copied the file to my local Addins folder (though, I am logged in as admin and have permissions to create/delete folders in this particular network folder. Msi executable also has all permissions enabled. Could this be because the folder needs to be created if it does not exist?). It is now loaded but ctrl+alt+a does not enable anything (apart from setting the focus to the "Command Window"). I had to enable it via "options->keyboard->Aurora.*".
The only trouble is I can not open the file using double click. Can only open it from the menu using keyboard and pressing "enter".
http://img38.imageshack.us/img38/2530/niftytst.jpg
SciTE is nice, but I like Notepad++ alot, which is built from the SciTE sources. It rivals pretty much all the other editors I've used like UltraEdit and it's free.
http://notepad-plus.sourceforge.net/uk/site.htm
For the more hardcore, an alternative is VIM too, of course. :)
Recently, I have put much effort into seriously learning Emacs, after being inspired by some folks just flying with it. After a year using it, its basically my operating system into my mac and my full development system for Mono. I've even used it to develop quick mayor mode editors for gameplay mechanics. Weird thing is I think its outdated; maybe a more modern software built on the emacs paradigm may be better.
Interesting list; as I'm usually on Linux or MacOS, I don't have as many creature comforts on my Windows dev machine. I'll have to try these out.
Any reason why you folks recommend unixutils or gnuwin32 over cygwin?
Granzny,
Mostly I think it's because cygwin requires some funky emulation layer and extra DLLs. UnixUtils are native standalone programs and usually just works with a drop in replacement for something else, cygwin requires a whole install (or at least different rules).
/j
I recommend EasyPDF because it has more utilities, and MSYS, for being more minimal and meaningful than UnxUtils. I also recommend Perl for writing many scripts as an alternative to sh.