The blog of roncli blog
Houston, Texas, United States
CTG Music
Trax in Space Beta
Recent Posts
WTF did Revival Productions just do?
A Tale of Two Communities
The Final Stretch
A Two Tiered, Untiered OTL
Secretly, you wish you could've done what I did
What have I done since v2?
It's Done. It's Finally Done.
The Big Picture is Starting to Wear on Me
A Low Bang to Buck Ratio
February 2005
March 2005
April 2005
May 2005
June 2005
July 2005
August 2005
September 2005
October 2005
November 2005
December 2005
January 2006
February 2006
March 2006
April 2006
May 2006
June 2006
July 2006
August 2006
September 2006
October 2006
November 2006
December 2006
February 2007
March 2007
April 2007
May 2007
June 2007
July 2007
August 2007
September 2007
October 2007
November 2007
December 2007
January 2008
February 2008
March 2008
April 2008
June 2008
July 2008
September 2008
December 2008
February 2009
July 2009
August 2009
September 2009
October 2009
November 2009
February 2010
March 2010
April 2010
June 2010
July 2010
August 2010
September 2010
October 2010
November 2010
December 2010
March 2011
June 2011
July 2011
August 2011
September 2011
October 2011
December 2011
January 2012
February 2012
April 2012
July 2012
November 2012
July 2013
April 2014
July 2014
August 2014
November 2014
December 2014
March 2015
April 2015
May 2015
June 2015
July 2015
September 2015
January 2016
February 2016
May 2016
July 2016
November 2016
March 2017
January 2018
May 2018
June 2018
January 2019
January 2021
February 2021
March 2021
August 2021
October 2021
December 2021
August 2022
November 2022
October 2023
February 2024
April 2024
Saturday, April 27, 2024
WTF did Revival Productions just do?
Posted: 4:00:00 PM 0 comments
Over the course of the last week, OTL player JazzyJet found this, Voyager: Ascension by RFLXT, owned by World Enterprises LLC - no link because I can't find any presence of this company on the Internet. It was notable to him because the trailer was, to use JazzyJet's words, "just footage from Overload".

Upon pointing this out, RFLXT replied saying that they have "licensed the game from Revival".

"...for web3 use."

I'm sorry, what?

Turns out, RFLXT is working on some tech called the Digital Double avatar. The long and short of it seems to be that they aim to offer this Digital Double avatar to people, which is essentially an AI that mimics the person. I surmise that their short term goal is to get a somewhat deep game catalog going, and then eventually integrate this avatar into these games somehow. Buzzwords thrown around by RFLXT on their website include "web3", "AI", "blockchain", "metaverse", and "NFT". To quote fellow OTL pilot Doctor Tasty, "we have a royal flush, folks."

Getting back to the game at hand, Voyager: Ascension is essentially a free-to-start, 1 to 1 copy of Overload. There are some differences, including some mysterious currency called V Points for killing bots and collecting some items, a slightly different story, changed voice lines that some believe are done by AI rather than voice actors, a reference to an unimplemented season pass, and the ability to unlock all levels for $9.99 (may also be unimplemented as of this writing). There are also a number of bugs that have been found in Voyager: Ascension that don't exist in the base game. But the levels are the same, and the menus and game look and feel like Overload. In short, it is a very low-effort copy.

Now, I'm not here to shit on this game, and if this ends up being some players' first experience with 6DoF, it's not a bad start into the genre. I'm not going to suggest that you should run out and get this game either, though. What I do want to do, however, is look at this from a neutral perspective and evaulate the chances that something like this has to succeed.

First of all, this is a Six Degrees of Freedom First-Person Shooter. By itself, this is one of my favorite genres. However, when considering whether this is going to be a commercially viable game, you have to look at the genre as a whole, which I did recently in my Six'd Off announcement video. If you're going to do a new 6DoF FPS, it needs to offer something unique in terms of gameplay. Slapping on these royal flush buzzwords - or honestly adding any social features from the past 30 years - is not going to help the game do any better than Overload. The gameplay itself needs to be new, exciting, and offer something different. This game does none of that so far.

Second of all, the fact that this is practically a 1 to 1 copy of Overload means you're not going to get too many players wanting to pay twice for the same game, especially to two different companies. Maybe they have plans to radically change the game, and are just putting out a tech demo of sorts, but there is no indication anywhere that this is what they are doing.

Third, you're associating your game with these royal flush buzzwords that most sensible people on the Internet associate with words like "scam", "grift", and other terms that generally keep smarter people away from ventures such as this. Sure, some people will be excited over this, but these are likely to be the same people who have been rug pulled at least once in their life.

Releasing a game in an unpopular genre, when the game is just a copy of a game already released in said genre, attaching web3 features to it, and then expecting cash to pour in to your business is like multiplying 0.01% by 0.01% by 0.01% and expecting to get 100%. Voyager: Ascension's existence makes absolutely no business sense to me, and I have to imagine that this game is not going to last very long once they figure this out. The company behind it surely won't last long if they don't.

Which leads me to the title of this post. WTF did Revival Productions just do? At best, they've opened the door for web3 to invade the 6DoF space for a quick cash grab. At worst, they've knowingly involved their product and brand with technologies that many consider to be the morally worst technologies on the planet. And this is to speak nothing about what it's done for the modding community. With olmod under an MIT license, all RFLXT would have to do to use olmod code in Voyager: Ascension is to include that license with their product. I know I don't want to be writing software for free for a web3 company, and I imagine most of the other developers on the modding team would agree. This puts us in an extremely tough situation, and I honestly don't know what to do about this. Do we try to license the source code ourselves somehow? Do we change the license on olmod? Do we just close up shop and call it a day and let Revival and RFLXT do whatever they want?

I certainly didn't have "Overload but with web3 features" on my 2024 bingo card.

I think Revival Productions owes the Overload community an explanation here, and what we should expect from both them and RFLXT moving forward.

Update (4/30/2024):

Matt Toschlog posted the following to the Overload Discord. It confirms that they weren't trying to do anything malicious by licensing the code to RFLXT (also, it appears Refactor Games is doing most of the development on Voyager: Ascension) and were simply looking to gain back some of their losses while working on Overload. Unfortunately, I think no amount of statement from Revival is going to unmuddy the waters that is the modding situation. Hopefully it becomes a non-issue, but it is always something we're going to have to kep an eye on in the future. Here is the full statement:

Overload fans,

We've been following the conversation on this server about the release of Voyager Ascension and realized (a little late) that we should make a statement.

Voyager Ascension is, obviously, based on Overload. We licensed the game to RFLXT about a year ago after they approached us about making a Web3 version of the game. (And, as has been surmised, the person who instigated the deal was Alan Pavlish, who was an exec at Interplay when they published Descent.)

We're not experts in Web3 and crypto and don't have much interest in moving into that world. But we did think it was an interesting idea and we were happy to sign the deal. Overload was a labor of love for us, and while it was one of most fun and satisfying projects we've worked on, it was not a financial success. Even with the licensing fees for Voyager Ascension we've lost a significant amount of money on this project. (Which is fine. Embarking on a new project is always a risk.)

When we licensed Overload to RFLXT we insisted that any Web3 version be released under a different name to avoid confusion with the original game. One of the great things to come out of the Overload project is the enthusiastic community that's developed around it, and we didn't want the licensed game to affect that. Voyager Ascension will exist in its world, and Overload can continue with its own dedicated base.

If any of you decide to check out Voyager Ascension we'd be happy to hear what you think. We hope it's successful. And maybe it will even bring some new players to Overload.

Thanks again for your support.

Matt Toschlog & Mike Kulas
Revival Productions

Labels: , , , , ,

Monday, February 12, 2024
A Tale of Two Communities
Posted: 3:01:00 AM 0 comments
"If you're a high visibility player, it's on you to move the community in a positive direction." -Jonas Neubauer, 1981-2021, seven-time CTWC champion

This quote by Jonas Neubauer has been engraved on the Classic Tetris World Championship's first and second place trophies since 2021, the year he unexpectedly passed away at the age of 39. I met Jonas and his wife Heather, a Dr. Mario world champion at TwitchCon in 2019. We both happened to cross paths at GDQx 2019. I was doing couch commentary for SpootyBiscuit's Cadence of Hyrule run while Jonas was doing couch commentary for Blink's Tetris 99 run. I got a big hug, a photo I'll cherish forever, and I introduced Jonas and Heather to one of the exhibits on the show floor, which was basically a mind-meld Tetris game. I remember the two of them enjoying themselves and having fun, and their laughter was contageous. Jonas was one of the few people I've met who, online, was pretty much the exact same person he was in real life, one of the most genuine individuals I've ever met. He was graceful in his CTWC defeats, and always worked to build up the community he championed.

Since his last win, there have been 4 other tournament winners. Joseph Saelee won twice. Then, Michael Artiaga (dogplayingtetris), won in back to back years. Eric Tolt (EricICX) defeated Justin Yu (Fractal161), the latter of whom won it a year later. Harry Hong also famously won the tournament back in 2014, interrupting Jonas's seven year streak.

All of these players have made a positive impact on the classic Tetris community in some way. Some have even made contributions to the community, hosting their own events, doing content creation, and genuinely being a good ambassador to the game. I had no idea that one side tournament at SGDQ 2018 would get me involved in a community amazing enough that I now find myself contributing my time to almost every classic Tetris organization. Oh, I suck at the game! But I don't let that stop me from being involved in organizing events, commentating for matches, and playing in the lower tournament levels myself, even if I have taken a bit of a step back from competitive lately to keep my competition anxiety in check.

Sure, Tetris has its bad spots. Players cheat. People get upset at others. People do tasteless things that get them banned. It happens, because people suck. But far and away, the classic Tetris community is wholesome, and I am better for being a part of it.

If only every community was like Tetris.

In the fall of 2021, a player showed up on the Overload Teams League team SpaceCowboys by the name of Zor. He was a pretty decent player. Not quite top 10 in a league of some 60 pilots, but someone seen as dangerous to play against. There was a lot of secrecy around this player. Teammates would often go on mute when talking about Zor's past experience with 6DoF games, or just outright not stream. Someone caught a stream and quickly identified the voice as the Descent pilot - and former OTL pilot - Jediluke. With a DCL record of 5982 wins and 348 losses (1413-117 vs Rethink, 809-33 vs Drakona, and 476-24 vs b2af), Jediluke wasn't just a known quantity, he was the most active competitive player while the DCL was around, between 2013 and 2020. And, as the record indicates, he was pretty good, too: he was ranked first at the end of more DCL seasons (7) than anyone else (Mark392 5, Souljah 3, bahamut 1). What's more, he is unquestionably the most successful D1 pilot on my Twitch series The Observatory, a quarterly tournament open to all Descent 1 pilots where games are broadcast and commentated on, something the community never really had prior to this series, which was founded in 2016. To date, he's won 31 out of 34 seasons, losing only to Mark392 (season 5), Zero (season 12), and Morfod (season 26). We'll talk about Morfod's winning season a bit later. Unfortunately, Jediluke's also got a temper. He gets mad when he loses, and winning your first game over what seems like an impossible opponent usually results in him making you feel like shit, rather than celebrating your momentus victory.

For comparison, here's Jonas's last game at a live CTWC where he was shockingly eliminated in the first round.

Anyway, back to the point, Jediluke decided to compete in the OTL as Zor to "get away" from his Jediluke personality. Thinking it would put less pressure on himself, he adopted the alias and kept his true identity a close secret for a couple weeks. The voice changer was pretty silly, but once the word got out that Zor was Jediluke, he posted something quick in the OTL Discord explaining the name, and barring some critique from some old rivals, that was the end of it. The general vibe was like "yeah, it's weird, but he's got less of an attitude now, so whatever."

Also towards the end of 2021, season 26 of The Observatory occurred. An unknown entrant with the name "Genevieve" (PwnJett in game) showed up for the Finals Tournament as an unqualified player who had to fight from the wildcard anarchy to even get into the knockout bracket. He did so in shocking fashion, taking out Jediluke in the semifinals and Sirius in the finals to win the tournament. And, as the tournament concluded, Morfod revealed that he was in fact Genevieve. It was amusing at the time, and everyone got a good laugh. He had only played under that handle for a couple weeks, enough so that some regulars were aware of the handle. For me, I was kind of kind of amused, but also kind of annoyed that someone would go to such lengths as hide their identity just to gain an advantage. I let it slide, hoping it wouldn't happen again.

Um, remember earlier, when I said that people suck?

Season 35 of The Observatory kicked off this month, and with it Jediluke proclaimed his retirement, supposedly tired of not having a challenge after Mark392 showed up for about a week to play games and then left to become a parent. While Jedi's lack of participation didn't bother me - a more competitive top of the table would benefit the show - a newcomer, Tonka, showed up who had been around since August. Code, a long time Observatory player, did some training with him, and Tonka's skill began to noticeably rise. By the time season 35 began, it was clear that he would be a strong contender, and did in fact win all of his games in the first episode, including against season 34's runner up, terminal.

But something didn't sit right with some pilots, and eventually it was made known to me that he was suspected of cheating. Although there wasn't anything conclusive, and it was later decided that no cheating was involved, it got enough people suspicious that for the second episode, his IP was taken from a game log and compared with some website logs. I noticed that there was a lot of activity with that IP on the Overload game browser that didn't match the player's activity in Overload, which was very low and many months prior. I then decided to compare the IP to logs on the game servers themselves, and that's when the smoking gun was found. That IP was the same IP used by Zor in Overload.

While I had 100% confidence at that point that Tonka was 31-time champion Jediluke, a lot of things didn't add up. This player Tonka showed up in the community about 6 months ago. They were trained on basics like trichording. They had matches with Jediluke. They gave a phone number with a Houston, TX area code. They would chat back and forth with Jediluke, aggressively looking for games. Even now, this whole scheme doesn't make sense to me.

But it was real. Jediluke eventually confessed to the whole thing. And he was totally nonchalant about it. In fact, my current co-commentator, Chillybus, thought it was crazy that he would go through the whole thing. He said on Discord:

"for six months? what do you have to gain against pilots who would take hundreds and hundreds of games to even be competitive with you, let alone take a game? multiboxing discord accounts? faking tracker games? IMO you did competition a disservice and your friends dirty from the sound of it, just chasing shadows of the afternoon someone aliased you to a win. not how a longtime decorated top competitor should compose themselves. it isn't time to go around again, I think it is time to log off. you have shamed yourself here. That's all I'll say in this time and place."

The reply from Jediluke was equally nonchalant: "1 v 1 Chilly?" and "those who don't compete ...commentate".

Is this moving the community in a positive direction? Does he care at all about the community? Is this how a top player is going to treat the community that he represents?

This is literally night and day. In one community, I have players that are leaders, care about the community, and do everything they can to move the community forward. In another, I have players that are selfish, care about themselves, and do everything they can to try to get ahead.

You tell me which community I'm going to put more effort into.

Labels: , , , , , ,

Wednesday, October 11, 2023
The Final Stretch
Posted: 12:40:00 AM 0 comments
After much stalling on my part, the Overload Game Browser has finally migrated away from Windows over to Linux. This now makes 4 out of the 5 websites I wanted to move off the Windows box completed, leaving one last beast: the Overload Teams League.

This means I'm on the final stretch of a project that's gone on for almost two years now. It definitely feels like the light at the end of the tunnel. Now I just need to figure out what that light is.

The first thing I want to do after all this is done is give The Observatory its own website. I haven't updated anything having to do with it on this site in a long time, and the database I was using for it is massively out of date. In addition, I need to recreate the bot that was used for it so that the show runs much smoother. That will take time, however, and I'll be lucky to have it done by Season 35.

After that, who knows? I have a number of ideas on what comes after that, but haven't made any solid plans for anything yet. There's so many possibilities that I don't feel like I can even choose something until I finish up everything else I'm working on. I feel like I have an ocean of possibilities in front of me, but no clear direction to swim in. Yet!

In the meantime, a lot of other things are falling into place for me to resume a regular streaming schedule. More on that to come later, but I have a number of exciting projects in the works for the stream that I will be putting out there soon.

Labels: , , , ,

Sunday, November 27, 2022
A Two Tiered, Untiered OTL
Posted: 1:32:00 AM 0 comments
For those that don't follow the Overload Teams League, here are some examples of somewhat common scores: a close 96-93 game, a double-your-score 125-62 blowout, a comfortable 84-52 win, and a please PuDLeZ don't ever put 10 people into Indika again 283-252 throwdown.

And then there's this.

That's two-time OTL champion Invidia taking out winless Rogue Pilots by the score of 110 to 5. Ouch.

Here are the all time records that this game produced:

  • Highest Team KDA: 26.4
  • Fewest Team Deaths: 5
  • Highest Team Damage per Death: 2600.8
  • Highest Individual KDA: 84.0
  • Fewest Individual Deaths in 2v2: 1
  • Highest Individual Damage per Death: 8196.6

You may not understand these numbers, but rest assured, they are impossible numbers to get, especially given RP decided they're not playing anymore with their current roster until they can get some more pilots on their team.

Immediately, questions across the league were asked about why such a game should be counted. The answers are many, as are the arguments against. I sat on this for a couple days, thinking of a way to resolve this.

The obvious first solution is to divide the league into 2 tiers. Only count games when upper tier teams play upper tier teams and when lower tier teams play lower tier teams. On the surface, this sounds like a great idea until you realize there are only 11 teams, plus Rogue Pilots, which means that if we did this, we would essentially be dividing the league into two tiny tiers. Then you'd have to worry about league promotion/demotion tournaments and all kinds of other unpleasantries that an 11 team league simply does not have the patience for. This also has the drawback of disallowing play between lower tier teams and upper tier teams, at least from the formalized perspective. Sure, we could count "practice" games, but I am not made of enough time to track those practice games in this small of a league. I feel like the point at which I do something like this would be at 16 teams.

The second solution is to mark a team on a case-by-case basis as a practice squad. This would mean that the OTL is exclusive, and requires teams to prove themselves before they can start playing games that mean something. It would require manual intervention to get teams into the main league before they started playing games that count. That is not what the OTL is about. I am fine with teams that don't have skilled players trying to learn by playing against teams with skilled players. However, something has to be done about the current situation.

Putting everything together, I thought about what could work and what couldn't work. I don't want to exclude anyone, but I don't want to have the "NBA champions vs. bad high school basketball team" count for records. So, I came up with a system that allows those games to happen, but for the stats not to fully count.

The answer is an two tiered, untiered league.

It is untiered because a championship team can play a winless team, and have the game be meaningful on a league-wide level (provided the winless team decides to remain active). The standings page simply doesn't change. All teams are listed and rated accordingly.

What is two-tiered, however, shows up in individual stats. Going forward, individual stats are only displayed for games played vs. the upper league. That means when Rogue Pilots plays Invidia, Invidia is not playing for personal stats, only a team win. Rogue Pilots, however, do get to play for individual stats. That way, everyone's stats - from the top team to the bottom team - show their performance against only the upper league teams, and they can be reasonably compared. You can still see a pilot's stats against the entire league by going to their pilot page and selecting the appropriate option. However, everywhere else only shows stats vs. upper league teams.

This, of course, leads to the question of who is in the upper league and who is in the lower league. I thought about this, and again did not want to be exclusionary by saying only RP should be in the lower league. So, I have retroactively applied the following formula to determine who is upper and lower league:

  • The first eight teams in the league are automatically assigned upper league.
  • All new teams thereafter are assigned lower league.
  • At the conclusion of the season ending tournaments, the league is re-divided, with the six teams that make the knockout stage plus two other teams assigned to the upper league.
  • In seasons that have it, the two finalists of the season-ending Best of the Rest II tournament are the other two teams that make the upper league. In seasons that don't have it, the top two teams by the previous season's rating that did not make the knockout bracket make the upper league.

There are obvious caveats with this. First, one of the newest teams in the league, The Boys, are made of pilots that came from other upper league teams. They're pretty good, too, The Boys hold 3rd in the current season standings. Should they be lower league? The answer is yes. This is still a new team with a new dynamic that other teams need to become familiar with, so for a single season TB is considered lower league. Once they finish the Championships in the top 8 - and I have no doubt they will as half of their team was a large part of OMG's recent run of top 4 OTL finishes - they can be assigned to the upper league.

Second, if a team leaves the league mid-season, what should happen? One, that team loses the right to be upper tier, even if they return later that season. Two, there needs to be a way to fill the spot, and that will fall to 3rd place from the most recent Best of the Rest II tournament.

Third, if a team chooses to sit out of the Season Championships, what should happen? There are teams that aren't quite so competitive that they need to rank themselves in a season ending tournament. However, they may clearly be an upper tier team that just chooses not to play. So, if a team that sits out a tournament was upper tier in a previous season, I think the fairest solution is to play a separate series against the lowest upper tier team after the end of season tournaments are over, and the winner gets that spot.

There are probably other things that I'm not thinking of. It's probably not a perfect system, but to make sure that we're not excluding other teams and at the same time making sure we don't get ridiculous records (Yinut's 0 death game is also out of the record books after this update) that can't be beat under normal circumstances, this will do in a pinch.

There are two other minor changes that result from this update:

  • New teams are automatically set as not qualified to affect ratings (ie: ratings for games played against that team do not count) until they have played everyone 3 times. This is to ensure that teams that show up for half a season and then disband don't hit the ratings at all. Side note: I really need to come up with a term other than "not qualified".
  • Because it's a little more important now, the group stage will be returning to the Best of the Rest II tournament. The specific format of that will depend on how many teams play in it. A 3rd place match will only be played if it is necessary, ie: multiple upper tier teams disband at the end of the Championships.

There is also the ethical angle of the team that carried out that 110 to 5 victory. As of the beginning of the year, there is nothing to be gained for your team by getting 22 times the score of your opponent. It's no different than winning 110 to 109. Did the league's focus on stats make Invidia feel like creating a blowout like this was justified? I would like to think better of our pilots, but I can't discount that possibility either. I've also played in a game against RP where I got an outsized KDA, and all it made me want to do was never play them again, because it simply wasn't a challenge. If stats are a motivator for this kind of thing, I hope that by eliminating the source of motivation, games like these won't happen again, unless the lower team really wants the upper team to go hard.

This is a large update to the league structure. It seems like a lot is changing. But honestly it's a small update overall. I feel I owe it to the league to make sure that incidents such as the 110 to 5 game are just looked at as a footnote, rather than a lightning rod for drastic change. Ultimately, this isn't a drastic change, and it doesn't change the way the league operates on a day to day basis. Only individual stats are affected. The biggest controversy will probably be which team is in what tier, and if that's all that comes of this, this update will be a success.

Labels: ,

Saturday, August 13, 2022
Secretly, you wish you could've done what I did
Posted: 3:39:00 AM 0 comments
I mean, I'm not reading anyone's mind or anything like that. But judging from a lot of people's comments about That Bird Hell Site, you'd think that people would be dying to get away from it.

It's not that easy.

There's a reason it's called social media. It's social. It's your connection with a list of other users that you presumably have curated over a span of months or years. For some of those connections, it's your only connection to them. It also costs a lot of energy to make connections like these to begin with. So, it makes sense that people wouldn't want to start over elsewhere. In fact, I recall reading a couple people fearing that they were being abandoned by people who decided that enough was enough at Twitter.

A very fair conclusion to make, but not one that is without its flaws. Social media is a double edged sword. Sites like Twitter are designed to get you to engage the site as frequently as possible. How? Twitter has critical mass. Everyone you know is probably on Twitter or at least tried it, so you get comfortable with it because most of the people you know are there. They want you to stay on their site and browse around, so they try to learn about you and your friends through your posts, and then throw them all in an algorithm to try to make a few cents off an ad you might click on. Sure, Twitter has other ways to monetize, but the general rule is if a product is free, you - or more specifically your data - are the product.

To some people, this is just the absolute worst. However, I decided that I was generally okay with this as long as the product was useful and the people behind it weren't completely evil. Symbiotic relationships aren't necessarily bad relationships, after all.

When I "left" Facebook - "left" is in quotes because I still log in to and even use the account from time to time, much like I did during my Twitter down time - I made a conscious decision that I wasn't going to support what Facebook had become. When I first joined, it was fun to keep up with everyone. When I left, keeping up with everyone meant suffering through arguments, bad political takes, and opinions about things you didn't want to know. I saw the worst of people I cared for many times, and interactions on the site straight up ruined several relationships between friends. It was too much. The product ceased being useful, and I quit.

Earlier this year, I "left" Twitter - again "left" is in quotes because I still logged in, read everyone's posts every day, and even sometimes replied - I again made a conscious decision that I wasn't going to support what Twitter was about to become. My leaving was 100% about Elon Musk's planned purchase and privatization of Twitter. Why would something like this prompt me to leave?

Simple. The guy is an asshole.

Don't get me wrong, I'm no angel myself. I mean, just read this blog in its early years, or dig up some of my older posts on Trax in Space. However, someone with the money and influence that this man has who is consistently stooping to this level of dehumanization is downright dangerous. Sure, there are other billionaires out there with less than reputable personalities, but no one comes close to touching Musk right now. So if the top man at Twitter is going to be this kind of person - and this is not to mention anything about the recent political views he has taken - it will cease to maintain my loyalty.

Joining and using Mastodon regularly is simply me hedging my bets. Don't get me wrong, it's not perfect. Far from it, in fact. The main thing it's missing is critical mass - the people and organizations you know are very likely not on Mastodon. The other problem is it's hard to actually do any discovery on the site, although this might be good for some people whose main complaint about Twitter is that discovery leads to some bad mental health situations (ie: doomscrolling). However, consider this discovery is what draws a lot of people to Twitter, and is a contributing factor to its critical mass. A third problem is that its sharding is poorly done. You can only belong to one server, even if you have more than one interest, and it's not trivial to move servers if you decide you want to do so. I feel like with this being its cornerstone feature, it should've been more thought out and useful. But the good things are that it is actively moderated, it's easy to follow the posts of people you follow (even on other servers), there's no algorithm on your timeline to deal with, and you get 500 characters instead of 280.

I returned to Twitter once it was clear that the acquisition was not yet a done deal. No need to abandon ship if it's not sinking. Besides, I'm doing my part trying to keep it afloat. But like I said, there's social in social media, and that's the main draw. Remeber, that feeling of abandonment that people get by reading about people like me leaving is by design. I feel for people who are hooked like this, but it's not going to stop me from at least trying to do the responsible thing.

I'm hoping that if the worst happens and the deal is closed that I'll be able to formally pack up and leave for good without coming back, but if there's one thing I've learned from the last couple months?

It's not that easy.

Labels: , , ,

What have I done since v2?
Posted: 2:13:00 AM 0 comments

That's it. That's the blog post.

OK, so that's not entirely true. Actually, a lot has happened since the end of 2021. Allow me to recap.

  • I needed a break from hardcore coding. I was going hard for about a year, and needed some time to do something else for a while. I still did some coding, but it wasn't for the big picture projects.
  • Return to work sprung back up. I now travel to the city two days a week for my job. I was not ready for the level of fatigue this would bring on those days.
  • I moved. My wife and I bought a house, and I now live in Pittsburg, California, pretty close to a BART station. It's gorgeous here, we have awesome views of the delta and surrounding hills. The house, however, is cursed.
  • My ability to keep up with everything waned for a while. Having to worry about house searching during the week and actually going to look at houses on the weekend while juggling about a half dozen other responsibilities. For those keeping track, I temporarily gave up maintaining olmod, running the Observatory, and streaming regularly.

While things with the new house have been pretty hectic - see aforementioned comment about the house being cursed - life has been pretty damn good otherwise. I still feel my top goal in terms of coding is to get off of the Windows VM, so I'm going to start picking things up again to move into that direction. But first thing's first.

I've been doing a lot of modernization of some older projects, and have been forcing myself to catch up on super old issues. I want to get the issues list for my personal projects down to zero (excepting FusionBot, read on for more on that) before moving the Overload game tracker to a Docker project. After that, the next real big task is going to be combining the OTL and the Azure server manager into one project, and then moving it to a Docker project. The last big project is giving The Observatory its own website and reinstituting the bot so I don't have to directly deal with Borjarnon making a mockery of the event. (I still love you, Borj.)

After that? I don't think I can commit to anything after that other than shutting down the Windows VM once and for all. I have a lot of ideas as to what I want to do next, but getting to that point is going to take dedication... the same level of dedication I gave last year to my coding projects. It's not unreasonable for me to finish all these things within a year, but I also know how easy it is to burn out, so I'm taking it carefully and giving myself time to do other things that I enjoy. I believe that taking things one step at a time while leaving room for other things will help prevent the burnout I experienced at the release of

Labels: , , , ,

Friday, December 17, 2021
It's Done. It's Finally Done.
Posted: 1:52:00 AM 0 comments
I give to you the complete. The informative. The functional. version 2.0.

While it's been out here in beta for the last couple weeks, I formally released version 2.0 on GitHub earlier this evening, shipped it out to its new home in Azure, finished up all the remaining content changes I needed to make, and popped off.

OK, so the celebration was more subdued than that, but I tell you, this has been a journey. I've done so many things that are new, I don't even know where to begin. is the product of nine Docker containers. All of these containers run simultaneously on the same server to get the website to function.

  • Certbot - For keeping the SSL certs up to date.
  • Logger - A node.js application that logs Docker output to Azure Application Insights.
  • Nginx - This web server acts as a reverse proxy for the applications on the server.
  • Redis - Caching for the main website.
  • MongoDB - The main data store for the website.
  • MariaDB - The data store for the photo albums.
  • PhotoPrism - The photo album service that stores over 3,000 pictures used on the website.
  • - The redirection service for
  • - The main website. uses a whole bunch of tools to make it tick, including some mainstays like express. I also have written my own, including something called Hot Router, an express router that lets me create classes that are picked up by the router to determine what page to load when a certain URL is hit. It connects to a whole bunch of third party services for things such as my blog, my music releases, my coding projects, my gaming stats, and more. And, it has a super cool résumé page that I'd been wanting to do for a long time.

Being finished with this site doesn't mean it's time to stop, though. Next, I'll be doing a release of olmod for the Overload folks, doing some long overdue updates to the Overload Tracker and the OTL, and then it's on to moving all the Overload projects off of the Windows server and retiring it, finally.

There's still a long way to go, but I feel was the biggest project that hadn't been moved yet. It was a complete rewrite from the ground up, which the tracker and the OTL will not be. Hopefully I can complete everything I want to do within the next few months and free myself up to do some stuff other than websites for once.

We'll see how that goes in the coming months, but until then, enjoy the new!

Labels: , , , ,

Saturday, October 09, 2021
The Big Picture is Starting to Wear on Me
Posted: 10:59:00 PM 0 comments
Eight months ago, I wrote on The Big Picture, a summary of my initiative to get off of my Azure Windows VM and on to Linux VMs running Docker containers with Node.js websites backed by MongoDB databases. It's a meta-project of sorts, and it has taken a certain mental discipline to keep at it.

The Trax in Space 1 archive was easy to port, and since porting it I've learned that I didn't need to restrict downloads so much on it, so I increased the download limit. Six Gaming was full of challenges, and even today I find things I have to change with it because I didn't do it right the first time. I'm currently working on rebuilding this site and have been for several months now, and I'm itching to get back to the Overload-related projects, and to move on from this whole thing.

I said this back in February:

This is, of course, a multi-part project that has taken on a life of its own in recent months, and it's one I am enjoying greatly so far. It's really expanded the boundaries by which I am able to operate websites and related online services.

Boy, that's an awful lot of enthusiasm. Sigh. We were so young back then.

Since then I've worked through major bugs, tackled big architectural design questions, learned a hell of a lot about MongoDb... and have bored myself to death with this project.

Look, it's not like I knew this was going to be a huge project. Just the opposite, I knew what I was getting into. I remember how long it took me to complete the first time, and I'm still looking at coming in at well under a fifth of the time it took me to complete it the first time around. I've learned a lot in 7 years, and it's showing with how fast I'm getting stuff done. But when I take a look at the big picture, it just seems so... slow.

I am to the point I want to work on something else. I want to update the OTL for season 7 and beyond. I want to add some amazingly cool things to olmod. I want to make games of my own. And, I want to get back to regular streaming again.

But every time I sit down to code, I am reminded of the plot: get off that monolithic Windows VM, and you'll have the freedom to do what you want and when you want when this is all done. So I go heads down, jam my EDM playlist, and spit out another couple of files on whatever I'm working on, making a bit of meaningful progress until I get bored and go for a walk, play some games, or write a blog post.

I'm sure a lot of this stems from the fact that I've been essentially stuck at home for 19 months. I'm bored to death with that, too. No train rides to The City, and very few outings outside of the usual Friday routine of dinner and groceries. While 2021 has been infinitely better than 2020 when I didn't get out at all, I can't shake the feeling this year that I'm accomplishing very little.

Of course, my GitHub contribution graph will tell you otherwise, and when I look at things logically, I know I'm getting stuff done. I just wish I could fast forward to the end of the big picture so I can move on to the next big thing... perhaps something a bit more exciting.

Labels: , , , , ,

Sunday, August 29, 2021
A Low Bang to Buck Ratio
Posted: 2:08:00 AM 0 comments
The story behind Six Gaming is long, complex, and probably can't be covered in a single post. If I were to sum up what Six Gaming is today, the answer would be "probably should be dead, but stubbornly isn't". I knew this going into redesigning the Six Gaming website, yet I did it anyway. Why?

There's a number of personal reasons involved. My outside hope that some day everyone stops being super busy with life and commits to a podcast again, which is what the original community was built around after our WoW guild died. The only reason I decided to stop streaming it is because no one could commit to the schedule except for me. The website also has a Discord and Twitch bot that promotes streamers, hosting them on our Twitch page, which would be a great tool if the community was still active. However, it's not active, so the main reason I used to justify upgrading Six Gaming? Knowledge building.

Six Gaming is the first website that I've built that runs with a MongoDB back end. It's the second site I've built that uses Docker containers. It's also the second site I've built on my current generation of node.js website architecture, but the first time I've done it within Docker. The website uses Discord.js, Express, FullCalendar, the node.js wrapper for IGDB, the node.js wrapper for MongoDB, and the Twitch.js library that is being rebranded as the ridiculously-named Twurple. However, when I talk about my website architecture, I don't mean the libraries I'm using, but rather the way the website is put together.

I drew some inspiration from the now-defunct Rendr library. It was a node.js library that worked with Backbone.js to let you code a web site just once to render web pages on both the client and server side, making it easy to create single page applications. I was turned on to this library while working for the startup Sift back in 2013, and ultimately used it for my personal site Of course, as soon as I released that site, Rendr stopped getting updated, so I stopped using Rendr and started rolling my own.

The first website I used this new architecture with was the Overload Teams League. I didn't go too far with it, only making it so that there are views that can be rendered either client or server side. I didn't go as far as making it a single page application, that wouldn't come until version 2.0 of The back end architecture is your run of the mill MVC application, nothing too exciting going on. What made everything tick, however, was a custom-built router that I would eventually release to NPM called Hot Router. It's called that, because it has an option that lets you hot-swap controller files while the site is live while the application is running. That was super useful for debugging the first few sites created with it, but the hot swapping has become less useful now that I've gotten better at using Docker.

All of the above is setup for one of the more amusing issues I encountered while working on Six Gaming's website, and there were plenty. Being only my second Docker project, I won't talk about what I can only describe as "newbie mistakes". However, the biggest thing I found was what I term the memory leak from hell.

I discovered it when I was working on the Hot Router project. The gist of the problem is that for weeks after the launch of, I had a very slow memory leak that would break down the server after about a week. It drove me insane that I couldn't find it. The lengths I went to in order to find the leak were insane. First, I wrote my own calls to the docker.sock API, logging the metrics to Application Insights. That alone instantly doubled the cost of the server while I had the metrics active. The price you pay.

This led me to learn the memory leak was happening in the node.js Docker container. In order to find the memory leak, I had to connect the node.js instance inside Docker to Google Chrome's dev tools. Once I did that, I spent hours pouring over memory logs, slowly narrowing the problem to my shiny new router. Did making the router a module cause the memory leak? Did I screw something up porting the code over from being inline in the project to its own module?

No, the memory leak was there all along. I tried comparing Date objects to see if they were different. While you can compare to see if they are greater than or less than each other, trying to compare that they are equal or not equal actually doesn't work. This was causing Hot Router to always treat the controllers as if they were just hot swapped. It would delete the cache of the controller and re-require it. As it turns out, the act of deleting the cache and re-requiring it caused the memory leak. That, combined with the date comparison bug, resulted in a slow memory leak.

As I was fixing that bug, it dawned on me. I run the Overload Game Tracker, and that site had been suffering from a memory leak for over a year. It runs an early version of the routing code that Hot Router uses. Turns out I solved a very old memory leak by finding the leak in an entirely different application.

Anyway, Six Gaming's website has been humming along for a while. It was a lot of effort for not a lot of reward. However, this project taught me a ton about Docker, MongoDB, and more. And everything I learned from this is going into my most ambitious project yet... my own website! More on that in a future post.

Labels: , , , ,

Posted: 2:05:00 AM 0 comments
Here's a great piece of free software for IIS administrators who want to easily manage their SSL certificates from Let's Encrypt.

win-acme is a self-guided command line utility that allows you to quickly and easily take an IIS website and get an SSL certificate on it. After struggling with utilities like ACMESharpCore, ZeroSSL's Crypt-LE, and Posh-ACME, I realized that all of these tools, while powerful, didn't have any ease of use whatsoever. When I first looked at the text interface for win-acme, I didn't think it was going to be as easy as selecting options from a menu.

It's as easy as selecting optinos from a menu.

Within 5 minutes, I had 7 websites with shiny new SSL certs, and I had gotten them scheduled them for a regular renewal. I didn't have to do any configuration or any PowerShell scripting, it just worked. Give it a try if you're running websites on IIS!

Labels: , , , ,