Code

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.

IRC

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

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 roughly alphabetical order:

sopel-AniTV
Query for anime airtimes with filtering by title and station (emulation of a Java module for Pircbotx).
sopel-BombBot
Plant and defuse bombs on other users in the channel (forked and improved from an existing module).
sopel-dgwmergeutils
Companion module for (most of) my games for sopel that allows merging users together in such a way as to preserve their stats.
sopel-duel
Lets users duel each other (emulation of a preexisting mIRC script).
sopel-jisho
Performs Japanese–English dictionary lookups using Jisho.org’s public (but basically undocumented) API.
sopel-rep
Karma-type module that lets users “luv” and “h8” each other (emulation of a mIRC script).
sopel-roulette
Lets users play Russian roulette (emulation of a mIRC script).
sopel-sockmsg
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.
sopel-UnoBot
Provides UNO games via IRC on a per-channel basis (originally based on an existing module for a predecessor of sopel called Phenny).
sopel-wolfram
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.
sopel-xkcdb
Fetch quotes from the xkcdb quote database.
who-is-dugoo
Nuisance module I threw together one night to bother people who try to pronounce my nickname phonetically.

ZNC

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.

ZNC
I’m proud to have contributed in a few small ways to ZNC’s core offerings.
znc-push
The znc-push module connects ZNC to push services for notifications on mobile devices when away from IRC. I fixed a few things.

IRC clients

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.
Textual
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

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

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.

Notes:

  1. Understatement of the decade, probably. []
  2. 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. []

Comments are closed