A Well Deserved Victory for an Unsung Hero: Development Utility of the Year 2006
I was delighted to see the finalists for the Development utility of the year, delighted and pleasantly surprised in a couple of the items selected. The great thing about this category is that, unlike the tools or some of the more specific categories, development utility of the year can encompass many options, large and small, from any source. These are the tools developers find invaluable, maybe to the point of overlooking them for most awards.
The finalists are:
Top Style 3.0: CSS Editor
Topstyle Pro, the CSS/XHTML/HTML editor written by Nick Bradbury, allows you to harness the power of CSS (Cascading Style Sheets) in a powerful and straightforward way. Anyone who has edited CSS files using a text editor (haven't we all?) will appreciate a tool like this all the more. It's not so much that CSS files are overly complex, but rather that they present the developer with a jarring difference to HTML that, frankly, can disrupt the flow of development.
This tool is so successful in its own right that it acquired plugins for many other HTML editors—for example, Macromedia's Dreamweaver MX (you might have heard of that one), HTML kit, and many more.
Optimizeit™ Enterprise Suite
Gather a group of developers together and ask them to think about tools that are important to them, and I would put even money on a profiling/performance tool being in the list, and pretty high at that.
A good profiling tool is great for a product, and often humbling for a developer, but ultimately is worth its weight in gold. Borland's Optimizeit definitely falls into this category. With features that let a developer quickly locate, isolate, and repair performance bottlenecks, inefficient code, potential thread problems, and with the added bonus of a code coverage analyzer, this suite delivers everything needed to produce better software.
Backed by a great selection of tutorials on the site, including such topics as how to identify memory leaks, and application of the tool within a Java EE environment, Optimizeit is available in both a Java and a .NET version. It sports plugins for Borland's Jbuilder (of course) and IntelliJ IDEA, and with Borland's commitment to Eclipse, expect to see integration there soon as well.
In a world of increasingly elaborate and inclusive IDEs, the humble (or not so humble) text editor proves its durability daily. Despite IDEs often offering everything you could possibly ever think to ask for, sometimes what you need to do is just get in and hack a file. You don't want to start up several hundred megabytes of IDE and then import the file into whatever kind of project inclusion mechanism the IDE uses; you just want to right-click on the file and edit it, or type a single command line instruction and get in there and start changing stuff.
Of course, modern editors are not your father's ed either, and Notepad++ is no exception.
A free tool, Notepad++ is based on the excellent and proven scintilla editing component that has found its way into many a top flight product.
With a list of features as long as your arm, including folding, WYSIWYG, customizable syntax highlighting (most common languages are already covered), auto-completion, macros, plugins, and much more; and sporting a pleasant, functional interface, this is a superb default text editor. For Windows only (the source is GPL'd should you want to port it to your favorite OS), it is thoroughly underselling the editor to even mention the notepad that comes with Windows, but positioning it as a replacement for that under-featured editor is a stroke of genius and one that any Windows-based developer should take advantage of.
As recently as just over a year ago, I still believed that the primary usage of VMWare was to enable Linux or other Unix users to run Windows software, and maybe in a few cases allow Windows users to harness some Linux or Unix software.
Then, I started to actually use it.
To say that VMWare is a polished environment is an understatement. In my experience, it has performed everything thrown at it flawlessly and easily. It was also clear very quickly that I had totally missed the point by thinking of it as a simple compatibility environment.
VMWare does indeed allow you to run software written for another operating system inside of an arbitrary host OS, but it does ever so much more. It is a perfect virtualization tool (which is a large subject—far too large to do justice to here—but in a nutshell involves taking a bunch of physical boxes in a rack or scattered around a network, and replacing them with a collection of virtual replacements that run inside a single large machine, sharing the resources of that machine and using them far more efficiently).
The VMWare products are now available in four flavors. From the bottom end up, the new free VMWare player allows you to take a VMWare image created using one of the other products, and use it on any machine. Although the name player might not make this clear, the images thusly used can be written to and updated; so, for example, a Windows XP image in a Linux VMWare player can have software installed on it, and documents created, and these will be saved to the virtual disk. In other words, it is not a read-only item.
VMWare Workstation is what many individual developers will find interesting, allowing the full functionality of creating new virtual machine images, and running them from any supported OS, and it is still priced within a range that will be palatable even for home hobbyists. The functionality in this version is amazing, allowing rapid cloning of existing virtual machines, snapshotting of points in time (in other words, before you install that big experimental piece of software that just might screw up the Registry. If it does, no problem; just roll back to the snapshot) and much more.
Then, we get into the enterprise server level options. GSX installs on top of a supported operating system (at this time Windows and many flavors of Linux) and adds the ability to turn the host operating system into a pool of smaller (but not necessarily small) virtual machines sharing the resources of the large server (by putting 12 partly utilized machines on a large, 4-core server, you get far better hardware utilization than with separate machines). ESX is the flagship product, installing directly onto bare metal and using a stripped-down host operating system optimized for use solely as a VMWare container. ESX offers some very impressive capabilities, including a virtual machine failover mechanism.
VMWare 5.5 now has support for 64-bit host and guest operating systems, multiple CPUs, and can even simulate multiple CPUs for the guest operating systems—this and many other features make it an invaluable developer tool for testing and developing in a heterogeneous environment, even if only testing different versions of the same OS, but even more so in a cross-platform environment.
And the Winner Is... Ant
When I saw the list of winners, it was a "slap the forehead" moment for me. I thought to myself that I would have probably forgotten to nominate Ant for this award, and that fact is proof of its incredible success for development.
See, the reason I would not think of Ant is that I use it everywhere. I use it so much (as I suspect most Java developers do—and maybe not just Java developers) that I overlook it regularly. It is taken for granted, completely relied upon, and as close to essential and standardized as anything I can think of in the Java development world.
As described on the product page, Ant is "a Java-based build tool" ... "kind of like Make, but without Make's wrinkles." This is one of those casual understatements that developers are so gifted at making.
I feel strange even describing Ant because it seems like a wasted exercise (does anyone, in the Java developer world at least, not know about it?), but Ant is a build tool that utilizes a clean and extensible XML "scripting" syntax to provide a master of ceremonies for just about any build task you care to throw at it. It is extremely well documented, easy to provide extensions for, and of course, coming out of the Apache projects, has impeccable breeding and pedigree. Currently at the 1.6.5 level, the list of features is long and useful, almost as long and useful as the number of different build tasks.
For example, we regularly use Ant to master the complete build and deployment process for all of our Java projects. Ant will obtain the necessary versions out of source control, compile and build them, create deployment files (WAR, EAR, and so forth), perform automatic unit testing to ensure no bugs have crept in, create documentation, update status about the build, copy the files to their final destination, label the source control system with the information about a release, and then deploy the finished product to the testing servers, and that's just one example.
In a world of passionate IDE wars, Ant is one of the few things that everyone agrees on. All of the leading IDEs have some level of integration with Ant; some, like the Netbeans suite, have incorporated it to the point where it is the build environment. In other words, the IDE does not have to output a matching Ant file from its build procedure; the very build procedure is created in Ant and so it is already there. This is a trend I would love to see more IDEs adopt.
In case you are a Java developer who is in some kind of parallel universe and don't already know what Ant can do for you, you really do owe it to yourself to go and check it out. There are several larger build systems that harness it as a part of their strategy if you find that Ant doesn't quite go far enough.
About the Author
Dick Wall is a Principal Systems Engineer for NewEnergy Associates, A Siemens Company based in Atlanta, GA that provides energy IT and consulting solutions for decision support and energy operations. He can be reached for comment on this and other matters at firstname.lastname@example.org. He also co-hosts The Java Posse, a podcast devoted to Java news and the Java community, which can be found at http://javaposse.com.