Doctacosa

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

As you've seen by now, the custom ranks feature has been put online thanks to the latest wave of improvements to the chat server. To allow this to take place, the messages are now generated by the chat server itself and sent pre-formatted to all Minecraft instances; these only need to display it through a /tellraw command. A side effect is that all public chat now needs to be relayed through said chat server: if it fails for any reason, including bugs and crashes, players in-game will no longer be able to view messages at all. Thankfully, the system has proven to be solid and reliable since it first came online, so I'm comfortable with this change.

Now, how does this works? That chat server maintains a direct connection to the MySQL database, so it's able to read the access level of each player (admin, op, helper, ...) along with their status (contributor, Patreon backer) and any custom titles set. It takes that information, the received message, and puts it all together for display.

There are still a few aspects that I want to add now that the foundation work is solid:

  • At this time, the chat sent from Discord and IRC only displays the [Discord] and [IRC] tags respectively. Why not go the extra step and have them display the actual rank of the chatter? We already have matching groups on Discord for all staff positions, so that could be reflected in-game. Likewise, authenticated IRC users could be identified based on their user status (aop, hop, etc.).

  • One thing I want to investigate is to allow people to /msg others cross-servers. I already overrode the standard chat and /me actions, so I believe that /msg is doable as well. This would make it more convenient to stay in touch with others while hopping around worlds and servers.

  • As a longer term target, possibly have death messages carried over to Discord and IRC. That would provide more context to the chatters; how many times has someone said something like “Why are you yelling? Oh, creeper got you. Nevermind!”? Carrying the cause of kicks could also help the staff identify people who might be using flight mods. And hey, if I can read and propagate death messages, why not replace them with some custom ones at the same time...? Maybe even get some community input on new messages to make things interesting! How does that sound?

#gamedev #projects #minecraft

– Doctacosa

As a new dev entry, here's why and how I introduced the recent chat server.

From day one, when I introduced multiple Minecraft servers (first Rodinia, then Gondwana, and so on), I relied on IRC to carry the messages from location to location. Each server would spawn an IRC bot that'd be used to join #interordi-mc to send messages, read them and show them in game. Rather simple, and it works. The first version of this setup used a Minecraft plugin, which eventually I replaced with my own server wrapper when said plugin seemed like it would no longer be updated. This also allowed me to make a universal chat solution that worked for Bukkit/Spigot instances, Forge setups, and even vanilla Minecraft itself.

Some of you might have seen me running some tests with Discord earlier this year. This used a IRC <–> Discord bridge, where another IRC bot would be used to relay messages to and from Discord. This created the following structure (only showing three Minecraft servers for the example's sake):

Chat structure, take 1

This meant that messages travelling from Laurasia to Discord would absolutely need to go through IRC. The end effect is that messages as seen on Discord would look like this:

CreeperDiscord <CreeperLaurasia> (Doctacosa) Hello there!

That's a bit wordy, isn't it? Additionally, I had no control whatsoever over the formatting. What I wanted to get is closer to this:

CreeperDiscord (Doctacosa) Hello there!

Much better, isn't it? It's more readable, too. To do this, though, I needed to get IRC out of its position as the messages middleman. I eventually got the idea to write my own relay station of sorts. All of the various chat locations (which I've named internally “channels”) would send their messages there, and the server would accept and transmit them to all other channels. The new setup took this form:

Chat structure, take 2

Eventually, I settled on this text format:

Creep [Laurasia] (Doctacosa) Hello there!

I shortened the original “CreeperDiscord” to the more compact “Creep”, and decided to include the location name so people would know if a chatter was on Discord, IRC, or directly in-game. People seem to like having that information available, so that will be here to stay.


Of course, as I mentioned before, having that new chat core in place opens more options. I've reintroduced today the .players command, which now works from in-game, IRC and Discord. As an extra bonus, it's able to relay the list of persons connected on IRC and Discord as well. Those custom ranks I talked about in my previous post? They'll be read and attached to messages by the chat server directly, making sure that the information is always up-to-date everywhere. Other additions could happen at a later time, too!

Got an idea on what topics I should write about in future Game Dev entries? Send in your suggestions in the comments!

#gamedev #projects

– Doctacosa

The problem with being a systems administrator is that, if you do your job properly, no one is likely to notice. I spent some efforts in the past week to improve how I manage things with the Minecraft servers, and figured I'd explain here how the process went! The problem

Running a single Minecraft server was easy. Updating? Take server down, swap files, bring back online, done. Then I introduced Raw (now Rodinia). I had to do it twice over. Simple enough. Then Gondwana got split off. Then Avalonia. Then the Lobby. And so on.

As it stands right now, with the additions of minigames, I'm running 11 Minecraft server instances in parallel. Updating to new versions means taking down all 11 servers, replacing the appropriate files, then bringing them online. The same goes for security and performance fixes, and this is a significant work load at this point. It's also easy to make mistakes: if I keep an older version of, say, one of my plugins on a random server, it may still work yet contain a bug that I assume has been fixed for weeks. This happened more than once, and I wanted to streamline the entire update process.

The solution

What I did is create a server launcher. Instead of simply starting each Minecraft server directly (or really, my server wrapper that takes care of launching the server instance), I call that script instead. Written in Python, every time it is run, it copies some files from a central location, places them in the server's directory, then runs the server. The end result is that, every time a server is launched or restarted, it automatically grabs the latest files I've made available to it, ensuring that everything is up to date. This currently includes the Spigot build (the game proper), my wrapper (used for IRC link-ups and remote control), along with my custom-made plugins. New files can be added to that as I need to.

Of course, this raises the issue of updating the launcher itself whenever I want to automatically copy new files, and I don't want to do that either. Thanks to Python's modular structure, I've got a single copy of the core launcher in the shared directory. Each server has a mini-launcher, not likely to required any changes, which is used to call the main one. If I want to keep a new file updated, I only need to edit the one central location.

The result

Keeping a server up to date is super simple now. I place the updated files in the centralized location as soon as they're available, then restart individual servers whenever it's convenient. A simple command is used for each instance: python3 launch.py. And it's done!

I hope you found this insight interesting. Again, feel free to let me know if there's a topic that you'd like me to expand on in a future post! :–)

#gamedev #projects

– Doctacosa

You know those people that seem oblivious to their surroundings when walking around? The ones that tend to be most often messing with their phones, or sometimes lost in a book? The ones who will usually walk in the middle of a sidewalk or corridor, sometimes swaying from side to side, usually walking too slowly for the crowd?

I propose a new word to call these people: ZOMOBI. A contraction of “zombie” and “mobile”, zomobi describes how they're most often brainlessly moving ahead, often with a mobile device in their hands. As a bonus point, it works in both the languages I use the most: English and French.

So, when you're out and about, don't be a zomobi: pay attention to what's going on around you!

#vocabulary #mobile #musings

– Doctacosa

I’ve been dealing with people and websites from several countries recently, and there’s something that many groups handle differently: date formats. Depending of who or what I’m communicating with, today’s date might be 7/9/2015, 9-7-2015, 2015-07-09, July 9, 2015, or even 7/9/15. It’s complicated and error-prone, especially if you don’t realize how a given person has chosen to write down said date.

As such, can I propose that everyone should use 2015-07-09? It’s simple, obvious, and placing the year first avoids the issue where you don’t know if 07/09/2015 was written in the American format (9th of July) or in the European format (7th of September). Additionally, it keeps a logical progression if you place a time next to it: 2015-07-09 12:34:56 goes from the largest unit (the unit) to the smallest one (seconds). There’s also no excuse at this point not to always write the year using four digits.

As an added bonus, if you name several computer files in this format, they’ll automatically be sorted from oldest to latest, and you can even flip the display order with a click or two. It’s convenient and simpler for everyone!

#date #musings #standards #iso8601

– Doctacosa

For a while now, with the rise of smart watches, I’ve seen several people claiming that those who “still” wear a watch are too lazy to simply get their phones out of their pockets. That’s simply not the case.

I wear a watch on my wrist. I enjoy my watch. The right models on the right people can be quite stylish, and I like how they look. It’s also more convenient when I actually want to know the time.

The funny thing is, wristwatches became popular in the early 20th century as people were tired of having to fish in their coats to find their pocket watch. The transition from one to the other was quick, and so very few people still use pocket watches nowadays.

If you call me weird for wearing a watch, then I totally feel justified in calling you archaic for needing to pull a device from your pocket only to tell the time.

#musings

– Doctacosa

I think I figured out part of my frustration with online gaming as a whole: I love the concept, it usually works great, and you can lose yourself in an alternate universe for hours… and yet, it often just doesn’t work for me. Either the game is broken in some way, or lags too much; either my friends and I can never get online at the same time, leading to unfulfilled promises; or the game grows stale too quickly and others lose interest while I still want to keep going.

I wish I could enjoy multiplayer game so much more. The potential is there, but the problems or availability of the players quickly add up to something that makes it unfun.

#musings #gaming #thoughts

– Doctacosa

How an evening at home goes when I realize I don’t have an Internet connection:

I’ll go check my forums…

… no connection, huh? Weird. Oh well, it’ll probably be back soon. I’ll go read my e-mails in the meanti…

I’m stupid, that won’t work either. Guess I’ll go check the news on their webs…

Argh, of course that won’t work. Well, I’ve been meaning to watch that TV show on Netflix, so I ca…

No, won’t work either. Hey, did I have any e-mails…

… screw this, I’m going to eat.

^ That was me last night.

#musings #interordi

– Doctacosa

I hate courier companies and their lack of logic.

I have a typical work schedule: Monday to Friday, mostly from 9h to 18h. They have their typical delivery schedules: Monday to Friday, from 9h to 17h.

This means that, when I order stuff online, I can never be home to get one of their deliveries. Every time I need to call them, explain the situation, and get my package held up at their facility so I can go pick it up. If I’m lucky, I can do that from 8h to 20h, Monday to Friday.

The thing is, half the time when I call, they sound surprised that I have no one at home to receive their goodies. I’m sorry, but I live alone, there’s no one here when I’m out. Even if I had a girlfriend living here, odds are that she would be working a similar schedule to mine and wouldn’t be available either. This isn’t the 50’s anymore, with a housewife taking care of chores and shopping during daytime.

I could stay at home to answer the door if I had a rough idea of when they’d be dropping by. With the advanced logistics and tracking possible in 2013, they could at least say if the delivery would be in the morning or the afternoon. In that case, I could skip a half-day of work and take care of that, but I can’t. I need to stay home ALL day if I want to handle this properly. An alternative, possible with modern technology, would be to send me a text message an hour or two before the approximate visit time. That way would allow be to leave work, get a box, then head back. Of course, none of this is offered at this time.

One thing that infuriates me even more is the pick-up locations: all the courier companies have exactly one spot each where I can go claim my box. That’s at their respective warehouses, all located near the airport in an industrial zone, at least 20-30 minutes from here by car when accounting for the local traffic. None of them have a single convenient downtown location, which I could easily hit on my way to or from work. None of them have a spot easily reachable by public transit either. It always has to be done by car.

Screw you UPS, Purolator, DHL and FedEx. I know that I’m technically not your customer, it’s whoever sent the package. Still, screw you for your lack of decent options.

Oh, and UPS? The staff at your pick-up location all look like they’re ready to jump down a bridge. Acknowledging me with a polite “hello” would be a great start.

#musings

– Doctacosa

An article catched my eye the other day: Google Begins Pratically Begging You to Use Your Real Name on YouTube

Google recently added to YouTube a new “feature”: when you try to post a comment (and you aren't already using your real name through Google+), you'll be prompted to switch to using your full name instead of whatever nickname you picked when you registered. While they do their best to convince you to switch, you're still free to carry on as before. That is, for the time being. How long before they decide that this is mandatory?

The point of this move is probably to try and improve the quality of the comments on the site: by having real names displayed next to each message, some people might be more careful before starting to insult others for no valid reasons. Even yet, studies tend to show that this doesn't have any real effect.

I'm annoyed by this trend seen everywhere. Either it's real-name policies being put into place, or it's commenting systems are being torn apart and replaced by a silly Facebook posting gizmo (more of my thoughts on that here). I've been using the nickname “Dr. Cossack” for over ten years now. As of a year-and-a-half ago, I started using “Doctacosa” outside of the Mega Man fandom as something more personal, without any ties to gaming or existing people and/or characters. This is me. It's my Internet front.

I'm not hiding my real name. Anyone who's even remotely curious to know it can find it very easily. However, since the early rise of the BBS (then later the World Wide Web), we've all been able to select whatever name we want to represent ourselves online. I don't feel like this has been a major issue in the past, and it still isn't today. As such, why are so many media groups pushing for real-name policies, when it's as easy as before to use a fake-yet-realistic name?

#musings

– Doctacosa