Doctacosa

🪶 I'm a real blog! Maybe? 🤔 Thoughts by Stéphane, often in English, parfois en français!

I'm a big fan of the concept of online player profiles. It's a fun way for you to see your current progression, or look at other players to see who's active and how they're doing. Plus, if you're in a competitive spirit, you can compare yourself to others!

Right now, we have player profiles for everyone who's registered to play Minecraft on the Creeper's Lab. As an example, here's my own profile. It tells you quickly when I registered, was last online, my level of activity and a whole lot of gameplay statistics. Hopefully, people will agree with me that it's a clean layout that allows you to find some good information quickly.

This month's poll is about these profiles (answer now if you haven't already!) as I'm looking at the next steps.

One of the most recent additions has been the skulltulas tracker. There are 100 of these scattered across the Lost Woods, pushing people to explore and try to find the whole set. It's a relatively simple addition, yet adds an extra layer of an existing activity. I want to do more work like this in the future.

This doesn't have to be only about Minecraft either! Interordi has communities in other games, and there are some fun integrations that could be done. Notably, we've got many who play RuneScape; I've done a proof-of-concept that shows the progression of a given player within the game. This is interactive – enter a player name to view their data! This is something that could be integrated in a centralized Interordi profile alongside other info.

Something that I discovered earlier this year was RetroAchievements, which adds achievements to older emulated games. Here's my (rather slim) profile at this moment. After a preliminary check, this is something that could also be imported into an Interordi profile. Is this something that you would like to see? If so, please speak up!

Once the data is available, new options open up. Leaderboards? Possible! Comparison with a friend? Sure thing! A summary across all games? Yep!

My idea is to have a single stop for the community's players to view some data about their online games. Do you have any ideas on what should be added, or integrations that would make this worthwhile? Please add your comments below!

#gamedev #projects

– Doctacosa

Well, this wasn't what I planned to write about this month, but an incident that took place earlier today is worth a mention.

Some players noticed this morning that the forums and website were unusually slow, or outright unresponsive. I assumed at first that this was a random issue that would resolve itself (Internet issues, perhaps?), but after contacting my web host, it turned out that the website was undergoing a Distributed Denial of Service (DDoS) attack!

Someone was using several connections to try to load forum pages, while adding a database query payload in the URLs. The goal of that might have been to try and find a security flaw to exploit, but the sheer amount of page requests being done completely overloaded the website's capacity to answer. In the roughly 4 hours that this lasted, the server recorded 367,570 page loads. As you can imagine, that goes way beyond the usual amount of traffic! The solution turned out to be as simple as pulling the forums temporarily offline: with no vector of attack available, the DDoS hit automatically stopped after a while.

Unfortunately, things like these will happen once in a while when dealing with online communities and it can be especially common in gaming circles. While it's difficult to say who caused this one, it could have been a previous player that was banned, or someone who didn't like the answers we gave them. The game servers get hit once in a while too, but the datacentre where those reside has a built-in protection against these type of attacks, so whoever is online at the time won't even notice that something is going on. I get notified so I can keep track of the situation as needed.

There's no perfect way to prevent this, as angry people might go to any length to try to act out of revenge. On this specific case, the forums could be migrated to our dedicated server; they would then be covered by the datacentre's protective shield. Beyond that, every situation has to be dealt with on its own!

#gamedev #projects

– Doctacosa

At long last, I have finally updated the main Interordi homepage to something modern! Hurray!

This isn't the page I have created that gets the most traffic, or the one that most people care about, but it was important to me on a personal level. This is my homepage, my corner of the Internet, and where people can discover what else exists on Interordi. Plus, if I ever want to get a new job, this is the main landing page that goes on my resume – and selling myself as a web developer with something this out of date sounded like a terrible idea!

The new site design includes a modern appearance, separation between the English and French version (with a smart auto-detection based on your device's settings), the refreshed Interordi logo and a full mobile-friendly layout.

The last main refresh was 15 years ago, I had been thinking about redoing this for almost a decade, and I started this work back in 2017. It never was high priority enough to focus on, but this summer was the time. I've set myself as a goal in 2020 to clear as many of these old projects off my list as possible, like the forums refresh back in April, and it was also the last of my websites not to have received any kind of significant upgrade in years. Now, that's done!

Will this get people excited? Likely not, it's only a cog in the system, but I'm glad it's finally there.

#interordi

– Doctacosa

The latest major feature for the Creeper's Lab landed two days ago: full support for Bedrock players on all servers! This includes Windows 10 and mobile, plus consoles with some workarounds.

Then, new advertisements were posted last night to make people aware of this. The reception has been... interesting. Actual quotes:

  • “Impossible”
  • “That’s literally not how the game works”
  • “yea that's literally not possible”
  • “How is that possible”

There's some convincing to be done, but several others have tried it successfully already!

I take no credit for allowing Bedrock players to play on our Java servers, that goes to the talented team at Geyser. My efforts were focused on updating my code backend to properly support these new players, and I had plenty of challenges to face.

First and obvious, the whitelist. Java users get whitelisted by entering their player name on their forum profile, but Bedrock uses Xbox Live Gamertag accounts, with the identifier being a XUID instead of the usual Java UUID. Finding a way to fetch that information and properly update player accounts as they log in took some time. Behind the scenes, the flow is different, but from the players point of view it works the same.

Later came the player statistics. This might seem irrelevant, but player statistics are used for more than vanity purposes: they power a lot of systems, from the web profiles to the achievements, plus my internal activity tracking tools. This was relatively straightforward to do, only requiring time to adjust everything properly!

Finally, a key part was to allow players to be on both Java and Bedrock at the same time. Many people have both versions since the Windows 10 Edition used to be given away for free with Java Edition purchases, and it's reasonable to expect people to want to play on either account whenever. Until now, I had a strict 1:1 relationship between forum IDs and player UUIDs, and this couldn't be the case anymore. I've restructured data processing so that each person can have multiple player accounts attached to their names, solving this issue.

And here we are. The tech issues are mostly dealt with, now it's time to advertise and attract these new players that used to be out of reach!

#gamedev #projects #minecraft

– Doctacosa

Last month, I covered some of the Minecraft server plugins that I've taken over in order to make them work in newer game versions. Let's continue on that to cover some of the plugins that I've written myself, for various reasons. The four that I'm describing here have had their source code newly added to my GitHub profile, if any developers out there want to give them a look!

IOSync

Ironically, the newer one of the set replaces the first one I listed last month: InventorySQL. IOSync is responsible for synchronizing the inventory of players across all survival servers. While InventorySQL chooses a few things to synchronize, IOSync takes the opposite approach and synchronizes everything but a few selected details. Additionally, it works using the base game's data, making version updates much smoother overall! It's still young, but it has performed quite well so far.

IONotifier

Probably the simpler one, this reads the content of a file on the server and displays that text in-game. It's used to relay notifications, such as the hourly notices or the achievement rolls. Straightforward functionality, but since nothing I could find would work just the way I wanted, I rolled out my own.

IOLogger

Straight and to the point, this logs all of the chat and commands entered by the players. These logs have various uses, from tracking the daily activity of the servers to reviewing hacking attempts. This was the first plugin I wrote and made for a good starting point before jumping into more complex functionality.

IOTracker

This one tracks when players move in and out of the WorldGuard regions in the world and saves that information to a file for later use. It's a key part of the achievements system, being able to say who went where.

I've got more, but since I've placed all these online recently, I thought it made sense to start there. I'll continue in a later post at another time!

#plugins #projects #minecraft

– Doctacosa

At long last, I've pushed online something I've been intending to do for ages: a major upgrade to the Interordi Forums.

As I've written in the full announcement, I started shaping the forums in 2005, heavily basing them on a 2002 design. In Internet time, that an eternity and a half. I knew that I needed to rethink the entire system, and it would take a long time to do. In fact, I started planning out this upgrade in 2015, about 5 years ago!

I had two main goals with this:

  • Modernize the look and use to make it more intuitive, including full mobile support.
  • Clean-up the code base to make maintenance easier and allow future additions.

I've worked on this on-and-off for the past several years, in-between other projects that always seemed to have the priority. In January, I finally made the call that this would be the next major element I'd get out of the door, as I've got multiple other items I want to land this year that'd depend on this being done. When I realized that it was realistic (if challenging!) to get it done in time for April's Fools Day, I jumped at the opportunity!

I'll have another post later this month to explain in detail one of the most difficult aspects of this upgrade. In the meantime, check out the new and improved forums and tell me what you think. All feedback is welcome!

#projects #forums

– Doctacosa

Everyone has to have one, it seems, so why not!

On my end, the biggest difference in my day-to-day life is that the entire office has been asked to work from home unless absolutely required. This isn't a major shift for me as I had been working from home once a week for several months now, so I've got the process down. Five days a week instead of one feels different, of course, but I can still be productive and stay in touch with the members of my team! One very nice result is that I'm now saving about eight hours of commute time per week, and it shows every day: I now have more time to move my projects forward. Not bad!

With more people staying at home, there's been a noticeable increase of player traffic on several servers. I can't confirm for sure if this is the case for us yet as my player stats have been affected by a bug in the past few days, but I'm working to repair them. If anything, it feels busier than usual.

The one real consequence I'm facing at this point is minor, all things considered. I usually buy the monthly postcards every month, unless I pick up more designs while on vacation. However, all of the stores that I usually visit for these are either closed or will be closing later today, so my supply has dried up. Not to worry, though, as I'm already working on an alternative and they should be shipping out at the beginning of next month, as usual!

#pandemic #work

– Doctacosa

I spent a good chunk of the past two weeks or so doing improvements to the backend that powers the Creeper's Lab. While you're familiar with the game servers (of course!), the website and the forums, there's more hidden behind the scenes to help run the show. This includes among others the tools that allows the staff to write news posts, see player statistics, review bans and more. While these aren't visible, they're important to ensure that everything can be done properly and efficiently, so I decided to spend some time on them.

Among these changes comes a new structure to the module I use to launch each game server. I've decoupled the launch of that program from the launch of a server itself, so that it can be controlled separately. While this doesn't have any short-term purpose, it'll allow me to do some improvements that will be described in a future post.

I've done extensive changes to how the servers themselves and their base data (name, address, directory, etc.) are stored. From this, I've designed a script that allows me to select some files and copy them to any servers. This comes in handy when I want to apply a new server setting, for example: I can do the change once, place the edited file in a central location, then copy it directly to all servers. This is much less tedious than editing 5+ files one by one, and less error-prone too!

Building on that, the whitelisting system was streamlined to be faster. When a new player registered, under the previous version, the whitelist was pushed from the forums to each individual server. This could take about 15 seconds, the long wait potentially giving the new player the impression that something was wrong. Under the new design, the whitelist is uploaded once, then automatically copied to all game servers. This is at least three times as fast, offering a better experience.

Along the way, I've also given myself the ability to fully control the minigame servers like Parkour and PvP. Due to the previously limited integration, if these encountered a problem, I had to manually open a connection to run commands directly. Now, they work the same as all other game servers, so part of the maintenance can be done from a web browser, or even directly from my phone!

These updates fall into the category of less interesting work that nobody sees the results of directly, but it pays off through easier maintenance and updates. With Minecraft 1.15 being mostly stable, 1.16 not expected any time soon and no other high priority project in the way, this was a good time to take care of this and get better tools in place.

#gamedev #projects

– Doctacosa

Last month, I covered the hardware I use to work on my ongoing projects. Even more important is the software itself. Quite a few of them have become critical to my workflow, and here's a tour of the main items.

Git

I explained working on three different computers. I'll often be editing the same project across multiple devices, and it's important that I keep my code up to date on each. How should I do that? Copy files back and forth? There's a huge risk of errors by accidentally overwriting more recent additions with older versions. Place everything on a USB key? Not bad, but if you lose it, you're toast. Been there, done that. (I found backups... eventually).

Enter Git. This software's main goal is version control. Basically, each change I do is logged separately, with an explanation message and the date. This creates a list of all modifications ever done, going back to the beginning of a project. More importantly, these changes can be pushed to a central server, then pulled on multiple computers. In my case, I use the same dedicated hardware that runs the game servers as a storage location. This way, as long as I've got an Internet connection, I can send or obtain my latest changes with a single click! I've also started putting some of my code on GitHub, which is something I'm planning to revisit in a later post.

OneDrive

Besides code, there are other things I want to store: reference images, graphic libraries, documentation, draft files and more. In this case, I use Microsoft's OneDrive to store it all. Similar to Google Drive, Dropbox and other services, OneDrive lets you put your files in a special folder that gets stored on remote servers. You can then access them from other computers at will, and any changes are automatically kept in sync. I had my doubts at first on how well it could handle potential conflicts, or accidentally overwrite content, but it's proven over time to be very sturdy. As a bonus, all the files can also be accessed in any web browser in case I want to reference something in a pinch.

OneNote

I'll frequently mention taking a note of something, say something about checking through my notes, or refer to the mighty TODO list. That's something that I keep in OneNote. It's a note taking application that lets you organize everything in Notebooks, then in Sections, then furthermore in Pages. That way, you can break down and organize your thoughts without them becoming a huge, messy pile. I used to keep everything in separate, plain text files, but this adds a key feature to the mix: the ability to access my notes everywhere and keep them in sync. This means I can do what I want on any computer at home, on my phone, or even from work when I get a sudden idea.

Visual Studio Code

Last but not least, my favorite code editor: Visual Studio Code. This project is still young as it was first released only a bit over 4 years ago. It shares its name with his bigger brother Visual Studio, but that's where the relation ends as it's handled by another team on a different engine. There are two key points that made me adopt it:

1- Its speed: the thing is FAST, no matter what computer you try to run it on. The always responsive interface makes it a pleasure to work on.

2- The range of plugins available. While it can do quite nicely on its own, it can be extended to support a lot of programming languages and features, from the obvious to the more obscure.

The Git usage I mentioned as my first point? Built-in and ready to go, so I can compare my changes right as I make them.

While I use multiple other tools, these really form the backbone of my current flow. All have proven to work well, are modern and pretty much frustration free, to the point where I see my current setup as the best I've ever had.

#tools #software

– Doctacosa

There are quite a few tools I use to complete my tasks. Either hardware or software, these can be critical to getting good results and make the development process smooth. Here's a look through my current hardware setup!

The desktop

Desktop computer

My desktop computer, Dominion, is the latest addition to the line-up. Newly built at the beginning of summer, I assembled this to offer high performance so it'd be able to take on any task I throw at it. One of my critical choices went to the RAM, which I now have 32 GB of. When I develop and test new features for the Minecraft servers, I'll sometimes have my full lineup of development software loaded, plus a Bungee instance, plus two or three servers, plus two clients all running at the same time. That's a lot of memory used up, as Minecraft can get very hungry! This computer can thankfully take it like a champ. This is also what I use to create image renders of the various player builds.

The laptop

ThinkPad laptop computer

My trusty ThinkPad laptop, nicknamed Wagon, has been with me for several years now. While not a speed demon, it's a sturdy piece of hardware with a long lasting battery life and a decent performance. For the longest time, this was my main development machine, and I can take it with me to work from almost anywhere.

As some of you might have heard, my previous desktop died early last year. I ended up using the laptop as my main computer, connecting it to external monitors, keyboard and mouse for a more comfortable setup, and it proved to work so well that I delayed replacing the desktop by over a year.

The tablet

Surface Go tablet

The tablet I call Signal, while not my latest addition, is one that I've only recently started experimenting with as a work tool. This Microsoft Surface Go tablet has limited capacity but it surprised me with decent performance results after running some tests, so I installed my development environment to see how that'd perform. While I won't run any Minecraft servers on this, it's working great for lighter tasks, such as working on a website or web tool. Use its touchscreen, add in a Bluetooth keyboard, maybe a wireless mouse, and it's a capable enough setup! As a bonus, it's extremely small and light to carry. This allows me to indulge sudden ideas, as pictured here where I made improvements to the forums while riding a train.

That's it for the hardware aspect! In a later update, I'll cover the software mainstays that allow me to make the above work.

#tools #software

– Doctacosa