Occasionally1 I am moved to write code. When this happens, it is usually in the form of a plugin or extension to some piece of existing software. A good number of my more mature/older projects are listed here, but I also contribute to several third-party projects on a semi-regular basis.
Because I use IRC for so much of my communication (including interfacing with Twitter, Facebook, Steam, and Google Talk/Hangouts messaging, though BitlBee, I’ve become involved in a number of IRC-related projects over the years. This is a non-exhaustive list focusing on actual code (rather than “merely” involvement with testing, bug reports, etc.).
Sopel (formerly Willie) is a Python-based IRC bot framework. I started running it sometime in 2014, and have since written or updated a number of modules for it. In March 2018, I took over as project maintainer, so there’s pretty much no chance I’ll stop using Sopel any time soon.
In roughly alphabetical order, here are the modules I wrote or updated:
- Query for anime airtimes with filtering by title and station (emulation of a Java module for Pircbotx).
- Plant and defuse bombs on other users in the channel (forked and improved from an existing module).
- Fetch a random cat fact from catfact.ninja.
- Companion module for (most of) my games for sopel that allows merging users together in such a way as to preserve their stats.
- Lets users duel each other (emulation of a preexisting mIRC script).
- Performs Japanese–English dictionary lookups using Jisho.org’s public (but basically undocumented) API.
- Karma-type module that lets users “luv” and “h8” each other (emulation of a mIRC script).
- Lets users play Russian roulette (emulation of a mIRC script).
- Proof of concept to let sopel receive text through TCP connections and send it out to IRC. Intended to be forked and extended for specific use cases.
- Provides UNO games via IRC on a per-channel basis (originally based on an existing module for a predecessor of sopel called Phenny).
- Sopel’s built-in Wolfram|Alpha support was removed when the company instated an API key requirement. I was the first person willing to take and package existing third-party code for distribution on PyPI. My first PyPI module, and first sopel module to have proper releases. Co-maintained with the original code’s author.
- Fetch quotes from the xkcdb quote database.
- Nuisance module I threw together one night to bother people who try to pronounce my nickname phonetically.
ZNC is an IRC bouncer, a program that facilitates using IRC like a more modern chat system with multiple clients and offline availability. The ZNC server lets any number of clients connect and disconnect while maintaining a persistent presence on the network, buffering messages for offline clients and replaying them so you never miss anything.
- I’m proud to have contributed in a few small ways to ZNC’s core offerings.
- The znc-push module connects ZNC to push services for notifications on mobile devices when away from IRC. I fixed a few things.
- The Lounge
- A web-based IRC client, compatible with both desktop and mobile browsers. It also offers some of the functionality of ZNC (but it also works behind ZNC if, like me, you want to use native clients on some devices). I’m pretty new to Node.js, but am steadily getting better via a few contributions to The Lounge.
- An IRC client for macOS. I’m still no good at Objective-C, but somehow I still managed to contribute a couple of fixes.
YOURLS is a self-hosted URL shortener, an alternative to using one of the big names like TinyURL or Bitly. I installed it in September 2011, after getting a short domain name, and have since used it for almost all of the short links I need for Twitter/Facebook/SMS messages.2 I’m also a member of the YOURLS project on GitHub since October 2017.
- Don’t Track Admins
- Does what it says: It suppresses click tracking of logged-in YOURLS admin users. This is by far my oldest project featured here; the first version was committed on September 18, 2011.
- Understatement of the decade, probably. [↩]
- A big motivator for this was wanting control of my own links. Much of my Twitter archive, for example, is largely useless because I used tr.im links for their brevity and for the clever domain name. The service shut down without publishing the link database anywhere, and the mappings are now simply gone. [↩]