You can't have a long career in software without accumulating a
bag of tricks (well, some people can, but I wouldn't hire any of those
people, would you?). Here are a few programs I've written that might prove
useful or interesting to you or somebody you know.![]() Jdep -- A tool for Java programmers ![]() Jdep is a utility to analyze Java class file dependencies and generate corresponding makefile dependency lines, which, together with a little slight of hand (also documented here), makes it finally possible to use javac in a Unix development environment and have it get along with make the way you wished it always had to begin with. ![]() Yacc Helper -- A tool for compiler writers ![]() I'm convinced that yacc is the universal tool. I have used it for an astonishing variety of things. It is my hammer. I have a bet with Markus Krummenacker that I can even use it for molecular modeling. ![]() After creating about a bazillion programs with yacc, I attained a zen-like state in which they were all revealed to be just facets of the same one program, kind of like the way RPG programs are all the same one program, only more interesting than that. Thus was born Yacc Helper, in an effort to at least minimize having to type that same one program over and over again. Yacc Helper is a package of C preprocessor macros and template files that automagically generate all the boilerplate code associated with creating, handling and transforming parse trees and other common compiler data structures. ![]() Ambient -- An eccentric MP3 player ![]() Ambient is a Linux MP3 music player program (actually, it will play any sound file format that the underlying audio package that it uses, xaudio, understands). It was created for two purposes. First, to give me a music player that satisfied my own admittedly somewhat eccentric feature desires. Second, to teach myself to use GTK, which has proven to be the least obnoxious GUI toolkit I've thus far ever encountered. ![]() The idea for Ambient came about because I bought a big disk drive, ripped my CD collection (about 400 discs) and found myself with 6,000 or so MP3 files on my hands. The various MP3 player programs I tried out seemed to waste a lot of code on useless features like "skins" while not giving you a great handle on managing a big collection of music files (this may have evolved since I looked closely at it a few years ago, but I've been using Ambient since then so I wouldn't know). Also, the way the MP3 world has developed, there seems to be a strong bias towards thinking of individual songs as the granularity of packaging, whereas CDs and other traditional recording media are structured around the album. This is not to say that the album is a better way to organize music, but simply that that is the way the corpus at hand is already structured artistically so it makes sense to be able to think of things that way when you want to. Finally, I wanted a way to characterize the music in my collection according to various traits that correspond more to mood than to genre: I mostly listen to music while working, and I find that the kind of music that is good for coding by is entirely different from the kind of music that good for debugging by, which is in turn entirely differrent from the kind of music that is good for writing by, and so on. So I wanted a program that I could just instruct, for example, "I'm debugging now" and have it queue up appropriate material. Then when I shift to writing, tell it so and have it shift the mood of what it's playing accordingly. That's a big part of what Ambient does. |