Code

Here are some tools I've written. Everything is Copyright © 2010–2012 by Paul Jungwirth, but you are free to use what you like.

For major projects I've completely successfully, please take a look at my portfolio.

db_leftovers Gem for Rails

db_leftovers is a gem to help you manage your database indexes and foreign keys in a Rails 3 project.

State Tax Calculator

Here is a tool to compute your tax in all 50 states. It includes income tax, property tax, sales tax, and gas tax. This was one of my first jQuery projects, and I'm proud of the sortable table and the URL hashtags that let you bookmark your results.

Maven Launch4j Plugin

Launch4j by Grzegorz Kowal wraps a jar file in a Windows executable to ease deployment of Java desktop applications. The Launch4j Maven Plugin lets you run Launch4j from Maven, optionally inferring things like classpath from your dependencies. Read more.

jQuery-UI SliderGroup

SliderGroup is a class that links sliders from jQuery-UI so they all sum up to a constant value. When you move one slider up, the others go down, and vice versa. This project is hosted on github, though you can find a demo here.

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.

Encc: Character Encoding Converter

Encoding converter. 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. Here are the notes I've accumulated over the years, in man-page format.