Free Tools
Here are some tools I've written. Everything is Copyright (c) 2010 by Paul Jungwirth, but you are free to use what you like.
Maven Launch4j Plugin
Launch4j by Grzegorz Kowal wraps a jar file in a Windows executable to ease deployment of Java desktop applications. The
Maven Launch4j Plugin lets you run Launch4j from
Maven, optionally inferring things like classpath from your dependencies.
Read more.
PaletteBuilder jQuery Plugin
PaletteBuilder is a
jQuery plugin for helping designers try out color combinations on new web pages. It causes a color palette to hover over your web page, and you can attach different parts of the page to color wells via jQuery selectors. Whenever you choose a new color for that color well, all the associated elements on the page change color.
Upload Script
Upload is a script for maintaining small web sites (like this one) via FTP. It reads a local version of the site and uploads whatever files have changed since it was last run. It knows how to exclude files/directories like
.svn.
Savings Bond Calculator
Here you can find a free
savings bond calculator. It can handle both I- and EE-Series U.S. savings bonds.
Character Encodings
Encoding changer. Reads and writes over 150 character encodings. Can convert one file or many, based on location, extension, regular expressions, and more. Supports a graphical user interface for easy use and a command-line version for power users. Runs on Windows, Macintosh, Linux, Solaris, or anywhere with Java 5.
Solar System Simulator

This is a simulation of gravity for our solar system, built with Objective C and Cocoa. I call it
solsystem.
Distances are to-scale, but the size of the objects are greatly increased and proportional to the log of their radius. If you look closely at this shrunken screenshot, you may be able to see the blue earth behind its gray moon.
Unix Utilities
Here is a list of handy Unix tools I've written over the years:
- svnstart: Creates a new svn project and checks out the trunk. I write tiny utility scripts all the time, and
svnstart makes it as easy as possible to keep them in source control right from the beginning.
- pdfcat: Concatenates PDF files. Requires iText, a Java-based PDF library.
- range: Like the Python
range command, but for the command line. Built with C to support both Linux and MacOS X. Supports letters, decimal, binary, octal, and hex.
- Filesystem Commands
- sort-by-filesize: Sorts by filesize, taking into account abbreviations like 5K or 6.4G. This is useful in combination with
du -h.
- rdu: Recursive du that lets you filter out files below a certain size.
- find-extensions: Outputs how many files of each extension were found in a given directory.
- rtouch: Recursively touch files.
- underline: Renames files to use underlines instead of spaces.
- rsync-backup: This is the script I use to backup my dual-boot Windows/Ubuntu laptop. I run it out of cron, and it periodically checks to see if my USB hard drive is attached. If so, then it runs a backup using rsync.
- Text File Manipulation
- paracount: Counts the paragraphs (i.e. text separated by a blank line) in its input
- reverse: Prints the lines in a file in reverse order.
- shuffle: Prints the lines in a file in random order. Written in C for Linux or OS X.
- prepend: Like
cat, but prepends instead of concatenating.
- Numeric Aids
- conv: Convert numbers between various bases.
- math: Just an abbreviation to send short requests to
bc.
- sumcol: Prints the sum of a column of numbers. Useful in combination with
awk.
- newtonull: Converts newlines into null bytes. This is useful when you're piping a list of filenames into
xargs. By default, xargs splits on whitespace, so it gets confused when filenames contain spaces. But since xargs -0 splits on null bytes, you can use this script to convert newlines into nulls. (Surprisingly, there is no option in the standard xargs command to split on newlines.)
- echoin: Basically equivalent to
foo | tee - | bar, if tee could support that notation. (It is a bit of a contradiction if you think about it.) Using this script, you'd say foo | echoin bar, and echoin will pass its input on to bar while also printing it to stdout. This lets you eavesdrop on the data getting piped from one command to another, which can aid in debugging shell command chains.
- resume: A couple XSLT scripts to generate my resume in both HTML and PDF (i.e. LaTeX) format.
- pbcopy: A wrapper around OS X's
pbcopy command to let it take filename arguments.
Man Pages
I once read some advice that if you ever figure something out that you might have to do again, especially if you only do it once or twice a year, then you should write it down. I tend to put these notes into Unix man pages, which I store under the made-up
pj section. I keep them all at
~/man/manpj/, with these commands in my
.bash_profile:
export MANPATH="$MANPATH:$HOME/man"
export MANSECT="1:n:l:8:3:2:3posix:3pm:3perl:5:4:9:6:7:pj"
Not all these files are actually in man-page format, but most of them are: