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

Released v2.1.1
Fix bug with too much damage in a game.
(3 total commits)
Version 2.1.1.
Fix bug with match page.
Fix bugs with players page.
Bug fix with swapping colors.
Update topic with swap colors.
Add `!swapcolors` command.

Fixes #128.
Fix various bugs with season selector.

Fixes #127.
Fix bug with unencoded player name in `!stats`.

Fixes #126
Fix bug with matches when a score is 0.

Fixes #125.
Bump node-database version.
Released v1.2.1
Version 1.2.1.

Attempt to close existing SQL connection before opening a new one, even if it may not seem necessary.
Fix bug with broadcast talking to closing websockets.
Default to active only players on players page, option for all players.

Fixes #121.
Limit players on top KDA on front page to those that have played a number of games in a season equal or more to 10% of the number of games their current team has played.
Fix operator on rating change on teams page.

Fixes #122.
Fix various bugs with match page.

Fixes #123.
Remove player from other teams' invites and requests when they found a team.

Fixes #124.
Increase team roster cap to 10.
Update server list API.
Accommodate updated API from tracker.
(2 total commits)
Attempt to get the API using the new data.
Reposition exitGame code block.
Added LobbyStatus / LobbyExit support
(10 total commits)
Further eslint fixing.
(3 total commits)
I give up, require-atomic-updates is a cursed rule.
Appease linters.
Added LobbyStatus / LobbyExit support
(5 total commits)
Display first page of archive in local time.

Fixes #21.
Fix bug with players who took damage but did not record a stat.
Potential fix for websockets.
Properly 404 invalid game IDs.
(2 total commits)
Fix bug with non-existent CompletedId.
Fix typo.
(2 total commits)
Fixed bug where there is no attacker.
Released v2.1.0
Version 2.1.0.
Fix bug with port on iisnode.
(2 total commits)
Update README for v2.0.0.
Package upgrades.

Fixes #16. Fixes #17. Fixes #18.
Add rating changes to the team page.

Fixes #119.
Add rating changes to the player's matches list.
Add rating changes to the match page.
Show rating changes on matches page.
Include games without stats in the team game log.
Only calculate ratings for closed games.
Add link to games in #match-results.

Fixes #120.
Damage grid for the match page.

Fixes #84.
Remove server records from team page.
Add `!clearstats` command.

Fixes #118.
Fix formatting of match page.
Fix bug with player identification in `!addstats`
Setting score now causes invalidation of closed games cache.
Fix bug with rematch.
Fix bugs with showing damage.
(2 total commits)
Fix bugs with the `!addstats` command.
Fix bug with saving rating changes.
(2 total commits)
Don't allow scores to count if a player can't be found.
Remove some restrictions from replacing home levels.

Fixes #15.
Update node-database package.
(2 total commits)
Add TMI, start using eslint and tsconfig.json.
Remove references to home/neutral server.
Ignore postseason games when deciding who is the home team.

Fixes #116.
No longer 404 the cast page if a map hasn't been selected yet.

Fixes #115.
Invalided closed game cache when a match is confirmed.

Fixes #113.
Do not crash on Redis 500, instead log a warning.

Fixes #112.
Fix bug causing the same player to be added to team stats twice.
Fix name normalization bugs on player page.

Fixes #110.
Add the `!homes` command.

Fixes #109.
Invalidate completed matches cache when a match is closed.
Show previous match even if there were no stats.

Fixes #108
Only show a player's season stats on the cast page.

Fixes #107.
Update createChannel function.

Fixes #106.
Do not show teams who did not play in past seasons.

Fixes #100.
Show last team player was on in the specified season, not their current team or no team.

Fixes #96.
Include weapon damage stats on matches page.

Fixes #84.
Save damage stats from the tracker to the database.
Improved implementation of keeping track of rating changes.
Actually add the command for `!addstats`.
New `!addstats` command to add stats from the tracker.

Fixes #83.
Don't check for pilot duplication if they are not on the server.
Fix documentation.
Allow `!addstat` to work with players not on the server.
Fix bug with a player in the top 5 not on a team crashing the home page.
(2 total commits)
Improve logging.
Improve logging.
(2 total commits)
Disconnect redis client after use.
(2 total commits)
Track rating changes per game.

Fixes #73.
Save weapon names, not weapon strings from the game.
Only add game if there are events to save. Media Player