“He who can destroy a thing, controls a thing” - Paul Atreides

Podcat is a podcast catcher written in Go, inspired by Podfox.

Podcat was born of a desire to build something outside of work that was bigger than than a typical tutorial project, but small enough that I would be sufficiently motivated to finish it. I also wanted it to be fully featured enough that I would, thereafter, be able to use it day to day.

To those ends, Podcat is a success. I have a few ideas for further enhancements, but the program is, for all intents and purposes, complete. Morever, I use now use Podcat every day to manage my podcast downloads and online video subscriptions.

There and back again

The story starts with me looking for a command line application to manage podcast downloads.

In fairly short order, I happened across Podfox, an open source podcast catcher written in Python, which did most of what I wanted—and that was sufficient for a time.

I did, however, find a couple of bugs in Podfox: some servers restrict requests from clients that do not identify themselves with a user agent string; and some podcast hosting sites use pseudo-random alphanumerics to name files, and, in turn, Podfox uses those file names, as opposed to human readable names to name the files that it downloads.

Of course, with Podfox being open source, I was free to patch the source code. The changes were small enough and the code was compact enough that making those changes didn’t present any great difficulty. Upon closer inspection, however, I was able to observe that this useful little program was only around a thousand lines of Python; right in the sweet spot in regards of being small enough to reimplent in short order but also capable and varied enough to make for an interesting challenge.

So I set to work.

Podcat as it exists today is not really a reimplementation of Podfox. The overall workflow is very similar, but even in terms of the command line interface Podcat has a lot more flags. Those exist mainly to enable me to script (and thereby automate) various behaviours. The internals are quite different.

If anybody else can find a use for Podcat then that would be amazing, but even if I remain the only user the work did at least provide me with the impetus to learn a lot more about the Go programming language, which I had been meaning to do for some time.