Developing with open source tools on Windows…
I recently had to re-install my Windows XP operating system on my laptop. For those of you who have ever been through the process, you know that it can be a bit painful. Part of the pain is related to the time that it takes the Windows install disks to re-format and then install the OS and drivers. More painful than that however is actually rebuilding the system back into a productive state by downloading and installing all of the various tools that I had become so familiar with.
I determined that this latest re-install of my OS was the last time that I will do it without a list of all the tools that I use, with easy to follow links. So here is the list of my favorite tools. Most of them I use on a daily basis and some of them I use infrequently. All of them are great tools however and add greatly to my productivity…
OpenOffice.org, also known as OOo, is an incredible, free and open-source office suite that offers just as many features as Microsoft Office. In some cases, OpenOffice.org actually handles old MS Office documents better than MS Office.
OpenOffice.org contains most of the same types of applications as Microsoft Office. Here is a list of the OpenOffice.org applications and how they map to the Microsoft Office applications:
|MS Office||Open Office|
Scribus is a desktop publishing application which provides many of the same features as MS Publisher and Aldus PageMaker.
Inkscape provides for a very well done vector graphics editing application. It is free, open source and supports SVG and other vector and raster graphics formats. Overall, this is an incredible piece of software and should be in the toolbox of every graphic designer and software developer.
Source code editors
Eclipse is perhaps the best Integrated Development Environment (IDE) ever. It is open source and has HUGE industry support including many of the largest technology companies in existence. In addition to the base Eclipse installation, there a numerous plugins which extend the functionality of the IDE.
DJUnit is an excellent code coverage analysis tool for JUnit tests. It acts as a wrapper which executes your existing JUnit test suites. The best part about DJUnit is that it does not require that you modify your JUnit tests at all, rather, it dynamically instruments the coverage analysis code during run-time. After executing a JUnit test via the DJUnit test runner, DJUnit provides clickable tables and charts that present metrics regarding the coverage of your test suites against your code under test.
There are times when a full IDE such as eclipse is overkill and in those times, I turn to Notepad++. If you have ever used the Notepad application that comes with Windows, you know that it leaves a lot to be desired. Notepad++ fills the desire and even more. It is a lightweight, fast and very usable text editor. There a numerous plugins which extend the functionality of the base installation. It comes with syntax highlighting, tabbed editing windows, bookmarking, excellent find/replace and a very good macro recording/playback tool.
There are a lot of plugins for Notepad++, these are my favorites:
When you have to look at raw, binary data and try to make some sense of it, an ASCII based editor simply will not do (although Notepad++ does have a plugin for this…). That’s where the ICY Hexplorer tool comes in very handy. It integrates into the Windows right-click “context” menu which allows you to open any file in the editor very quickly. The editor also has a nice search function which can search for hex or ASCII strings. This is quite helpful if you need to find a string in an exe file.
Komposer is a WYSIWIG editor for HTML and CSS. It is a pretty good web page editor, although the code it generates is formatted pretty strangely. However, it is far better than Frontpage. I don’t use this tool for editing of dynamically generated pages, but it is useful when editing a static HTML page or CSS layout.
Source code management (SCM)
Revision control is a critical part of developing software. In short, a source code management system allows a developer (or multiple developers) to work on reviosions of software. For simple projects a single develoepr works on serialized versions of a file (or multiple files). In more complex scenarios, multiple developers can work on multiple revisions of a file on multiple branches.
There are many solutions out there from simple, single user systems such as RCS; to very complex, multi-user/multi-site systems like Rational Clearcase. In the middle of these two extremes are a number of solutions that bridge the gap. In particular, CVS and SVN are two middle of the road SCM solutions from an end user complexity/usability perspective.
Both CVS and SVN have Tortoise interfaces. The tortoise interface is a Windows Explorer extension that allows the user to perform SCM operations on files and directories directly fromt he right-click context menu of Windows Explorer. For the single developer, who is working on a single development machine, I prefer TortoiseCVS due to the simplicity of installation. SVN is a bit more complex to get up and running, and it has some nice features for small teams.
At some point in code development, you will find the need to merge two versions of the same file. This is what Winmerge does, and it does it very well. Winmerge supports various plugins that allow you to merge various types of files. My favorite things about Winmerge are the clean interface, the excellent recursive directory diff’ing and the HTML difference report generation. I have used both Winmerge and Beyond Compare and I think that the Winmerge UI is much cleaner and simpler to use. Because Winmerge is available, I would never shell out the money for Beyond Compare.
While Winmerge is great at diff’ing and merging 1 file into another, more complex Source Code Management (SCM) schemes may require you to merge 2 files into one. Typically, this includes the previous version of the file, the base version of the file and the new version of the file. KDiff3 excels at this. I have also used the Rational Clearcase merge tool and I like KDiff3 so much more that I replaced the default Clearcase merge tool with KDiff3.
This excellent tool allows you to explore and copy files from a linux ext2 or ext3 file system onto your windows disk. I have tested it under Windows Vista and it works great. I particularly like that the tool is a user mode application and not a driver since windows vista seems pretty unstable…
Putty is perhaps the most well respected telnet/ssh client for windows. It is incredibly well implemented and is used by professionals all over the world. You can even use it to setup secure SOCKS proxy’s between your laptop and an openssh deamon for secure web browsing.
FileZilla is a free and open source FTP client which supports drag and drop file movement. This FTP client is extremely easy to use and very reliable. I have been using this tool to transfer files to my web-host for many years and have never run into an issue with FileZilla. One of the best features of FileZilla is that you can save a list of your favorite FTP servers and just double click a server account to connect.
This is a great little context menu extension. Once installed, you can right-click on any .iso file and immediately burn the image to CD. The version for Windows Vista also allows you to burn an image directly to a DVD.
This tool by Microsoft allows you to directly mount an iso file and assign it to a drive letter. This is very convenient if you need to access the contents of a CD iso image, but don’t want to burn the iso to disk. The download link is under the “Writing ISO files to CD-R or DVD-R” section of the page…
This is a great CD and DVD burning application. After wasting hours trying to get the “Sonic” (By Roxio) DVD burning software to work, I finally did a search for open source DVD burning tools. I found this tool on several sites with very positive reviews. I downloaded, installed and had by DVD burned in less than 20 minutes.
Good icons are are very important to a visual layout of an application or web-service. Crystal Clear Icons provides a great set of icons, which are LGPL licensed.
During development, you may need to determine which DLL’s are being loaded. Dependency Walker is an excellent tool for exploring the dll dependency tree. In addition to showing the DLL dependencies, the tool also shows which functions are exported from each DLL. This tool works on DLL’s, so it is valuable for both native development and Java JNI development.
Sure, it’s a play on words and a play on the ridiculous character from Star Wars… however, this tool is anything but a toy. Jar Jar Links shows the dependencies between jar files. It can run from the command line and from ANT. This tool operates only on java jar files.
If you want to know what classes and methods are in a jar file, or you would like to see how a class file was implemented, JD-GUI provides a very clean decompiler. The jar file contents are shown in a tree view, with each class as a node in the tree. Clicking on a class opens the decompiled source in an editor window for easy viewing.