I'd like to pass on some tips about useful tools I've found. Of course, everyone has their own list, but it's always worthwhile to occasionally go out and seek new ones. I'm a big fan and user of open source tools, not just because they're free, but because the popular ones tend to be actively maintained -- they fix bugs and add features.
diff |
My favorite file diff tool is vimdiff, which is an invocation of the vim editor using the -d option. I'm a command line weenie, so I still use GNU diff a lot too. For comparing directories and files, doing merges, and editing, the free WinMerge program is nice (http://winmerge.sourceforge.net/ ); its only disadvantage is that it only runs on Windows. |
Hex dumps |
A good hex dump tool is xxd; you can download it as part of the vim distribution (http://www.vim.org/download.php). |
tags for vi and emacs |
If you use vi and its clones (especially vim; also works with emacs), you should be aware of the wonderful exuberant ctags http://ctags.sourceforge.net/, as it makes navigation in source files much easier. Use it e.g. to tag all the symbols in all the include files in /usr/include (when I'm on Linux, I have a cron job recreate this file every night). |
Binary file comparisons |
I wrote a binary file comparison tool bd.c years ago. I used it to compare firmware builds and figure out if they differed, in spite of embedded date/time stamps and CRCs. It's not a GUI tool, but it gets the job done. You can get it at http://www.gdssw.com/tools/ . |
Web authoring |
|
A better Acrobat |
The people at Adobe have forgotten the simple roots that their Acrobat reader used to have. Now if you want to read PDF files, you have to download 17 MB of junk. Forget that -- get Foxit reader, a fast PDF viewer. They didn't screw up the scroll wheel support like Adobe did. http://www.foxitsoftware.com/pdf/rd_intro.php. They appear to be giving it away to showcase their PDF library. If I needed to support PDFs in my software, I'd sure as heck take a close look at their library. |
Database |
If you need a database, the open source MySQL (http://www.mysql.com/ ) could be a good choice. On Windows, it hooks up easily with an ODBC driver and lets you connect to its databases with the Open Office programs. I also like the O'Reilly book Managing and Using MySQL. If you want to embed an SQL database in a C/C++ application, take a look at SQLite. It fits into a 250 kByte library and is a bit faster (so I hear) than MySQL, which is a screamer. I recently wrote a C++ interface to SQLite for an application and, once I got the SQL queries right, everything else worked right the first time. Boy, what a time-saver. |
Open Office |
If you're interested in getting off the Microsoft upgrade-every-few-years treadmill, take a look at Open Office (http://www.openoffice.org/ ). I used MS Word for 20 years, so it took a bit of effort on my part to switch over, since I had numerous macros that helped me in my work. However, I've become very attached to Open Office and how it works -- so much so that I rarely use MS Office anymore. The main program I use is Writer, which looks a bit like MS Word. To be objective, be warned that OO Writer crashes more frequently than Word does. However, to its credit, there was only one time where I lost any work (its recovery process works very well). On the other hand, I've had MS Word absolutely trash some documents to where they were unrecoverable -- and this resulted in a lot of lost work. Even with the crashes, OO is (in my opinion) a better tool than Word. |
PIM |
Years ago I had an idea for a hierarchically organized information manager. I then found a number of them on the web (Leo, TreePad, KeyNote). I tried them and settled on KeyNote (http://www.tranglos.com/free/keynote.html ). It's a Windows only program. It's simple and easy to use. Now you've got a place to stick all those tidbits of knowledge. It may not be maintained anymore, but the current version is working fine for me. |
Sysinternals |
For Windows, check out http://www.sysinternals.com/SystemInformationUtilities.html -- especially Process Explorer. It's a nice replacement for Windows' Task Manager. |
Passwords |
We all have to keep track of lots of logins and passwords these days. I like to use KeePass http://keepass.sourceforge.net/ ) for this. Another good tool is Password Safe (http://passwordsafe.sourceforge.net/ ), but I like KeePass just a little better. One of the advantages of these tools is that you can have the program generate secure passwords for you -- you don't even need to see the password. You then paste it into the app or web page as needed. Another technique for getting better passwords if you touch type is to use a familiar phrase, but shift your hands on the keyboard right one key. Example: the password pythoncookbook will get turned into [uyjpmvpplnppl, which is safe against a dictionary attack. |
cygwin |
If you're a UNIX person who has to use a Windows computer, all your favorite and familiar tools can be gotten by installing cygwin (http://www.cygwin.com/ ). If you want to distribute apps under cygwin, the licensing fees are substantial. Instead, get the MinGW compiler (http://www.mingw.org/ ) and you can build native Windows apps and distribute them without any fees. Use wxWidgets (http://www.wxwidgets.org/ ) and you can build C++ cross-platform GUI apps. |
Python |
If you're a python programmer, there are lots of good places to find things. Check out Vaults of Parnassus, Python Cheese Shop, and Active State. The O'Reilly Python Cookbook is derived from some of Active State's stuff and is a good book of techniques. My favorite Python book is Beazley, Python Essential Reference. My copy is the 2000 edition and is getting a bit long in the tooth because the Python libraries continue to evolve. sum(x*x for x in xrange(10000000))
This takes 6.2 seconds on my computer. The answer is 333333283333335000000L if you're
interested. Just for the record, a C++ program took 0.17 s for the same
task (about 35 times faster), but it didn't get the correct answer with 64 bit integers (but it
did OK using doubles). The reason is that this sum overflows 64 bit
integers. But it
doesn't matter how fast you get the wrong answer, especially when you don't know you've gotten the wrong answer. :^) |