I work on open source software projects in my spare time and put together a list of the more noteworthy (to me at least) ones here. See my GitHub profile for these – and other – projects.
- Yukon Chinook run timing forecasting [2012 → Current] I run a collaborative team to forecast the run timing of the Yukon River (Alaska) Chinook Salmon stock. Pre-season forecasts come out in April and May, and in-season forecast updates get made daily in June and through mid-July. Past years’ forecasts: 2019, 2018, 2015, 2016, 2015.
- TreeStats [2015 → Current]: Combination Ruby (website) and C# (Decal plugin) for Asheron’s Call player tracking. Yes, it’s supposed to look like that :). Website, Code: Website, Plugin.
- hotline [2019 → Current]: WIP Rubygem for the Hotline protocol. Currently only supports the Tracker Client portion of the protocol. Code.
- TownCrier : Decal plugin for sending webhooks on to various services when certain ingame events happen. Code
- Overly-Detailed Asheron’s Call Skill Planner (ODACCP) : Similar to other character planners out there for Asheron’s Call but way more complicated (See: awesome). I mainly started this to learn Vue but it’s turned out pretty usable. Sorry for the name and the overly Spartan interface. Hosted on Zeit Now with Firebase for persisting shared profiles. I use this project as an advanced Hello World of sorts for learning frameworks like React + MobX, choo, and Svelte. Website, Code.
- DataNext : DataONE Search client written in Next.js. Mostly written to test out the React/Next.js waters but it’s turning out pretty usable at this point. Code.
- standardrb-action : GitHub Action for Test Double’s standard. Code.
- DecalDev.com : Website for decaldev.com. Made the original version back in who knows when. Redone in 2020.
- PhatACUtil : Helper Decal plugin for testing and developing a private Asheron’s Call server emulator (now defunct). Code.
- upriver (2015): R package for my M.S. Fisheries thesis on in-river migration modeling of salmon. Paper, Code.
- rdftoweb : Static site generator for RDF. Creates a series of static HTML pages from an RDF graph. I made this largely for my own purposes when I wanted to share RDF with others and didn’t have a lightweight solution for it. Code.
- hltracker : Simple Ruby script for querying Hotline trackers. Eventually turned into the hotline rubygem. Code.
- AutoDeShift : World of Warcraft plugin made for my own use to automatically de-shapeshift when needed. Code.
- receipt : World of Warcraft plugin to show the net results of vendor transactions. Code.
- DeadlyWatcher : World of Warcraft plugin that shows the number of stacks of Deadly Poison your target. Code.
- Alias : Decal plugin for helping you keep track of your friend’s many alts by putting a common name or alias next to their alts’ names in chat. Code.
These are projects I worked on that never made it out of development for one reason or another.
An online match history viewer for League of Legends (similar to LeagueSpy). This is from way back when the LoL client wrote game logs to disk and players had to upload those logs to websites (like Loltistics) to share their games. It looks like, since then, Riot Games has produced an API which makes this all a lot better. Code.
What didn’t work? It was time consuming and felt like a losing battle to keep updating the log file parsing routine when the LoL client updated.
Pacific Northwest Marine Field Guides 
Ruby (Rails) web application for creating customized field guides of marine species in the Salish Sea area but written for really any area and type of organism. WWU students would fill in basic life history information about vaious species as part of their classwork and then other scientists or people (i.e., a K-12 educator) could create printable (PDF) field guides of the species they were interested in. I did this work as part of my undergraduate research at Western Washington University. Code.
What didn’t work? In 2010, hosting Ruby on Rails applications was a bit of a pain. To add to that difficulty, our campus infrastructure ran on FreeBSD (which I didn’t know when we started the project). It turned out that our sysadmins weren’t willing to let us run a Ruby web app so the code just ended up sitting there because we had a hard requirement to run it on campus infrastructure. Lesson learned: Get to deploying to production early and often. We would’ve been better off writing the application in PHP because our sysadmins wouldn’t have had any issues with that.