UpTop

UpTop is a process monitor for macOS designed to show the processes that are using the most memory, CPU, and disk I/O in a compact form that you can leave running (similar to something like GKrellm for Linux).

Project page: UpTop

Text-template

Text-template is a static site generator that enables metatdata to be stored with the content, effectively using the filesystem as a NoSQL store of hierarchical data. This site is generated entirely with Text-template.

Project page: Text-template

DiskCleaner

I am constantly running out of disk space, and it would be nice to be able to sort my directory tree by size. I could then select the largest files or directories that I do not need and delete them. This Java program does exactly that, with the additional features of a delete queue, the ability to remove from the delete queue, and the ability to view a file.

Project page: DiskCleaner

CodeFalcon: a Web-based Java Source Code Browser

Have you ever been tossed into a large development project and needed to look at a bunch of code to see how it is structured? Have you ever needed to track down an execution path that wound through a fairly large number of functions? Have you ever wanted to trace the execution path backwards? This source code browser for Java projects grew out of the code graph generator to solve these needs. Run the browser generator over your source code, then surf over to the output directory with your web browser. You will get a browser window split between the class outline (including inherited functions), class hierarchy, source code. Mousing over a variable gives its type. Clicking on a function brings you to the source for that function, as well as displaying a caller-tree for the function. Written with a hand-crafted recursive-descent parser, it has been proven helpful in maintaining a large commercial Java program consisting of hundreds of Java classes.

Project page: CodeFalcon
You can use the source browser to look at the DiskCleaner 0.5 code (Tested on Firefox, may not work on Internet Explorer).

Java Source Code Graph Generator

One of the projects that I was assigned to work on was a mess of object-oriented spaghetti code. A regular pattern in the source base is that object A owns one or more B’s, which are mostly self-contained, except for the fact that B keeps a reference to A in order to ask for some of A’s information. A few objects with call-cycles like that and the code can get pretty hard to follow. I wrote a quick just enough of a Java parser to trace the call tree and dump out a call graph. This turned out to be too large, so I had to display just the portions of the graph that had cyclic calls.

The information was illuminating. First, it was easy to detect what classes were important, because they were the ones with all the calls going into (or out of) them. Second, I discovered that there were about 40 classes (out of several hundred) connected to each other in various calling cycles, meaning that if you wanted to understand one of those classes, you pretty much had to understand a number of other classes, too. A great tool for understanding information flow.

More information and sample output.

Ephemeris

Back in the OpenGL 1.1 days I wrote a rendering engine that featured procedurally generated fractal trees and fractal mountains for natural settings. Man-made objects could use revolved and extruded NURBS surfaces for machined items, and a general 3-dimensional NURBS surface for assymetric objects. The sky was also procedurally generated in order to model Mie scattering (where the horizon is more white than the zenith) and aerosol absorption (what makes the sunset red). Take a look at the documentation and some sample images.

HexEdit

I spent a part of the summer after I graduated college learning the Win32 API by writing a hex editor. The source code has suffered bit rot and only the Win32 binary is still with us, but the page is #1 on Google (search for “hexedit”) and is actively downloaded. It seems to be a hit in the Windows gaming community, and I get a fair number of emails regarding it.