My name’s Jeff. I’m a computer guy, personally and professionally, specializing in Python and Ruby development and Unix systems administration.

Most recently I’ve been mixing the two disciplines, writing development tools to make administration easier and more automated. The catchy label for this is “DevOps”, but all that matters is that it lets me do two complimentary things I love.

For more on my professional career, please see my resume and hiring pages.

Why you might know me

I am best known for maintaining the popular open source SSH scripting library, Fabric (and its dependency Paramiko), and for co-authoring a well-received book on the Django Web framework. Details available in my resumé and my projects page.

Where I am, and have been

Born in the early 80s, raised and educated in Western Massachusetts through the turn of the century, I spent the ‘00s in the New York/New Jersey metro area and moved to the San Francisco Bay Area in 2011.

New York is a better city; the Bay Area is a nicer landscape (and with vastly better weather, massive drought notwithstanding). Despite the former’s aromatic summer trashpiles, I never internalized the phrase “eye-watering stench” until I got a job in the latter’s SOMA neighborhood.

I travel to the Pacific Northwest reasonably often (Portland, for work/friends/small conferences; Seattle, for a large annual conference) and it’s pretty swell.

As a child, I spent a week each winter on the Gulf Coast of Florida; as an adult, I travel to the Fort Lauderdale area at least once a year. That state has nice beaches.

Where (else) to find me online

My email address is jeff [at] bitprophet [dot] org. And as you can probably guess, my online moniker is bitprophet. It’s my username at the following Internet watering holes:

I’m not on Facebook; it doesn’t feel worth the time. Apparently they create entries for folks without accounts anyways, so…maybe I am on Facebook against my will? Kinda creepy.

In the past I’ve identified as “Cyrus” and can still be found using that name at MetaFilter and the FFVII Citadel (which I used to run, way back.)

GPG key

Below is the plaintext version of my GPG public key. At present, I mostly use it to sign PyPI packages.

-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 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 u6pINQ== =7x3O -----END PGP PUBLIC KEY BLOCK-----