I’ve been horrid about blogging lately, but didn’t want 2015 to pass with exactly zero posts. First is an open source review/update (the good & the bad), with some more personal topics afterwards. If you’re the skimming type, I bolded the important bits.

Open source: the positive stuff

Fabric 2 progress

I’ve been working on Fabric 2.0 for years now (!), but for the first time I can truthfully say its alpha release is Almost Ready - a lot of progress was made in 2015, especially recent months. It’s felt great watching pieces drop into place & reaping the benefits of building everything on top of the Invoke project. Which turns out to be a sizable majority of the “Fabric 2” code; for those paying attention, it’s mostly public!

The benefits of applying even moderate amounts of foresight while writing software cannot be overstated. Trying to plan everything at the start is impossible; even trying to get close has serious diminishing returns. But taking the time to organize code along obvious lines of responsibility, or implementing a “core” feature via a generic public API (thus turning the feature itself into a simple wrapper) - the payoff is enormous.

Also - having a truly test-driven codebase, and one where objects/classes are the default mode of organization instead of modules of functions, is a nice feeling.

I could write an entire post (or series!) from what I’ve learned/am learning through these efforts. Then again, I doubt such insights are new

  • perhaps I should just read existing literature on software craft instead? eyes unread copies of ‘Coders At Work’ and ‘Beautiful Code’ on bookshelf…

Ticket cleanup

Thanks in no small part to the efforts of some community members, a bunch of my OSS projects’ tickets have been closed, due to outright age or because they have been found to be invalid or fixed.

We’re far from done, but it still felt good to watch the open-ticket count

  • mostly on the Fabric repo - drop by (IIRC) solidly double-digit figures.

Paramiko 2.0 is looming

While not a rewrite like Fabric 2.0, Paramiko is due some decently sized changes of its own - most notably a shift in its cryptography underpinnings (from PyCrypto to cryptography.io) and a rework of its decrepit, bug-ridden client authorization algorithm.

Fabric 2.0 will probably require Paramiko 2.0; Fabric 1.x has a few implementation quirks that exist solely to (poorly) work around the aforementioned Paramiko authorization problems. Supporting both versions of that behavior would be counterproductive, as would dealing with the dependency shift.

Alabaster blessings

When I took over Paramiko and started working on Invoke (ca 2012-2013), I overhauled my OSS projects’ websites (blog post 1, blog post 2) and created Alabaster. Along the way, because my motto is “Uncomfortably Thoroughâ„¢”, I incidentally created a super customizable version of a popular (but not widely available) visual look.

This year, I was privileged to have Sphinx itself add Alabaster not only as an included theme, but as the default one!

Granted, this has complicated Alabaster’s development process (I’m incredibly sensitive to backwards compatibility concerns) and increased the rate of inbound issues and PRs…but it still feels good.

It also means that the Requests site and my own project sites will increasingly look like they’re the opposite of distinct (“why didn’t these lazy devs even choose a non default theme?!”) but that’s probably the best problem to have.

Open source: the less than positive stuff

Open source has been draining this year, but the actual magnitude hasn’t necessarily changed - just my ability to deal with it. See the later section on burnout for details on that…

Development estimates

New Year’s resolutions are crap, and while I’m not actually declaring one here, I’ll be making a concerted effort to stop giving estimates in the future. Estimate accuracy is heavily dependent on prioritization, and it should shock nobody that unpaid volunteer work - while it can have its own internal prioritizations - is, as a unit, rarely going to be prioritized above paying work or life/work balance.

However, it’s incredibly difficult to resist combining users’ fear or impatience with one’s own clear high-level mental roadmap, resulting in “I’m hoping to have this done (today/tomorrow/next week/next month/etc)”. Such estimates are, without fail, overly optimistic - resulting in false hope for the user, and increased guilt/stress for the developer when they’re inevitably missed.

Paramiko users remain unaware of Fabric

I can’t even count the number of support requests we get from Paramiko users who are trying to do bog standard “run a command and get its stdout” things, and are running into minor roadblocks Fabric solved many years back. In other words - folks who should be using Fabric and not Paramiko directly. It’s pretty depressing & has gotten even worse this year.

Even discounting the few who have legitimate needs Fabric 1.x doesn’t fill, it’s a lot. Once Fabric 2 is out, with its vastly more library-friendly API, even that excuse will vanish.

I’ve clearly got some PR work ahead of me. Oh joy.


It has been an amazing year for poutine! PyCon “US” had its 2nd year in MontrĂ©al this past spring, and boy did I eat a lot of delicious poutine, again (and smoked meat! SMOKED MEAT).

Poutine offerings here in the US have been…less than stellar. But then Smoke’s Poutinerie opened a branch near me, in Berkeley, CA! It’s the real deal, and I can’t wait to go back the next time I need my arteries clogged.


I took a three-week vacation in Japan this October, and it was an amazing & wonderful (if not exactly relaxing) experience. If I had the time I’d post a travelogue about it, but I don’t, so, uh, sorry :(

Suffice it to say that the food is incredibly tasty, the public transit puts even NYC’s to shame, the cleanliness and attention to detail is pervasive, and obviously, the cultural offerings are a source of constant delight to the Japanophile.


Some games I completed this year and enjoyed, in no particular order (it’s not like I work at Giant Bomb anymore, not that I participated in GOTY stuff when I did…):

  • Shadowrun Returns and Dragonfall: a supremely impressive Kickstarter success story, with (in Dragonfall especially) some absolutely stellar writing.
  • Far Cry 4: a very Far Cry Far Cry game, but one with semi-meaningful story branches!
  • Guacamelee: fun platforming, attractive art style, good humor, great music, and luchadores - what’s not to love?
  • Broken Age: a worthy successor to the point-n-click adventure games it draws inspiration from.
  • Antichamber: ow, my head hurts.
  • The Witcher 2: even better than The Witcher, which I didn’t hate.
  • The Longest Journey: another excellent adventure game I waited entirely too long to play. Must have been pretty mind-blowing in 1999.
  • Tomb Raider 2013: a really good reboot that I got close to 100%‘ing (I never do that)!
  • 80 Days: super great writing and surprising replayability given it’s based on a linear narrative. Also way less racist than said original narrative.
  • Mini Metro: a strange mix of relaxation and anxiety (relaxiety?). Highly recommended if you like urban planning, trains, and/or maps.
  • Fallout: New Vegas: gave this another shot with a savegame mod, and managed to avoid the file corruption that foiled my last attempt. Long live the NCR!
  • Shadow of Mordor: another strange mix, this time of of Tolkien lore and ultraviolence, but lots of fun either way.

Stress and burnout

Well, here’s the sad part: like an uncomfortably large number of others in my peer group, I’ve experienced some (at times, crippling) stress, burnout and depression this year.

Being a sysadmin is largely thankless crap even at the best of times (I will just say that 2015 has not been the best of times). Bundle it with an entire second full-time job which pays nothing and has reams of entitled clients, and you get a very crotchety Twitter feed. And maybe increasingly frequent temper flares, sobbing-on-the-couch episodes and contemplations of drastic measures.

I’m increasingly unsure whether it’s possible to solve the iron triangle of getting paid, giving open source projects the attention they need, and staying sane - again, something many others have been voicing this year. I’ll be giving some serious thought to my own roadmap in 2016.

Looking ahead

As mentioned earlier, actual New Year’s resolutions are crap, but general goals are good, right? Here’s some goals for myself:

  • Figure out that thing about the stress.
  • Actually beat Baldur’s Gate II this time, for reals, so I can unashamedly devour its passel of spiritual sequels.
  • Release Fabric 2 (duh).
  • Introduce a bunch of unenlightened friends to the wonder and joy that is Bailey’s Taproom, come PyCon 2016.
  • Blog more…maybe.

If you got this far, thanks for reading, and I hope you have a good 2016!