Music. Coding. Gaming. Life.


Programming has been a hobby of mine since I was a child. I am entirely self-taught, and have managed to carve out a career in the field that spans over fifteen years.

Initially, I worked with BASIC on the TI 99/4A, Atari 130XE, and the Commodore 64 and 128. This transitioned easily to Mac OS 7's QBasic. Then I learned Microsoft Visual Basic 4 through 6 and starting making small programs and games. My first two programming jobs involved me learning Microsoft Access, with all kinds of back-end VBScript.

In 1998, I got heavily interested in web technology, and took a dive into HTML and JavaScript. Soon, I'd pick up Visual Basic.NET, C#, and ASP.NET. I was then able to transition my HTML knowledge to the modern HTML5 browser. My JavaScript experience also readied me for learning Node.js. Along the way I've picked up a bunch of PHP and C/C++ as well somehow.

In many ways, I consider the core concept of coding to come quite naturally to me. You simply break a task down into smaller and smaller tasks. What really fascinates me about coding, however, is how you can put all these simple tasks together to do something phenomenal.

I am involved in many projects outside of my professional career that involve programming in some way. This page is dedicated to showcasing those projects.

Current Projects

Commits and Releases

linux: disable OLMODDIR setting in .so, now handled in .sh
(15 total commits)
Set the content type when posting to the tracker.
(6 total commits)
Enable SSL.
Store all stats from games in prgress.
Allow for an HTML root.
Fix edge image.
Fix bug with tweets.
(2 total commits)
Released v1.0.8
Version 1.0.8.

* Most URLs changed from http to https.
* Replace captchagen with svg-captcha.
* Removed references to Google Plus.
* Replaced Internet Explorer with Edge as a recommended browser.
HTML encode the error message.

Fixes #1.
Fix bug with disbanding a team.
Rewrite website for better MVC implementation.
More shortening timeout errors.
Released v1.2
Version 1.2.
Fix comments.
(2 total commits)
Fix comments.
Don't show team ratings on team page for postseason.
Released v2.0.2
Version 2.0.2.
Fix bug with missing current season variable.
Improved cache invalidation on players joining, leaving, creating, or disbanding teams.

Part of #79.
(3 total commits)
Show correct stats on team page.

Fixes #97.
Show correct standings in pending matches.

Part of #98.
(3 total commits)
Update about page for recent commands.

Fixes #93.
Version 1.0.
Improve page authorization, add API to add new logs.
CSS, and add home page that queries log entries.
(2 total commits)
Setup blank site with user authorization.
Released v2.0.1
Bug fixes.
(2 total commits)
Released v2.0.1
Update more repository locations.
Route not required for 405s.
Reflect the move to overload-development-community.
Various typo fixes.
Shorten database timeout error.

Fixes #95.
Shorten various Discord errors.

Fixes #94.
Fix various season selectors.

Fixes #92.
Don't show season number for pending matches.

Fixes #91.
Fix issues with matches, players, and records page not showing correct season on season changeover.

Fixes #82.
New `!maplist` command.

Fixes #81.
Fix promises not being awaited.
(2 total commits)
Don't notify for completed matches after match time is changed.

Fixes #78.
New map list page.

Fixes #77.
Remove pilot from a team's captains channel when they leave a team.

Fixes #76.
More appropriate errors when mixing up !team and !tag.

Fixes #75.
Version 0.2.4a. Modified using arbruijn/olmod#3.
Bug fixes.
Upgrade dependencies.
Support for NecroDancer CoNDOR 8.
(5 total commits)
Support up to 8v8 games.
(3 total commits)
Save end game stats received from olproxy to the database.
(2 total commits)
Upgrade Newtonsoft library to 12.0.2.
Added server browser instructions to README
(18 total commits)
Shorten redis timeout errors.
Released v1.1.1
Version 1.1.1.
Various bug fixes.
Better concurrency and error handling.

Fixes #2.
Additional information for exceptions.
Ensure Discord is started up before the web application.

Fixes #72.
I guess technically these are 405s, not 404s.
Removed superflous mode data tag logging
(9 total commits)
Fix prefer-named-capture-group ESLint errors.
Fix bugs with record types in standings.

Fixes #71.
Write VoD to VoD channel.

Fixes #70.
Add VoD to match and matches pages.
Thank caster for casting, and reminder to post VoD.
Don't listen to guild member events on servers other than OTL.
Add the !vod command for casters.
Redis caching of common web calls.

Fixes #69.
Setup cache invalidations.
Addition of caching framework, plus notes for implementation.
Fix bug with unvoiding a match with no match time set.
Probably a better way to do scheduling.
Schedule notifications instead of checking once per minute.

Fixes #68.
Upgrade express.js.

Fixes #2.
Add streamers and casters to the match page.

Fixes #67.
Link matches on the matches page to their own match page.

Fixes #66.
Fix JavaScript bug causing dates to not display.

Also a documentation fix on the home view.
Send a 404 instead of a 500 on a request with an unsupported method.
Fix Discord.js error handling of ECONNRESET.

Fixes #64.
Fix bug with trying to notify matches where the channel doesn't exist.

Fixes #63.
Setup pings to indicate a server is online and offline.

Offline ping only occurs if "signOff" is true in the appsettings.json.
(14 total commits)
Shorten database timeout errors.
Fix jip lobby join
(24 total commits)
Fix example tracker url
(4 total commits)
Version 0.4.
Various bug fixes. Media Player