Software and other resources
Computer programs are to hackers what notes are to English majors. What you want to do is get the machine to turn some bunch of bits A into some other bunch of bits B. It’s a Turing machine, so it can be done; the only question is how. When I give you a program, I’m not giving you a box, I’m telling you how I shook the box to make the right thing come out. It’s just information.
For this reason I generally believe code should be written first to be read and only secondarily to be executed. I’d much rather make things more sensible or eloquent than optimize them or add new features.
My computing environment offers a bottom-up view of the world: if you’d like to accomplish something, here are the tools, and if those aren’t good enough, here’s how to make new ones. To write a program, even a quick “hack”, is to set down the knowledge of how to use and combine those tools to do something useful, or to re-use the tools that you’ve already constructed.
So if these few frequently-unfinished notes toward a simpler and better way to get from A to B shed any light on your own, maybe they were worth the time.
-
Mnemosyne is what I use to generate my blog. It’s static-files-only, extensible in Python, and based on Maildir and XML.
-
lastfmsubmitd is a “plugin” for the social music networking site Last.fm that is more of an idea about how to remove the networking code from music player plugins themselves and have a system-wide daemon collect what they detect. I use MPD, so an example for that is included.
-
aewm is a minimalist window manager for X11. While I use it daily, its real purpose is to implement the ICCCM in a manner that’s actually somewhat understandable.
-
Roux is framework for civilized screen scraping, which will eventually allow you to turn anything into an Atom feed.
-
I’ve contributed some plugins for rawdog, my feed aggregator.
-
Faye is a caching and filtering Web proxy for mobile devices. To be replaced with something for mouseHole, probably.
-
I have a few Greasemonkey user scripts, probably for sites that aren’t interesting to you.
-
Themes for Athena contains some notes on customizing the Xaw toolkit.
-
dhsupdate is a script for updating dynamic DHS hosts, if they’re still around.
-
Quite a while ago I wanted a simple checkfriends client for LiveJournal.
-
My repository of smaller, undocumented hacks is collected in the misc directory. A few highlights:
-
petard is what I use to take out my aggressions on crackers attempting SSH dictionary attacks.
-
I never thought venerable old dc was very useful, but then I challenged myself to write sum and avg.
-
Another pair of basic shell necessities (in Perl this time, cribbing from the FAQ and the Cookbook) are rand and randline.
-
Fed up with the complexity (and stability) of man-db? poor-man is a tiny non-caching version of man(1) written in shell. Use at your own risk.
-
Long ago, in a fit of pique (or something), I forked xtermset. I don’t remember why, but this is the version I use everywhere, probably out of nothing more than stubbornness. And the fact that even in 2005, I still get $TERM fuckups going between different distributions.
-
I’m working on a hack to trim silence from WAV files, which doesn’t work very well yet. Occasionally it will let me trim an 81 minute playlist down to 80 minutes though.
-
ignatz was my old regex-based daily comics fetcher (like the approximately 10 million other programs which do the same thing), which I wrote Roux in part to get rid of my need for.
-
I like to make DJ-mix CDs (not to be confused with "rip, mix, and burn" mix CDs, which are the modern-day equivalent of pause tapes), and index them by hand after the recording the final mixdown. CUE files are much easier to write than TOC files, and I’ve found cdrdao’s CUE support to be lacking, so I wrote cue2toc. See if you can spot the hidden extension to the CUE format.
-
Back when I had a need for such a thing, I wrote IRC.pm to help test some X-Chat scripts. Typeglob silliness inspired by reading mjd’s Perl pages.
-