Tech Over Tea - #262 The State Of Linux Is Something | Ritchie

Episode Date: March 7, 2025

Today we have Ritchie back on the show once again to talk about the state of his game Socially Distant, the game engine he's working on for it and just generally chatting about linux.==========Sup...port The Channel==========► Patreon: https://www.patreon.com/brodierobertson► Paypal: https://www.paypal.me/BrodieRobertsonVideo► Amazon USA: https://amzn.to/3d5gykF► Other Methods: https://cointr.ee/brodierobertson==========Guest Links==========YouTube: https://www.youtube.com/c/AcidicLightWebsite: https://acidiclight.dev/Patreon: https://www.patreon.com/acidiclightSocially Distant: https://sociallydistantgame.com/==========Support The Show==========► Patreon: https://www.patreon.com/brodierobertson► Paypal: https://www.paypal.me/BrodieRobertsonVideo► Amazon USA: https://amzn.to/3d5gykF► Other Methods: https://cointr.ee/brodierobertson=========Video Platforms==========🎥 YouTube: https://www.youtube.com/channel/UCBq5p-xOla8xhnrbhu8AIAg=========Audio Release=========🎵 RSS: https://anchor.fm/s/149fd51c/podcast/rss🎵 Apple Podcast:https://podcasts.apple.com/us/podcast/tech-over-tea/id1501727953🎵 Spotify: https://open.spotify.com/show/3IfFpfzlLo7OPsEnl4gbdM🎵 Google Podcast: https://www.google.com/podcasts?feed=aHR0cHM6Ly9hbmNob3IuZm0vcy8xNDlmZDUxYy9wb2RjYXN0L3Jzcw==🎵 Anchor: https://anchor.fm/tech-over-tea==========Social Media==========🎤 Discord:https://discord.gg/PkMRVn9🐦 Twitter: https://twitter.com/TechOverTeaShow📷 Instagram: https://www.instagram.com/techovertea/🌐 Mastodon:https://mastodon.social/web/accounts/1093345==========Credits==========🎨 Channel Art:All my art has was created by Supercozmanhttps://twitter.com/Supercozmanhttps://www.instagram.com/supercozman_draws/DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase we may receive a small commission or other compensation.

Transcript
Discussion (0)
Starting point is 00:00:00 Good morning, good day, and good evening. I'm as always your host, Brody Robertson. And today we have Richie back on the show. Now I would be showing you the website of the game that you're working on. Um, but the, the server migration hasn't gone well. So, uh, well, you know, it's going well. It's's just that i two minutes ago discovered a problem so it is what it is ssl is not working everything's offline yeah so let me just go back to the thing just so we can see exactly what the issue said i what is it it is s SSL-ERROR-BAD-CERT-DOMAIN.
Starting point is 00:00:45 Um, so what were you saying you thought the problem was? Okay, so I have been hosting the servers at home for the past couple months. But recently I migrated to a Hetzner server auction box, which is a lot more powerful than what I have at home. And it went well, but I haven't decommissioned the old server yet. So I used Let's Encrypt, and CertBot is set up to renew the certificates at midnight. And I guess it detected that the old ones expired. And so when that little script executed to renew everything it went, ooh these certificates are expired, I'm gonna go renew them on the old servers.
Starting point is 00:01:29 So then the certificates installed on the new servers went invalid and then everything died. So all my websites are down, I'll have to look into that. Completely unrelated problem, I tried to go to the Hetsonil website and their site's down. That's even better. Oh, I love the internet. This is so fun. I, my, my web server is like, like my, my, my website, I, I, it's badly run.
Starting point is 00:02:01 Um, I use it as a link tree. So, you know, uh, it's not as up to date as it probably should be. But we'll just leave it at that. Oh, it's still doing better than mine because mine is an SSL error that you can't bypass. Yeah. Yeah. Um... Yeah. Well, that's fine. At least you got the migration done. At least all the hard stuff is done. The SSL stuff, like, that's annoying.
Starting point is 00:02:33 But it's not that big of a deal to deal with. Yeah. Yeah. I'd say that, but then there's GitLab pages. GitLab pages is GitLab pages. Mm-hmm. I've never actually self-hosted GitLab before. What is like the actual process of doing that? How, like people will say GitLab's kind of heavy as opposed to things like Giddy and things like that. I don't know if you've ever messed with those before but like, like how easy is it to set up your own GitLab? Uh, not easy. They have a Docker container and that's kind of the recommended way to
Starting point is 00:03:10 install it. But even then, uh, that's just to get GitLab, like the Git server running. So you get your web interface and your, your SSH and stuff like that. And the ability to store repositories and clone and all that stuff, all the Git stuff. Right. That is relatively simple. You just get your server, preferably a beefy one, because it is heavy, they're not lying. Four gigs of RAM minimum, I think two cores minimum, and it needs a decent amount of disk space if you're doing anything useful with it. Sure. But, other than that, it's just your standard, you know, exposing the right ports, probably putting it behind a reverse proxy or Cloudflare or stuff like that, getting certificates, getting a domain name, the usual self-hosting stuff you have to do.
Starting point is 00:03:59 Sure, sure. But that, that's just for Git, the base GitLab. There are two other components to it that I also have, and there is GitLab pages, which is like GitHub pages, but for GitLab. And not a lot of people use GitLab pages compared to GitHub pages. I literally am just finding out it existed right now. And it's a similar sort of idea. GitLab page compared to GitHub pages. I literally am just finding out it existed right now. And it's a similar sort of idea.
Starting point is 00:04:28 There's multiple ways you can configure it, but it's a lot harder to set up than the base GitLab. And then there is GitLab container registry, which I also use, which is what allows you to host your own Docker containers as images that people can just download. I don't like polluting third-party websites or centralized repositories of my stuff, especially if I don't know if I'm gonna keep that stuff around. So, like, I don't publish to Docker Hub because I don't want to pollute it. So I have my own container registry.
Starting point is 00:05:00 And the reason these things are complicated is because each one of them needs its own domain name or sub domain Mm-hmm, and in GitLab pages case Depending on how you set it up. You need a separate static IP address all together for it and it involves manual networking and money I See so yeah, if you were to just like, just for what you're doing, how... I don't know if you want to say how much, like, the setup you've got going on cost, like, because I imagine that's sort of like minimum viable product, right? Like, you're not going, you're not trying to host something like a free desktop where tons of other people are using it. It's pretty much just like for your product and
Starting point is 00:05:48 that's it. Okay, so I obviously don't have like a massive cluster of servers like they do. I have one beefy server. Um, this is a video game, so it needs to do video game things. And it's also a program that needs to do unit testing and stuff like that. So I do need the RAM, and I do need the course, and I do need, at minimum, a graphics card that can do openHAL. It doesn't need to be a beefy one, because it's not a AAA game, it's a hacking game. But it does need a graphics card so that I can actually bootstrap SDL and get everything running. And so I have a Hexner server auction box. It's got an Intel Core i7-6700, I think, which is a 4-core processor running multi-threading, so four cores, eight threads. Decently fine for what I use.
Starting point is 00:06:48 And 64 gigs of DDR4 RAM, which sounds like a lot for what I'm doing, but when you get a lot of GitLab CI-CD runners going and because when you're self-hosting, you have to bring them yourself. You don't automatically get them. That's stuff you do have to provide the hardware. So, you know, once you get a lot of those running, the RAM usage is going to kick up pretty fast. So it's good to have. And then it's got an Intel 8D630 in it, I think, for the integrated graphics card. So not something that you can play Cyberpunk 2077 on,
Starting point is 00:07:27 but at the same time you can try. I wouldn't recommend it. You can try, it might run at one frame per year. But it should run so highly distant, fine, and that'll be enough for testing and making sure that like I can write code that says, hey, click this button, see what it does, and does it do what you expect stuff like that So that's good And then other than that it's just stored. It's got eight terabytes of storage on it Which you know if you're hosting GitLab you kind of need storage And
Starting point is 00:08:01 The reason I say that that hardware is what it is is because it costs me, I believe, 60 bucks a month Canadian for that one server. Okay. So it's a bit much, but it is partially covered by my lovely Patreon supporters, so, you know, I can afford to do it and you know it'll make my life a little easier so I don't I didn't really see a point not to upgrading to that plus the old server is the crappy gaming computer that I had there that I built ten years ago and it was barely good at gaming when it was new and I've upgraded it since then and it still struggles to run GitLab. Why did you decide to actually go and like move off of your like self-hosting stuff? Like what was your old setup not doing for you? Okay so my old setup, even though I was hosting the actual server at home, the home part of it was the problem.
Starting point is 00:09:11 Because we're on gigabit fiber, which is great. It's great for home use. That would be nice. The problem with it is, we don't have a static IP. We have a dynamic IP, and you actually want a dynamic IP as a residential network because if someone grabs your IP through some exploit in a video game, you know, you just reboot your router and you know, they can't do anything with it other than maybe some coarse hail location. But we're not even just that. If you're torrenting something and you're
Starting point is 00:09:42 a public cedar, like that's going to expose your IP address. Like there's so many... If you go to a website and they keep IP logs and then that website has a data leak, there are so many ways your IP address can just like get out there. And having one that's just changing is... Like there's no... Well, firstly, there's a minimal... Especially we're talking IPv4, there's only a minimal set of IP addresses,
Starting point is 00:10:05 so having home addresses be static just isn't really viable anymore. And yeah, there's too many ways for it to be leaked. The downside, however, is most things you self-host kind of need a static IP because you need a dedicated IP that the internet knows where to reach you at. And there are ways around that. You can do dynamic DNS or you can like set up a Cloudflare daemon on your server to like basically figure out what your new home IP address is and do some API magic. No, I don't want to deal with that. I just want my stuff to work. So what I did is infinitely more complicated in true written fashion um I rented a five dollar per month VPS through um a local VPS provider
Starting point is 00:10:53 uh-huh and I set it up as a wire guard host and that became my static IP I guess that works, yeah! So it works. The problem is now you need, so not only do you need Cloudflare in case you want the CDN caching stuff like that for static assets, but you need an NX reverse proxy that sits on the VPS with the static IP and that routes your traffic through WireGuard into your home network to GitLab or Nextcloud or whatever you're hosting. So if I go set up Nextcloud, for example, I don't follow the normal, here's what you do to get it working instructions. I have to follow agony. I have to actually learn what's going on and figure out how to get it working under the reverse proxy and
Starting point is 00:11:47 through wire guard and stuff like that. It's a nightmare and It's a single point of failure if someone DDOS is that VPS all my stuff falls off the internet If I stop paying for that VPS it falls off the internet for that VPS, it falls off the internet. Mm-hmm. Mm-hmm. Yeah, that's a, um, that's an approach. Um, look, you could argue that it's not horrible because it's a learning experience and you have a deeper understanding of how networking functions. Yeah.
Starting point is 00:12:24 But! have a deeper understanding of how networking functions. Yeah. What? Unwiring that mess to something sane? Well, now you know why I have SSL errors. Mm-hmm. Mm-hmm. Mm-hmm. Yeah. I, okay. We were talking yesterday about you doing the migration and you were getting very worried
Starting point is 00:12:43 about the, um, about what GitLab was doing in the process of that. Yeah. So let me explain for people who weren't in that conversation, it would be everyone but you, what I was doing yesterday. So yesterday I was actually doing the whole migration step by step. So I started it on Saturday. So I migrated. First, I did my authentication service because I have multiple things I need to log into. I want one user account that's managing MFA and stuff like that. And so I migrated that fairly painless, you know, just migrate a database and then copy some Docker files over to the new server, reconfigure all the DNS, we're good to go.
Starting point is 00:13:30 That worked, that's fine, that was easy. Then I migrated Nextcloud, which was a little more painful, but it was relatively simple. Just copying data from server to server, routing DNS and configuring all that stuff, getting that working. Fair enough. Then I did the S3 gateway, which is how images are stored on my websites. So if I ever post an image in my blog, that is stored on an S3 bucket that's hosted behind a read-only gateway. So people can view publicly, but only I can upload privately. So that's how that works.
Starting point is 00:14:13 That was easy, that was one file to copy over. Then we get to GitLab. So, you know, GitLab, how I was saying earlier, how I have the container registry, and the GitLab pages stuff, and you know, GitLab itself, all my code is on GitLab, how I was saying earlier, how I have the container registry and the GitLab pages stuff, and GitLab itself, all my code is on GitLab. I also have GitLab CI CD, which is your GitHub actions equivalent on GitLab. So that's how when you commit to code or commit to a repository and submit a merge request. It goes and runs all these automated tests and stuff like that, checks your code for errors and stuff like that.
Starting point is 00:14:50 That's GitLab CI CD. I had to set that up myself. And SohlyDistant uses it for releasing to Steam. So whenever I submit a merge request, despite being the BDFL, I still do merge requests. When I merge it, a little pipeline fires off. It compiles the game for both Linux and Windows. We'll get to Windows later. And then it takes that build, it generates the online manual from the documentation that gets output from C-sharp, so that gets uploaded to GitLab pages. Then it takes that build, and it throws it away, because it then recompiles the game for Career Mode, which is the paid version of the game that's not out yet.
Starting point is 00:15:41 That's coming to Steam. So it does that for both Linux and Windows. And then it takes that build and it uploads it to Steam. And then, you know, that's a nightmare of its own, but it uploads to Steam. A couple seconds later it appears in my Steam library as an update. Great, awesome. And that's all automated. Awesome. The problem is, if you lost track, the game was compiled four times during that murder. I see. And the way GitLab works with CI-CD, with build artifacts, to get files from one job in the pipeline to another, is you upload them as artifacts. And you might think that those artifacts expire after a
Starting point is 00:16:36 while. They do not, unless you set that up. I did not set that up. So when I went to tear down the GitLab server yesterday, one of the things I had to do was copy the data directory of it from one server to another. And I thought I would do the sensible thing of just wrap it all up in a tarball so I have to upload one file and one file only and then once it's on the destination server I just extract it to the right place and then I copy the docker files and everything and set everything up. Just like all the other three things I did. Problem is, I'm looking at it, and I'm seeing, um, okay, compressing file socially distanthliDistantWindows x64, careermode.zip.
Starting point is 00:17:26 Compressing file, SohliDistantLinux x64, careermode.zip. And then I keep seeing this over and over and over again for every rant and every commit I have ever done since moving to GitLab. Mm-hmm. That tarball compressed was 30 gigabytes. Ah-ha! ball compressed was 30 gigabytes. Aha! So I I let it finish and then I take the file and I download it using SCP from my home server to my main computer what I'm using right now so that I can copy it over to the new server.
Starting point is 00:18:06 Because when I first tried to just directly SCP it from one server to another, which you can do for small files, the desp- Oh. Hello? Uh, hello? Did we lose you? I've had a lot of Discord issues recently. What is going on with this platform? Jesus Christ, why is Discord like this? This is like three episodes of Discord. I'm not even sure what's going on.
Starting point is 00:18:38 I'm not even sure what's going on. I'm not even sure what's going on. I'm not even sure what's going on. I'm not even sure what's going on. I'm not even sure what's going on. Jesus Christ, why is Discord like this? This is like three episodes an hour, we've had the exact same problem. Maybe I need to stop using Discord. I think that's the solution. Hello?
Starting point is 00:19:01 I'm still here. Yeah, I disconnected. I've been- That was weird. I need to stop using Discord. I've had this issue so many times recently. That was weird. I heard you the whole time.
Starting point is 00:19:15 What? The whole time I heard you. What? I never saw you disconnect or anything. What? Wait, that confuses me even more now. I don't know. I don't know. Okay, um, you were saying you copied the files to your home system, uh, and then you cut
Starting point is 00:19:42 out. Okay. Uh... and then you cut out. Okay, so I cut my file- er, I- I cut my file- I copied my files from the home system to local, because, you know, doing it directly got me kicked off the server for some reason. Um, and, you know, that went fine. It downloaded perfectly fine. Then I tried to upload it to the Hetzner server, and it first appeared to work. Then I get kicked off again. And I think, okay, maybe 30 gigabytes of tarball is too big for SCP to handle over SSH. And I think maybe I'll try rsync. So I rsync the file over and
Starting point is 00:20:26 It kicks me off with a timeout. It has a different error this time So then I think okay, this isn't working I'm gonna try using sftp through PC man FM and I I type in FTP colon slash slash the domain name of the server and I hit enter. And it spins. And it spins. And it spins. And a dialog box comes up and it says, uh, connection timed out while logging in. And I click okay. And then it says, uh, this directory is not mounted. And then it just goes blank screen on me and rips.
Starting point is 00:21:07 And then I go, okay, well, let's try going to one of my websites. Uh-huh. And it spins. And it spins. And it spins. And it goes, connect, and it's timed out. Error 502, bad gateway. Um, what happened?
Starting point is 00:21:24 Cause you know, it's all well and good that I get kicked off SS8, because that means SS8's cracked. Sure. But my website also cracked. I log into Hetzner Robot, check the server status, and at first I get jump scared by a big red banner, but that's part of their UI design. I might have to, you know, yell at them about that. But I look next to that big red banner and there's a green checkmark saying the server's online. And I go, okay, well let's see if I can VNC in. I click the little VNC button. Turns out that VNCing on Hetzner, I don't know if I'm doing something wrong, but it doesn't just give you a screen to interact with the server. It literally has a drop down to select what operating system you want to
Starting point is 00:22:11 install and boot into. So I'm like, no, we're not touching this. I don't want to wipe the server. Okay, sure. So, um, then I go to the reset tab, um, and there are four options and this is where I find out that things are very over explained on Hetzner there's an option on it to press the power button on the server and under it is like a big mile long paragraph that just basically says TLDR if the server is on it'll turn it off if the server is off it'll turn it on This is what happens when you press the power button on your tower at home.
Starting point is 00:22:47 The quote that we have sp- I can read the quote because you did send it to me. If the server is powered down, it can be turned back on with this function. If the server is still running, it will receive an ACPI signal to shut down. Our servers and standard images are configured so that this process triggers a regular operating system shutdown. What happens is actually exactly the same as what happens when you press the power button on your home computer. Thanks for the info, Hetzner. That's not what I need. Those first two sentences are completely redundant.
Starting point is 00:23:21 Yep. And I thought to myself, maybe this option is or this option is described this way because someone pressed it thinking also fix the server and then it got turned off and didn't turn back on again they had to send out a support request to get a human to turn it on maybe they got sick of all those requests I don't know either way very over explained option but right below it is the one that I actually need which is hit the reset button on the server. And I hit that button, and 30 seconds later everything's back online, and I'm able to copy the file over. And I still don't know how I managed to crash the entire operating system with a 30GB tarball.
Starting point is 00:23:58 Maybe I ran out of RAM, I don't know. Maybe, I don't know. I think the question that always comes up when people talk about doing self-hosting is, whether it's GitLab or anything else, why not just go and use gitlab.org or gitlab.com, whatever the main one is, and just pay them whatever monthly fee they want. Well, um, honestly for me, if I have to spend money, I want root access to the hardware. That's as simple as that. I don't like to pollute GitHub and GitLab.com with my stuff because a lot of my stuff is let's create a repository and experimentLab.com with my stuff, because a lot of my stuff is, let's create a repository and experiment and then if it goes well, well, whatever. And for me, I feel a lot better messing around with that stuff when I'm the one paying directly for the hard drive that the data is stored on. I'm just weird like that. But at the same time,
Starting point is 00:25:09 as far as why I switched away from GitHub in the first place and everything is because I just didn't like the direction things were going with AI and forced two-factor authentication and stuff like that. Now, to be clear, I do understand the merit of forced two-factor authentication, but I'm also blind and 2FA is difficult for me. So, um, I would rather not be. What? But anyway. Is that, no, actually that is kind of interesting, I hadn't really thought of that. What is the problem with 2FA for you?
Starting point is 00:25:49 So, um, now at the time this is how I felt. Since then I have actually learned a little bit more about how 2FA works and I've solved the problem. But at the time when GitHub forced two-factor authentication, the options were... There's plenty of options, but many of them involve a six-digit code that expires every 30 to 60 seconds that I cannot read in that amount of time. So that's the problem. But the other options are get a code through SMS or get a code through email. Now, you might realize the problem with those methods
Starting point is 00:26:25 is they're insecure. Like really insecure. You know, SMS, they're SIM swapping. It's also being generally transferred in plain text over the air so someone can sit and snoop the traffic. I don't believe anyone's monitoring me, but you know. Yeah, the SMS thing is getting better with RCS, but that's still widely rolled out for
Starting point is 00:26:50 everything yet. And I don't even know if my carrier supports it yet, but either way, the other problem with SMS is if your phone's not working, you can't get the codes. Now, I do have backup codes, but I don't know where they're stored, that's my problem, but anyway, that's still a problem. And the other aspect of it is I don't like keeping my phone in the same room as me when I'm at my computer, because if I'm at my computer, most people that I actually care about can reach me through my computer. I don't need my phone spamming me with notifications and telemarketing and robocalls and stuff like that. It's annoying, and if I'm going
Starting point is 00:27:30 to have it silent, I may as well not have it in the same room. So my phone, when I'm done with it, goes in my bedroom. My computer is not in my bedroom. So if I have to log in to GitHub, and it's forcing me to do 2FA, and the only accessible option is SMS for me, which is more secure than email, because if you have my email, then you can just get the code, but it's a bit harder to get my phone number, realistically, because I just don't give it out. And you know, if I have to go up two flights of stairs, go read the code, and go down and enter it in, it's just annoying and I don't want to do it, so that made me think, okay,
Starting point is 00:28:12 well, I'll set up GitLab at home and then I don't have to deal with that. It may be less secure, but it's more convenient for me, and honestly, it is technically more secure that way because most people don't know where my code is. Security by obscurity. Not that that's actually security but you know, still. That's true but you also have to consider like the kind of target you are right? Like people will talk about how oh you shouldn't write your passwords down and put them on a sticky note on your computer but if you're doing that with a home computer, like, you shouldn't write your passwords down and put them on a sticky note on your computer. But if you're doing that with a home computer, unless you're a government
Starting point is 00:28:50 official, no one's breaking into your house to steal your passwords. Now, if you're doing that- And if somebody is breaking into your house to steal your password, you have bigger problems, like the person who broke into your house, period. Yeah, yeah. But if you're doing that with an office computer, like that's a very different scenario, right? Like people will walk by people who maybe are in other apartments, maybe a disgruntled employee who wants to like, or maybe someone who's disgruntled with you, who wants to frame you for something, like doing that with a, in a more public
Starting point is 00:29:19 setting, like that, that makes sense why that's not secure, but, or like my, um, my mum, for example, she has a notepad where she writes down all her passwords and that's not secure but she's also not a target for that being a problem. People need to think about like when we're dealing with security it's, you have to think of the realistic attack vectors, who would be trying to get this data? Because there's always going to be this trade-off between privacy and security. And you can, like, you could store your codes in a vault at the bottom of the ocean, but, like, is that providing any more benefit than putting them on a thumb drive that's in a cabinet. Or just putting them open in the IDE on an unlocked computer in the middle of an office building.
Starting point is 00:30:12 I don't know. But anyway, like I said earlier, that whole 2FA thing has been solved. I ran into about 2FA in my community and we found a solution to the problem. There's a command line rented a vote2fa in my community and we found a solution to the problem. There's a command line TOTP client that you can use. It's called COTP. It's available in the Archery Post. And it's a bit unintuitive at first with the syntax of the command, but once you learn it, it's literally just you... it's encrypted, but it's stored on my computer, and I can give... I can take the secret phrase from Google Authenticator, if I'm given the option to set up Google Authenticator. I can put that into COTP, give it a label, and it'll generate a six digit code. I enter that in, and as far as the remote site is concerned, I'm using Google
Starting point is 00:31:05 Authenticator, but I'm not. And then it just works. So because it's on my main computer now, here it's a bit less secure than having it on a separate device. But you know, I have to open my terminal, I have to willingly do that. And then I have to know which key I want to get Because they have different labels and then I have to enter a Decryption password to actually get the code and then I have to copy paste that code in the website and in it sounds slow The way I'm describing it, but it's like five to ten seconds max. I have never actually had the code expire in that time. So it's a lot more convenient and most things port it now, like Discord.
Starting point is 00:31:52 I have it working there. I have it working on my authentic server, so all my self-hosted stuff is protected and has two-factor now. So it's been really handy. The only one I haven't done it for yet is GitHub because I honestly don't care enough about my GitHub account to go and fix it. Sure. I think there's a thing that people don't actually realise about OTP. When I did my video on GitHub 2FA, all of the people in the comments were saying, I don't want to use my phone for 2FA. I don't think there's a lot of people that realise that OTP is not Google Auth or is not like any of these other authenticator applications on your phone. It is a protocol that can be implemented in other things. I believe Bitwarden has support for generating OTP codes now. So like there are ways that you can do it
Starting point is 00:32:41 on your computer. There are ways you can do it with things that are not in your phone. But because the things that are... Like usually when there's like the tutorial on, Hey, setting up 2FA, it's going to show you how to use Google Auth or whatever Microsoft's one is. So I can understand why people get confused about it. And even more, and this is more of a US problem in my opinion, When there is the option for OTP, it's not clear that it's OTP, because it's labeled as Google Authenticator, and it tells you you gotta go get your phone and install
Starting point is 00:33:11 the app and then scan the QR code. And sometimes you don't even get the secret phrase that is behind that QR code. You have to somehow scrape it. It's not always displayed. Sometimes it's displayed in a format that isn't compatible with the client you're using and you have to fix it in the text editor, it's not intuitive at all. But luckily I have a community of people who like help me with this stuff, so I was able to figure it out. But not everybody has that, and that's a little frustrating because then, you know, less people use 2FA and then ultimately it gets a bad rap and then people's accounts get hacked and they wonder why Mm-hmm. Yeah, like if you're if you're the kind of person who uses the same password for everything and you're not using 2FA
Starting point is 00:33:54 Just give up just give up just what are you doing? Like yeah And even me like I you I don't know any of my passwords I know my bitwarden decryption key and I know my 2FA decryption key. That's it I don't know any of my app help passwords because they're three miles long Speaking of that I I hate when websites put in just weird arbitrary Like restrictions on the password and don't explain it initially I've had sites where I generate, you know, I usually I think I have bit more than set usually like 50 characters.
Starting point is 00:34:27 So I will generate a 50 character code and some sites will truncate what I enter. So I save the password, I try to log in and it's like, oh password's wrong. Like what do you mean password's wrong? I literally just set it. I've just copied it in. But it didn't actually set the password that I had set. copied it in, but it didn't actually set the password that I had set. Here's a fun one. My bank, I'm not going to name them because of this security flaw. It may have been patched since then, but a few years ago, I needed to reset my password for a reason. And I went to enter one of my three mile long random passwords through Bitwarden, and I entered it in and the bank started spinning. Spinning.
Starting point is 00:35:15 Spinning. And all of a sudden, 503 service unavailable. A patenever in 2.4 on Ubuntu. I crashed the banking software Brody. Mm-hmm. It was out for a good two hours It was because there was an exclamation point in the password oh Oh, okay. I know there's a lot of people out there that like to intentionally set usernames and passwords that just they know are going to cause a problem for someone like, you know, including an open bracket, including a quote mark, um, you know,
Starting point is 00:36:03 exclamation mark, just, just things that should be getting escaped and depending on the language is going to cause serious problems. Yeah, well in my case I just hit copy and hit paste and then trashed it. What do you want me to do banking software? That's impressively bad. I don't don't know like because usually they would require you to use special characters and an exclamation marks a pretty common special character it's not like you use some you know weird Unicode symbol or you know just something like maybe a you know curly brace things like that
Starting point is 00:36:40 emoji yeah yeah like that I can understand why it might do something weird, especially Emoji, because Emoji double-wired characters and Unicode gets a bit weird. I know a lot about Emoji that I don't need to know about Emoji. Writing game engines is fun. Yeah, yeah. Well, I've seen how emojis kind of break from time to time just in a normal terminal that's like intended to be a terminal. So I guess for anyone who's not aware, just give a brief explanation on your game and then we can go into some of like, you know, you would bring emoji stuff there, but anything else you want to get into with that. Okay, so all the self-hosting stuff is for a game called Socially Distant that I've been working on for the left-
Starting point is 00:37:28 well, since COVID-19 been- Um, and it's a hacking game where you- well the story is kind of being revamped so I'm not gonna actually go too far into it but basically you are an employee for a company and you're a hacker man and you're going on this investigation I'm not pitting the game too. Well because it's kind of in limbo right now we're working on it, and I don't want to make promises right now, but It has a desktop environment built into it that's very Linux II and has a terminal and environment built into it that's very Linuxy and has a terminal and the big the big part of it is that it's in a custom game engine that I wrote for it
Starting point is 00:38:08 so I wrote the entire UI system for it I wrote the rendering code I wrote the window management and I wrote the text rendering and I added emoji support to the game now you mentioned terminal but I haven't actually gotten it working in terminals yet I've gotten it working everywhere else where the game. Now, you mentioned Terminal, but I haven't actually gotten it working in Terminal yet. I've gotten it working everywhere else where the game can display tabs, but not Terminal, because Terminal's Terminal. But Emoji, on a website, if you have a competent browser, If you have a competent browser, it's just theoretically gonna work. You know, if you go to GitLab or GitHub and you post an issue or a comment or something like that and you use an emoji, it's gonna work. Sure. desktop application, not always. Because emoji, they are standardized, but what isn't standardized
Starting point is 00:39:10 is those little short codes they're called. When you type in a colon and you type the word heart and then another colon and a heart appears in the message. That is not standardized. That is completely dependent on the specific service you're using. So if you're writing a desktop app, you need to come up with those yourself. I've got Emojipedia open right now. The example they have here for short codes is on GitHub it's policewoman, on Emojipedia it's woman underscore police underscore officer, on Slack it's female dash police dash police officer not underscore they decide to be different yeah so that's the short codes uh now that's relatively
Starting point is 00:39:53 easy to figure out um i just went to the github api they have they have they have an api that returns like a chase on object of every short code that their system supports, and then what Unicode values they move to. So I took that, turned it into C sharp, and that became a 4,000 line long file in my source tree. Yeah, I've got the... I think this is a full list. Someone decided to put a cheat sheet together. Um, yeah.
Starting point is 00:40:27 Yeah. Also Unicode is a evolving standard, so you might get more emoji. Yeah. So I have this lookup table of every single emoji there is, except for the ones that didn't have Unicode code points attached to them for some reason, or didn't have short codes attached to them for some reason, becauseub is weird. So that is only part of the problem. You know, parsing those shortcodes, looking them up to get their code point values. That's relatively easy. I've written a few programming language interpreters for languages I've invented, so I know what I'm doing.
Starting point is 00:41:04 for languages I've invented so I know what I'm doing. Rendering the emoji. First things first, C-harp character encoding, UTF-16. It's not UTF-8, it's UTF-16, a character is 16 bits, two bytes. Thring encoding in C-harp is also UTF-16. So storing a Unicode code point for an emoji is not possible in a string because the backslash U hexadecimal escape sequence can only accept two bytes of data, not the four that you need for an emoji. So somehow I needed to be able to turn strings into UTF-32. Luckily,.NET 8 and.NET 9 have a method to do this,
Starting point is 00:41:59 but it is probably not as efficient as I would need in a game engine, so it's not particularly ideal. So I had to do some of the parsing myself. That's fine. Whatever. Now we get to the text rendering part. So you know how in an Arch Linux system, if you don't install an emoji font, all the emoji look like squares? Because you don't have an emoji font. You need to install an emoji font. Now in a game Cause you don't have an emoji font. You need to install an emoji font. Now on a game engine, you also need an emoji font, but you're very limited on what emoji font you're able to use because of performance and license.
Starting point is 00:42:36 Um, now I believe, uh, I'm good to go as far as the emoji font that I picked. Um, it is actually actually a it's based on Twi emoji but it's modified for performance. And what I wanted is I wanted color emoji, which complicates the problem. And I wanted an up to date font that has most of the modern emoji. font that has most of the modern emoji. And, you know, I was able to get that. And the problem is fonts and color glyphs are not exactly sane because there are so many different ways to do
Starting point is 00:43:20 color in a font. And I'm using free type, which doesn't support all of them. So, free type can handle your standard bitmap raster glyphs from 1974. That's fine. It handles those. It can handle single color vector glyphs, which is what most fonts are nowadays. That's fine. It handles those. It can handle single color vector glyphs, which is what most fonts are nowadays. That's what TrueType fonts mostly are. And it'll rasterize them out into a bitmap that you can then copy into your texture on the graphics card. That's easy enough. Color! There are two standards. There's SVT and then there's COLR. Okay. SVT is fucking slow. Pardon my friend.
Starting point is 00:44:11 It took at least two minutes to render a single emoticon at 12 point font in the game and because there are no SVP renderers for.NET that run in.NET and aren't platform specific and by platform specific I mean Windows. I'm on Linux, I can't use those. So you know rendering an SVP out not a not not a viable process. I do cast the test, but it's gotta be rendered first. I don't want the game to hang for a minute during that first cold run. No thanks. Um, that's for one emote! Imagine having to preload every single one of them just in case one of them might be used by a mod.
Starting point is 00:45:02 No way! So they're not happening. Now, colr is, first of all, it works fine in free type, but you have to write specific code to be able to take the data out of the font and get it into your texter. It's a bit more complicated, but I was able to figure it out. The problem is there aren't many emoji fonts that use that format because they all are expected to be used on the web and therefore are SVG fonts. Is it reasonable to convert between the two? I am sure it's possible but I don't know about the legality of doing so.
Starting point is 00:45:43 And I just don't want to mess with it because this is a commercial game. I want to make sure my fonts are licensed properly. So, you know, I'm not a lawyer. I don't want to deal with that. I want to if someone else has turned an open source emoji pack into the right font that I need and it's under OFL and under the right license, I'm going to use that. This makes life easier, but you have to find that font. And luckily I was able to. But my God, that was a nightmare. And now I have the ability to render
Starting point is 00:46:16 cute little red foxes in the user interface. Hey, I guess this might be a big part of the reason why a lot of games just don't bother with it And if they're gonna use something emoji like they'll just go with emoticons because that's much easier because you're already doing that anyway You're already you're already dealing with these characters. So it's fine. No issue. No, that reminds me. There is another emoji like system in Unicode. It's called the private use something or other. Unicode is kind of hard to learn and hard to remember. The private use area. Yeah, private use area, whatever.
Starting point is 00:46:57 It's this upper area in the spec where fonts can just put whatever the fuck they want. So you're using material design icons, that's where they're gonna put them. If you're using another icon pack, that's where you're gonna put them. And obviously being that this is an operating system environment that you play the game through, I do need these kinds of icons and I need them to scale.
Starting point is 00:47:20 So, you know, toolbars, for example, they need your open and save icons. Or if you're in the browser, you need a back and forward button. And I'm not an artist and I'm also blind, so I'm just going to use an icon font for that. And maybe down the line, I can get someone to, you know, replace those icons with something a bit better for the game. I would assume the nerd fonts probably also use that area for storing their glyphs? I'm not certain though. I would imagine so as well, but I haven't looked into nerd fonts. I probably should for the terminal, just for flair, but not yet. More fun, more pain. These icon fonts are why I ultimately decided to implement emoji into the game, and I'm telling this
Starting point is 00:48:03 story in reverse because I thought that it would be easy. It was not easy. Icon fonts are easy. They're just fonts with different glyphs in the private use area, and then if your language supports Unicode, which any language built within the past 30 years will hopefully support, you can represent those icons properly, and it'll just work. And you'll get, uh, you'll get your monochromatic tailable icons that you would expect on the internet for flat design and it all works. And that is until you use material design icons and you make a game about about COVID-19. That gets you flagged as a password stealer in Windows Defender. Okay. I'm serious. I needed to get help from the Jon Hamm and the community to figure this out with this one out and figure out what was flagging it. I had to reach out to Microsoft Security
Starting point is 00:49:02 on multiple occasions to report it as a false positive. And we found that the one thing that was tripping it up was one material design icon called Coronavirus. We removed the constant for it in the code, compiled it, and it worked fine. Windows Defender stopped flagging it. Material design... What? What? Wait, wait, I found it. Coronavirus icon material design. What?
Starting point is 00:49:34 Okay, sure. Yeah, so it's a little glyph of like a coronavirus type thing. It was causing my game to be detected as malware. So this is stuff you have to deal with False positives are a thing and it is a nightmare As you know, those antiviruses are not gonna tell you what flagged them because if they told you you'd be able to circumvent it Right, right It's always fun when your own game gets flagged as a security issue. Oh, it's great. It's great for PR. You know, biggest operating, I know
Starting point is 00:50:09 Linux is trying to overtake Windows in terms of gaming market share. But realistically, Windows is still dominant. I don't know how long that'll be, but the year of the Linux desktop is not yet. Not yet. One day. And I want Windows to at least work, even though I'm developing the game Linux first.
Starting point is 00:50:27 So, you know, if my game gets flagged by the default antivirus's malware, and I have to tell everybody to turn it off in order to play the game or to exclude their Steam direct- No! First of all, no! Second of all, Valve does not allow that. If you put malware, even if it's false positive on Steamworks, they're gonna bite you. So, you know, I had to get that fixed. That was a year-long nightmare and it affected me across multiple game engines when it's just great. Yeah, you'd be getting a very interesting email from Valve when you try to post that version, they try to test it. It's like, hmm.
Starting point is 00:51:04 And you know, I have gotten some interesting emails from valve I can't talk about most of them, but you know I have had to work with valve in the past to get stuff working And it is um they don't mess around We'll put it that way. They're they're cool, but they don't mess around one of the things I had to do is cool but they don't mess around. One of the things I had to do is it's not currently working not related to the S sellers but you used to be able to log into my websites using your Steam account and you'd think that it'd be simple because it is simple if you want to log in with GitHub or set up GitLab or Twitter or stuff like that you know some of those websites you do need to
Starting point is 00:51:42 get reviewed before you can allow public logins. Like Google, you need to get approval before you can do that. And, you know, others you don't. But in either case, they all use OAuth 2 behind the scenes to make that work. So this is where this is your login with Google button and stuff like that on many websites. I wanted to set that up for Steam. Now Steam does support OAuth 2 if and only if you contact Valve and you happen to be a big enough game studio. This is in their documentation. I don't know if the last part is, but you do need to contact them, and they only issue those client IDs that you need on a case-by-case basis. So that leads me to believe that you need to be a big guns studio or publisher to get them, and that makes sense, it's that you don't get your
Starting point is 00:52:40 Steam phishing stuff, and you know know people being able to take your your Random website and put login with steam and then suddenly you've logged into Some sketchy website that steals your steam ID. Yeah, I've seen a lot of um I've like games like path of exile do this Marvel rivals does this but like, you know, your smaller games usually I at least haven't seen anything that's relatively unknown habit usually I at least haven't seen anything that's relatively unknown have it yeah now the problem is is that they also support open ID now for the system administrators out there I do not mean open ID connect which is just o off to I mean open ID the old one okay they do support that and that's open to anybody
Starting point is 00:53:22 it's a bit of a nightmare to set up but it's open to anybody. It's a bit of a nightmare to set up but it's open to anybody. But it's also old OpenID so it comes with the security flaws of old OpenID. So my authentication provider which is authentic, I self-host it, does not support that old version of OpenID. And this is why it's not working right now. In order to get Steam working, I need to set up a whole other authentication broker that's written by some guy on GitHub in C Sharp as a Docker container. That's always a good start.
Starting point is 00:54:02 And I run that locally, and I reverse prophecy it behind a domain name, and I point Authentic at that. And what it does is it talks to Authentic using OpenID Connect, but talks to Steam using OpenID too. And somehow by the alignment of three dark forces and a blue moon, it works. Right now it doesn't because the application for whatever reason does not speak the right version of TLS and it confuses my internet browser. So it is an SSL error, it's not related to the one that has everything else down right now. So that's something. So Steam doesn't work right now. But the other thing that I had to do with Steam is I need to be able to publish builds. Now, publishing a build to Steam right now involves
Starting point is 00:54:55 you install SteamCMD, which may be in your distributions packet manager, maybe not, most likely not. It is in the AUR. But most likely what you're going to do is you're going to download the Steam SDK from Steamworks if you're a partner. And you use SteamCMD from that. And there's a weird command you have to enter to, and you have to do some like source engine scripting to configure it, which is great. I love, I love VDF scripts. They're great. That's sarcasm, by the way. Um, and that's coming from the guy who wrote a bash interpreter in C-Harp. Anyway, um- So, you know, we've said that all up. Regarding um, regarding packages, just- just one sec, um, they do have documentation on this. Uh,
Starting point is 00:55:45 Uh, it's available in multiverse on Ubuntu. On Debian they do have a package arch. Yeah, they literally tell you to get it from the AUR. Um, so, oh, there is a dock container though. Excuse me. Um, so I had to set this up as a do Docker container so I could do it from CI-CD, and it turns out that not many people upload builds to Steam using continuous deployment. It's just not a thing people do often, and if they do it, they don't talk about it. Mm-hmm. Because... it is not technically possible.
Starting point is 00:56:20 Mm-hmm. It is possible, because I've done it, but it is not easy. So you know how you log into Steam and on a new device, or if you're logging into something particularly sensitive, it'll do it every time, but most of the time on a new device you only have to do it once. Maybe you bought a Steam Deck and you're signing into it for the first time. It goes and pops up a little SteamGuard window and says you've got to enter a six digit code that's been sent to your email or phone or whatever. So you enter that code in you're signed in and it works.
Starting point is 00:56:57 Steam works and Steam CMD you have to do the same at the command line. And it works the same as on Steam UI. So, you know, you enter the six digit code and then it works, hopefully. Assuming you enter the right code and it didn't expire. Now, this is great if you're a human being doing a human thing on a human computer. If you're a build robot running a continuous deployment tab, you can't enter the code because you don't know the code because you cannot access an email address to get the code from. And even if you could, logs in GitLab are read-only, so you don't have a standard input, you can't enter the field, it'll crash Steam CMD. That's great. So what you have to do is you have to log into Steam CMD on the same device that's going to run
Starting point is 00:57:58 the GitLab job, but you have to do it as a human being. Right. And then you do the Steam Guard. And then there's some file buried deep in proprietary no man's land that I don't know if I'm allowed to reveal that has the credentials that log you into your Steam account. And you take that file, you store it as a repository secret, and you do not touch it. You do not touch that Steam account ever again, because if you do and you invalidate the Steam Guard code, you have to do it all over again. And you have to write the build helps that it takes this repo secret, downloads it, puts it in the right spot, and then hopefully it works. Now the other problem is you also need your Steam password as a repository secret. So that's great. Another problem is you also need your Steam password as a repository secret.
Starting point is 00:58:45 So that's great. Needless to say, I created a dedicated account that has no credit card attached to it and only has access to what it needs to. Understandable. So, you know, I was able to get it to work, but it's a bit of a nightmare. And you know, the only reason I knew how to do it is because I was able to contact Valve and get them to help me. But it's not an easy process. So if you ever intend on developing a Steam game and do continuous integration, welcome to hell. Enjoy your stay. So before you're mentioning OpenID and um just just one random thing I want
Starting point is 00:59:26 to mention with the with that um they provide icons you're supposed to use if you're using the OpenID login um the the icons they have here are the uh the valve icons from about 15 years ago. years ago. Yeah that page hasn't been updated in a while. Um yeah I I I don't use those icons sorry Valve I just stole a random SVP of the Steam logo and put it there instead because that's all I could do I cannot physically fit those icons in my authentic list of things you can use. You just have like Google and whatever and it's just like this giant banner. It won't even give me the option to set that banner. It's just an icon. Oh, God. So one of the things that you did, uh, the one thing you did bring up that you wanted to talk about was, um,
Starting point is 01:00:29 the, uh, developing a game engine on Arch. It is a nightmare. So, most of the time it'll work. But in any... as is the case with any art system, eventually something weird will break for weird reason that is weird. And I had that happen three days ago. So, I was not informed of this, but SDL3 came out. I don't know why I wasn't informed because my game engine is written in SDL2. I guess maybe I'm not popular enough to know about SDL releases. So SDL 3 comes out, and you know, I'm thinking great, it has all these new APIs I might actually use. Like, it has a dialogue API now. I think it's just the front end for ATK on Linux, but either way, I can go into SDL and say, hey, pop up an error message, which is a lot better than doing it in
Starting point is 01:01:23 engine, because if your engine crashes, then you can't display the error message that tells the user why the engine crashes. Your only other option is to log it to the terminal and the terminal might not be open so I don't think that's adequate. So I'm glad they have dialogue API but anyway SDL3 comes out but I'm still on SDL2 and I'm not ready to port because porting requires work and I'd rather dedicate work to working on the game. Um, not the engine. Especially the platform layer that really doesn't need to change because it works fine. Now, last week I started a massive documentation run because I want people to contribute to the game. I want people to know how to use the API. Um, so I'm going through it, documenting everything. I got some freaking Synthwave music going the whole time. Everything's
Starting point is 01:02:10 going well. And every now and then I'm compiling the game, making sure I haven't broken something somehow because, you know, games somehow documentation can break things sometimes for some reason. I don't know. But you know, I'm doing that and everything's working fine. You know, some things have broken because I've been removing code. Text labels in settings are now white instead of being green. I have to look into that. But that's subtle. That's fine. It's fine. And so I get to Wednesday last week, and I'm doing documentation, and I do an art update. And I think this art update is fine. I don't think about it too much, because nothing really big is going on.
Starting point is 01:02:59 I do see some SDL stuff, but I don't think about it, because I'm thinking to myself, okay, this SDL2 package is getting replaced with SDL2 compat, that's fine, SDL3 came out, there's probably some legacy package rename going on there. It's fine. And I keep working. And then Thursday happens, and I get a massive cluster headache. So I put the source code down, Wednesday night. I go to bed, I have my cluster headache. So, I put the source code down, Wednesday night, I go to bed, I have
Starting point is 01:03:26 my cluster headache, and then I come back on Friday, and I boot the game, and I'm hacking, and I try to hover over things in the UI. And it ain't doin' it. You know, usually when you hover over something in Socially Distant, there's a tooltip now that tells you what the icons are, because accessibility is important. Those tooltips were not coming up. And I thought okay maybe the game hang? Tabbed over to the IDE? No, everything's fine. Game's still running, still pumping messages. It's fine. And so I tried clicking on things and, you know, and no, not working not working okay so I tried going into system settings just maybe my frame rate is really low no I couldn't get into
Starting point is 01:04:12 system settings couldn't click it okay so I hit one of the I am gooey debug layers to check my frame rate so I hit f4 and it comes up and it tells me I'm running solid 60 FPS v-sync on because I'm on Wayland and great it's fine and I think okay maybe there's like a user interface element blocking the mouse cursor from reaching the ones that I can actually see maybe I've introduced some sort of weird bug I don't know I open the widget inspector which allows me to see all the UI in the game and where how it's all laid out and I cannot click on any of the nodes. Now they're not in my native UI system, they're in iamgui. So something is desperately wrong right now
Starting point is 01:04:54 if I cannot click on iamgui. And I cannot click on iamgui. So I go, okay, something's weird. My keyboard's working, my mouse isn't. Now, I'm on my documentation branch, So I go, okay, something's weird. My keyboard's working, but my mouse isn't. Now, I'm on my documentation branch, which is not Master. So I think, okay, I'll stash my changes, and I'll go to Master, which I knew worked. And I boot it up. And same problem, the mouse ain't working. And then I go to Steam and I boot the game on 24.07, which at this point is almost a year old, and it works. And then I go to Steam and I boot the master, the git beta for the master branch.
Starting point is 01:05:43 Now you know why I didn't say the words in order. So I boot that for the game, which is the same build that wasn't working earlier with the mouse. And I boot it and it works fine. So exact same build of the game working fine under Steam, not working fine under a debugger. What's going on? So then I look, and I look into system settings and I think, okay, maybe Steam's running the game in X11 mode? No, I don't even see a Wayland toggle, which implies that maybe it's not running under Linux. So I open the in-game terminal type neofet, the host string, which tells me what operating system the game is running on.ofet in game is actually a debugging tool for me
Starting point is 01:06:25 So if I ever get a bug report, I'm gonna ask for neofet Yes, I'm serious So I look at that and it says steam runtime version, whatever whatever whatever x64 And I'm like, that's not helpful. I want to know what operating system it thinks it's running on not that it's running under steam So I exit the game and I like click on it because I'm thinking maybe it's running on. Not that it's running under Steam. So I exit the game, and I right-click on it, because I'm thinking, maybe it's running under Proton, and that's why it's working. Because there are Windows builds. And I remembered a year ago I did set the game to purposefully run on Proton back before I had Linux working. And I looked, no, it wasn't running under Proton. I actually turned on the little toggle
Starting point is 01:07:04 to force it to run under a specific runtime, and it was the Steam runtime. But I noticed there was an option, Legacy Runtime, and I'm thinking, ooh, what if I run it under that? And this is how I found out that Steam vendors SDL2 in the Steam runtime. So, I booted the same build of the game under legacy runtime and the mouse stopped working. So this tells me there is some package difference between my Arch system and Steam. And like I said, Steam vendors SDL too. Now that's great! Tells me it's not a bug in my code, but it also means I can't work on the game on my current system. So, I write a debug tool at this point to figure out what's going on with the mouse,
Starting point is 01:07:52 and I add it to the IMGUI layers, which I know I can access, and I hit F4 to bring it up, and I'm moving the mouse around, and there's a little indicator saying where it thinks the mouse is, and it keeps thinking it's at location 0 0 which is the top Left of the screen no matter where I put it and actually Took a screenshot of the mouse cursor like way near the bottom of the window or of the visible zoom area of my screen And then the little mouse indicator thing saying it's that top left of the screen when it's clearly not because you can see where the cursor is So top left of the screen when it's clearly not because you can see where the cursor is. So basically what happened is, ARC maintainers, they swapped the SDL package out with SDL2Compat, which is an official SDL library, and what it does is it's SDL2, but under the hood, SDL3.
Starting point is 01:08:46 So you know, if there's any bug fixes in SDL3, you get those bug fixes. However, the game will still think it's SDL2, so it'll work. Except it's not actually SDL2, it's pretending to be SDL2 in terms of API and ABI, but it is decidedly not SDL2 because it broke mouse position pulling, and that is a feature of SDL2 that I use. So I'm gonna have to file a bug report for that. I went surecarzogging into GitHub, which I don't want to do, but maybe that'll give me a reason to finally fix 2FA on it. but maybe that'll give me a reason to finally fix 2FA on it. But, you know, I'll have to point a bug to fix that and get it fixed for other games that maybe have that same issue, because I doubt that I'm the only one. And so that's great. But what I ended up needing to do
Starting point is 01:09:38 is if you go in the Arch Wiki, the SDL2 Wiki article for it tells you that if you still need SDL2, you are recommended to install SDL2Compat, and it'll do it automatically if you have SDL2 installed. The package got renamed, and anything that requires SDL2 will require- will see SDL2Compat as SDL2, and it'll work. SDL2 and it'll work. Problem is if you go to uninstall that to replace it, KDE requires SDL2 for gamepad support. Unable to install SDL2 compat because it breaks dependency SDL2 required by Plasma workspace or whatever it was. Okay, that's fine, whatever.
Starting point is 01:10:22 Made a KDE developer, uh, go, what? Uh, SaverHugel, I love him. Uh, confused the hell out of him. Um, then, then, he saw the other packages that were also complaining about this when he tried to remove it. Um, FFmpeg requires STM? Uh, what? Okay. Uh, SCRCPY, which is a tool I use for viewing my Android phones on my PC where I can zoom in and use them as some keyboard,
Starting point is 01:10:58 that uses SDL2. That actually makes sense because it's actually a graphical application. But FFmpeg, I don't know why it uses SDL 2, because it's a video encoding library and it doesn't render to the screen? It doesn't use window management? It doesn't use a gamepad? What does it do with SDL? I don't know. But it requires it. Maybe it uses it to set up an off-screen OpenPL context? I don't know. Um, but either way. SteamCMD requires SDL2. SteamCMD, the command line version of Steam! Wait, hold on, just one thing. They have this in their documentation.
Starting point is 01:11:47 Oh, look at this. It doesn't really tell- it's just pure code documentation. But they're doing something with it. Okay. So they're doing something with SDL2, but it weirded me out. But the weirder thing is that SteamCMD needs it? Why? Okay. Um. So here's how I ended up fixing this.
Starting point is 01:12:10 Um. Right next to where it says use SDL2Compat, it says if you actually need SDL2, it's in the AUR now. Um. Don't know why. But it is. I would think SDL2Compat should go in the AUR, because it's not quite ready, I guess, because my game broke in it, and that's how I feel.
Starting point is 01:12:30 If the project says it's the official package, I guess, like, I get why they've done it like that. It might be annoying, but like, yeah, it broke things, but if the project's saying this is the way to do it, like, I get why they've done it, even if it's not the thing they should be doing yeah but either way my stl2 is in the aur so to install that I have to compile it great whatever so eventually it finishes compiling and it says hey I steal to compact conflicts of stl2 would you like to replace stl2 compact with it and I'm like sure yeah go ahead and it says okay I cannot remove SDL2 Compat because it breaks lib32-sdl-compat, which is required by steamcmd. So go remove lib32-sdl-compat. And it goes,
Starting point is 01:13:17 no, you can't do that because steamcmd needs it. So I go remove steamcmD, then remove the lib32 packet, then remove SDL2 compat by replacing it with SDL2, then I had to compile lib32 stl compat- er, SDL2, through AOR. I get that working. Then I had to install SteamCMD, and I boot so highly distant, and my mouse works! Never mind the fact that I'm using an integral system package that I installed through the Arch user repository, which you're generally not supposed to do, but my mouse works. Uh, this is why people don't develop things on Arch if they need very critical packages and use containers or use like, Debian stale or something like that.
Starting point is 01:14:07 And the worst part is this won't affect the CI CD builds because they're all done through either Ubuntu or Alpine. Oh god. But that does remind me. But that does remind me. Haters. So, you may be aware of opening a Steam game nowadays on Linux. You spend maybe 20 minutes playing the game, but 4 hours compiling Vulcan haters before you get to play it. Cool. My game uses OpenAL because I don't feel like writing a Vulcan renderer.
Starting point is 01:14:44 It's 2,000 lines of CR just to figure out what graphics card you have and if it's capable of being a graphics card. I think Vulcan 1.4 is going to solve a lot of those problems but I have to wait for APUs to widely support Vulcan 1.4 consistently before I can do that. So I just don't want to fight with that right now. So I'm doing OpenAL. Besides, I don't need Vulkan. I mean, most Wayland compositors, which at the end of the day is what my game engine is, except it doesn't support Wayland being a compositor.
Starting point is 01:15:13 But it does all the compositor things. It renders windows to the screen, it does window management, it does all that funny stuff that your compositor does. They're all written in OpenPL. And SaverHugel again told me, unless you actually need the performance of Vulkan, which realistically it takes years and lots of practice to write code that is more performant than what OpenPL gives you, for the unseeable feature, just use OpenPL. It'll be fine. So I'm using OpenCL. And obviously shaders in OpenCL are written
Starting point is 01:15:48 in CLSL. But in my game engine, they are not. They are DirectX shaders written in HLSL. Because my game engine is a hard fork of MonoGame. Which is a spiritual hard fork of XNA Game Studio 4 for the Xbox 360 and Windows Phone. So MonoGame is basically a successor to that. What it does is it adds support for other platforms like it. It can do PlayStation, it can do Xbox, it can do desktop, it can do mobile, all that fun stuff. It can do OpenAL and it can do DirectX, but which graphics platform you use depends on what platforms you want to target. And if you're targeting Windows, Mac, Linux, you do OpenAL. That is all you get. However, because of the build, or the way assets work in MonoGame, by exception of my
Starting point is 01:16:40 game engine, because it's a hard fork, MonoGame uses something called the MonoGame Content Pipeline, where you create this separate project that's separate from your code, and you run this little tool, and it goes through and it finds all your textures and it converts them to MonoGame's format, with some platform-specific metadata to tell it how to load it. It goes through all your audio, does the same thing. Basically, it packs all of your source assets into a friendly format for the game engine, in this case. And shaders are no exception. You write them in 8LSL, because that's
Starting point is 01:17:20 what you wrote them in in XNA Games 3 or 4. So it's the same syntax. But what it does is it transpiles them to PLSL. Now if you're a graphics programmer, you might be thinking it uses Spurvy to do that. No! Spurvy didn't exist back then, because MonoGame started development in like 2007, 2008, I want to say, something around then. development in like 2007 2008 I want to say something around then and it's where VEX didn't exist so it uses something else that used something called mode show hater to do the transpilation but in order to do the transpilation you need to compile it first to direct X which requires the D3D compiler, which requires Windows. I'm on Linux. I don't have Windows.
Starting point is 01:18:08 So, here's how you're supposed to do it, as per Bottle Game's official documentation. First, install Wine. Don't use bottles, because bottles is going to give you a nightmare when you set this up. Sorry, Skelly, I would love to use bottles for this, but no. So you install base wine, and you set up a wine prefix. And you're supposed to run this random shell script that some guy wrote. And I looked at the code, I've audited it, so I know it's safe. But what it does is it sets up the wine prefix great um and it goes and downloads a random build of firefox for windows okay extracts it pulls the d3d compiler from that
Starting point is 01:18:57 puts it in system 32 in the wine prefix uh-huh that's step one right Next it downloads a random version of.NET and installs it into System32. And that's so you can run.NET code. And then it downloads MACB, which I already have installed for Linux, but the Windows version, and puts it in System32. That's what the script does. And you're supposed to run that, and then it will set an environment variable pointing at the wine prefix that MonoGame knows to look for, so that when you compile your game, it will go,
Starting point is 01:19:32 OK, I'm on Linux, I need wine, here's the wine prefix, I'm going to tell wine to execute then mpcp and compile these haters. It'll do it in Windows World, and then the haters will come back in the friendly format that MonoVenus sets. But this requires Wine. Now, this is great on Arch, where you have the latest version of Wine available. It's also great if you're a human and you're able to click through the graphical installation of Mono and stuff like that that wine does the first time you boot it Now
Starting point is 01:20:14 Like I said earlier a CI CD build pipeline is not a human there is no graphical interface click on and it cannot click on those things so I ended up needing to create my own image of the.NET SDK in Docker. And I basically did what the script did. So I installed Wine into the container. Then I put the random build of Firefox into the container in the right spot. Then I put the random build of.NET framework in the right spot. framework in the right spot. And then I set up everything so that when MonoGame goes and requests Wine to do its thing, it just uses the container. And as far as the container is aware, when you boot into it, you actually get a Windows command prompt instead of a Linux hell. And then it's super sketchy, but it works. And that is what is called
Starting point is 01:21:07 the socially distant build environment for Linux. It's a Docker image you can just use. It has everything you need to compile socially distant, but it's super sketchy. But there's a problem with that. If you try- Oh, we haven't got the problems yet. Okay, okay.
Starting point is 01:21:23 Okay. That was haters. Right. But this is why I need Windows specifically, Oh, we haven't got the problems yet. Okay, okay. Okay, that was Haters. Right. But this is why I need Windows, specifically, and not Wine. Because if you try to build the game for Windows in this build environment on Linux, it'll compile the Haters fine. But there's something else the game has. It has game scripts. Written in a custom programming language I wrote called SDSH, which by the name implying
Starting point is 01:21:51 is very similar to Bash, because SDSH stands for Socially Distant Shell. It is the in-game command shell, but used as a scripting language for the game, so for missions and stuff like that. Because I like bash, and I don't care what anyone says about bash syntax, I find it easy and declarative for what I need it to do in the game. So what I do is after compiling shaders and stuff like that and compiling the base game, I have the build system go and I have the build system go and asked the game itself to validate all of the mission scripts and everything for syntax errors, so that I can get compile time errors if I screw up a command for syntax.
Starting point is 01:22:35 Problem is, I'm doing this through MSBuild, because.NET, and if you build a Windows self-contained application and try to use that on Linux as an MSBuild build task, despite the fact that this is a.NET assembly and so should be universal and not rely on Windows. Um, it'll complain at you because the kernel does not know how to open the library and.NET doesn't know what to do with it. So you cannot actually compile socially distant for Windows on Linux. And that is how I'm now a customer of AWS. Because, now, And that is how I'm now a customer of AWS. Because now I could do this the home lab way of just downloading
Starting point is 01:23:29 windows 11 and creating or registering it as a windows build runner for GitLab and then tell the windows build hubs to run on that windows 11. That'll work. And I did it as a proof of concept to make sure that it works. But if you read the Windows EULA, you're actually not allowed to do that. Okay. Because Windows 11, Windows 10, all that, those are client builds of Windows. And client builds are not allowed to be used if you're exclusively using them for remote access. Or automated access. And in fact, if you have Windows 11 Pro, you can set it up as a remote desktop server. But if you are logged in at your
Starting point is 01:24:16 desk on that computer, that's the remote desktop server, and say someone else in your house goes and connects to it, it'll log you out because only one user is allowed to be using it at a time. You can either use it remotely or use it not remotely, locally at the desk. That's in the license agreement. There's no way around that. In Windows Home, you can't even use remote desktop server on there. So, you know, you're really not supposed to use Windows client builds for remote and automated use like this. And a CIA pipeline falls under that. So you need to use Windows Server.
Starting point is 01:24:53 Now, Windows Server is licensed per core. So, you know, it already costs a thousand dollars. Mm-hmm. I have four core processor in that machine. Now I might limit the VM to only use one or two cores. That would save me two thousand dollars. Mm-hmm. You'd think, but no, that's not how it works. Not only is it licensed per core, but it is licensed for each core it could theoretically run on.
Starting point is 01:25:33 So if you run a VM, a Windows server, and you only give it two cores and you pin the cores that it only ever touches those two cores, no. If you have a 64 core processor, you gotta pay for 64 cores. Simple as that. However, AWS... Okay, no. Backtrack a little. I thought, okay, let's... I use VaultPair for most of my VPS stuff because they're Canadian and they're local. They have a Canadian data center. And they're relatively cheap.
Starting point is 01:26:08 They're relatively nice. The UI is easy for me to use. And they're Windows server boxes, I believe, from one gigabyte of RAM and like two VCPUs, it's $24 a month. Don't quote me on that. It's a little brutal. Yeah. And I only need this server to turn on whenever I need to do a build hub.
Starting point is 01:26:29 So you know, I thought maybe I could turn the server off and save money when it's not being used. I can just write a script to turn it on when I need it. No, it bills you even if the server's turned off because the resources are allocated and the storage is allocated, so that costs money. So AWS, they bill by the minute instead of monthly. So Windows Server is billed by a minute with EC2, and it is significantly cheaper for this use case at least. So, with the help of my friend Zapprit, I'm going to shout him out, he does AWS stuff for a living,
Starting point is 01:27:19 or at least he used to, so he knows what he's doing, and he was helping me through the archaic user interface that is the AWS console, setting up all the instances and stuff like that. And I imaged it with Windows Server Core. So I'm thinking this is Windows Server. It's an automated build runner. I don't need a GUI. Just need command line. Let me ssh pin and do what I need to do. That's not what Windows Server Core is. Windows Server Core is a GUI that only opens command prompt. What? So you, uh, you, you remote desktop into it and you get a command prompt and it's PowerShell, which is my worst enemy. I hate PowerShell. I'm not going to rant about PowerShell, but I hate it.
Starting point is 01:28:03 Um, I will rant about PowerShell, but I hate it. I will rant about other stuff to do with Windows. So you log in, and I have a simple task. I need to download GitLabRunner.exe from GitLab's website. I need to put it in a folder. I need to install Docker. And I need to tell GitLabRunner to use Docker. And I need to install SSH. That's all I need to tell GitLab runner to use Docker. And I need to install SSH.
Starting point is 01:28:25 That's all I need to do. It's no web browser. None. Not Edge. Not IE. None. There's no web browser. Now this is a problem. Who's the maintainer of curl again? What's his name? This is a problem. Who's the maintainer of curl again? What's his name? He might get a kick out of this.
Starting point is 01:28:50 Daniel Stenberg. Yeah, Daniel Stenberg. You're going to get a kick out of this if you're listening. On Windows PowerShell, on Windows Server Core, you go to download a file. You have to use curl or wget. There's both. You put in the URL and it goes in downloads.
Starting point is 01:29:10 No, it doesn't because it pops a big red alert saying Internet Explorer is not available. They aliased curl and wget to invoke web request, which is a PowerHel commandlet. And that behind the scenes uses Internet Explorer! Which is not installed, because it's Windows Server Core, and you're not supposed to have Internet Explorer on there. So curl doesn't work. Because it's lying, it's not actual curl. So... It's lying. It's not actual curl. So, um, I Thought okay. Well, I'll destroy this server because this clearly is going to be painful and I'll go grab regular Windows server
Starting point is 01:29:54 That way I have a desktop. I have Microsoft Edge I can do all that stuff and just download things the way you would on Windows. Sure, sure. And I set everything up I get everything working and then I look up online how to convert a server install to server core. Because you used to be able to do that in Windows Server 2019, I believe. Not in Server 2022, they removed that functionality. You cannot convert the install back and forth.
Starting point is 01:30:24 If you pick the wrong one, congrats, you have to re-image the server from scratch. Right. So I did all this setup, get everything working, and I find out, oh crap, I have this desktop environment running that's taking up resources, an obnoxious amount of resources, and I can't get rid of it. So I have to start over. That was painful. But now I can do Windows builds. Why does Microsoft make this so hard? Like, imagine this for like a Linux system, right? You want to set up a Linux server, you want to have a GUI as you set it up. So you install KDE, you do all the stuff. When you're done with it,
Starting point is 01:31:03 you just delete KDE. You delete the browser. It's just fine. Why is it this hard? I don't know. I just don't know. Oh, by the way, they cost the same. Of course they do. Of course they do. Lovely. Incredible. Amazing. Thank you, Microsoft. Yep. Making my life easy. And it is really annoying because I've been trying to cut Windows out of my life. I have Windows on my laptop because I barely use my laptop and can't be arsed to use it long enough to install Linux. but other than that, I have Linux on all my stuff.
Starting point is 01:31:49 I didn't even bother to install Windows on the Steam Deck, even though that would be more of an accessible experience, to be honest, because, you know. I still have SteamOS on it, because KDE is nice, even though it's 5.27 and that doesn't have my zoom fixes so I can't use it properly. Oh well, I have Linux on my things. But because of a weird little bug with MSBuild I still rely on Windows in some part of the pipeline and it's a little frustrating. I just hope someday that I can use ReactOS for this. I tried. No, GitLab runner does not know what to do with ReactOS.
Starting point is 01:32:31 It turns out that if you take GitLab runner and run it on an operating system that tells it it's Windows 2000, things break. Imagine that. So that was a bill go. What a- imagine- who would have ever guessed that would happen? I had to try though. I had to try. Oh man. That is what it's like to develop a game engine on Linux.
Starting point is 01:33:03 Yeah, I can- I- I can see why most people just don't bother with it. Why are you actually doing your own engine anyway? What could you not have done before? Oh yeah. So, it used to be in Unity, and the problem with Unity is that its user interface system is not actually a user interface system. To be clear, I'm talking about UchiUI, and there's a distinction, because UchiUI is the old one that everyone uses, and UI Elements is the new one that isn't finished. So UI Elements is very web-like. So you think on the web you have HTML, CSS, and have a script.
Starting point is 01:33:48 In UI elements, you have UXML, you have USS, and you have C sharp. UXML is like your HTML. It's a little more strict, but that's how you define the things that are actually in your user interface. So buttons and stuff like that. that's how you place them. So it's a lot like React Native, I guess, in that regard, but it's all rendered in-engine. That's UXML. USS is Unity Stylias, and it is the exact same syntax as CSS.
Starting point is 01:34:20 You even have Flexbox. In fact, you only have Flexbox. So if you like using flexbox on the web, if you use UI elements, that's your cup of tea. You're gonna have flexbox and you're gonna be happy. And it was great. And that's also how you theme things and give things consistent color and animation and stuff like that. That's great. Problem is it doesn't support haters. At least it didn't at the time. It probably does now. And you know, Linux systems, if you're trying to make that kind of look, the one thing you absolutely need is
Starting point is 01:34:53 hater support, because what does everyone who first uses hyperlend on their Linux system do? They go and make their terminal translucent, and they blur the background. That, ladies and gentlemen, requires a hater. Um, UI elements can't do that. Uh, UI, or UGUI, can. It's a bit complicated, you have to write your own hater code, but you can do it. Um, that's great. But it doesn't have a nice layout system like UI Elements does. It doesn't have a flexbox system. It doesn't have Unity-style hates. It doesn't have this declarative way of building the UI.
Starting point is 01:35:35 What it is, is it's the Unity scene view, with your game objects and stuff like that. And UI Elements are just 2D sprites rendered in the world somewhere, and then you have a camera that knows to render them on the screen. That's all it is. And it has a layout system. It has vertical layout groups, grid layout groups, don't talk about those. It has horizontal layout groups, and then allows you to do your stack panels and stuff like that. So if you have a list of items, you can group them so that they're one on top of the other, on top of the other, vertically, that's all well and great. Problem is, that layout system doesn't allow me to say, take a piece of text and say, I want
Starting point is 01:36:18 you to word wrap, but I only want you to word wrap if you're 500 pixels wide. If you're 400 pixels wide, I want you to be 400 pixels wide. There's no way to set a maximum width or height of a UI element. You can only set the minimum size, the preferred size, and the flexible size. And minimum is how big it's going to be. If it really cannot fit, it will break. Preferred is how much it wants to be, and if it cannot be that size, it will shrink until it reaches minimum size. And flexible means if there's space left, it'll take it. Sure. So I can do some pretty complicated things with that, but I cannot make a dialogue box that starts out small and then grows as the message inside it gets longer and then eventually
Starting point is 01:37:16 rewraps. So I have to design things that are static size and I don't like that. The other thing that was frustrating me with performance is the terminal. I'm coming back to terminal for a good year so this is like leading up to the first podcast episode. The terminal when you write a lot of text to it would drop the frame the framerate to like, one. This is because I was using TextMeshPro, which is the Unity text renderer that everyone knows about, and it has markup, and it's, you know, you can do multicolor, bold, italic, all the wonderful stuff that you can do. And I need that in the terminal for fancy hacker
Starting point is 01:37:57 effects. You know, NeoFetch would not be possible without that. And everything works fine until you add background colors, because there's an element in the documentation for TextMeshPro Markup that tells you how you can format things. There's an element called Mark, and it takes a color, and then you surround text with that element and the text around with the mark element will be highlighted in the given color. So think double clicking a message in Discord, it goes blue because you've selected it. That's what the mark element does.
Starting point is 01:38:39 Except not really. It really behaves more like the highlighter feet hair of say Microsoft Word. So instead of it being a background color behind the text, it's a foreground rectangle above the text. So it needs to be translucent, otherwise you cannot see the text. Mm-hmm. So The colors in Sohly Distant are not translucent because that would desaturate them and it would look weird. Right. So I ended up having to create two text boxes. One that renders behind the other. One gets dedicated to background colors and the other is everything else.
Starting point is 01:39:23 And what happened was every time you print a large amount of text, a bunch of whitespace had to be rendered in the background, because you might not have been using colors, and a bunch of text had to be rendered in the foreground, which means two text meshes had to be redone, two layout passes, two geometry passes, and everything just broke, and frame rate drops to one. And it's great. layout passes, two geometry passes, and everything just broke and frame rate drops to one and straight. So I did eventually work around that but it introduced other bugs and I'm like screw this I just want to write my own renderer for this and it turns out that text mesh pro is really hard to just get
Starting point is 01:39:58 it to render a character to a 2d canvas because that's not how it works. Unity has a way of like not exposing its low level APIs in some cases, but exposing them in others. So like you have access to the L clear function from OpenGL, but like it's really hard to render a mesh using OpenCL calls directly, so that's great. But TextMeshPro is the same way. It's really easy to get a text element on the screen, but it's really hard to figure out how big the text element might be. And it's really
Starting point is 01:40:42 hard to render an individual character to a vertex buffer. It doesn't expose that functionality in an easy way. And then, after that, you get to... you get to third-party packages. Specifically Steamworks integration. The developer, Faceplunch Studios. I think they did... ...Carry? Smod? If I recall correctly. It's a great Steamworks library for Unity, and it works outside of Unity as well. But there's a bug with it in how it's structured.
Starting point is 01:41:21 The plugin manifest. When you're making a Unity plugin, you need to declare a plugin for each supported platform, otherwise it kind of just doesn't work. The plugin manifests for facepunch.steamworks have two plugin manifests, one for Windows and one for POSIX, because they assumed that Mac OS and Linux are the same platform. They are not and so it won't compile on Linux. So I have to manually fix that. Uh-huh. Um, then I upgrade to Unity 6 and it fundamentally breaks the terminal. It stops rendering. It stops accepting key presses. So I, I, I, I, I, I need, okay, I'm not even done yet. Not even with Unity six. I think I'm on,
Starting point is 01:42:18 on like Unity 20, 20, three. No, that's Unity six, 20, 2022. The Rider integration got upgraded so that every time Unity logs an error to the console, it will talk to the Rider debugger and put a breakpoint there and hang the Unity editor. So if you get in Unity develop... Did we disconnect again? Why is Discord like this? Did we disconnect again? Uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh I don't know what's going on. I don't know. I don't know. I wish I knew. Are we good yet? Are we good then? Yeah, we're good. Okay. All right. So where was I? Breakpoints.
Starting point is 01:43:14 Okay. So breakpoints. Yeah. So every time an error occurs in your code, for whatever reason, it will talk to the writer debugger and place a breakpoint so you get the little exception has occurred dialogue and you can debug your code. That's great if you're writing a.NET application, but Unity developers, you know this very well. If you accidentally type a space in a script, or maybe your cat does, and you tab into Unity, it's going to do a script reload, which recompiles the game behind the seams and it will reload Unity, which will cause, in most cases, many null reference exceptions to get spammed to the console every frame. Now because of this update to the writer integration, each one of these exceptions will get
Starting point is 01:44:00 sent to the writer debugger, which will hang the Unity editor and pop up a little Accept Man has occurred message in Rider, and the Unity editor will not function. You cannot get out of this loop. Can't use it. So I have to go in and tell it to not breakpoint on any exceptions, and there's no way to do this on a per project basis so I have to remember to go in and turn that off when I'm using the only distance game engine but if I'm working on on a Unity game I have to turn it back on and this crap is why I stopped working on Restitch, it got annoying. And so, yeah, I eventually got fed up with Unity breaking in these weird ways and, you know, these random changes happening,
Starting point is 01:44:52 and then Unity 6 sealed the deal for me for socially distant. If I want to keep the engine up to date, I constantly have to fix the game and constantly have to work around these weird bugs, and I just don't want to anymore, because, you costs money to do so the runtime fee and all that. I don't want to deal with that. I can write a much better specialized game engine that'll run much better and it does than Unity and it works. So I wrote my own game engine and that is what Socially Distant uses. My other games that I'm working on do use Unity, but socially distant will not. You talk about the issue of um... Sorry, just completely blanked there.
Starting point is 01:45:39 What was I saying? Shit. Wait, I completely blanked. What was this? Oh, right. Porting your game between versions being a giant waste of time. And I saw this video the other day with this dev who, their game was being built with UE4. And it wasn't even like a stacked video. Yeah, it wasn't even up-to-date version of UE4.
Starting point is 01:46:04 They were just like, yeah, this is the version it works in. If I change the version, something will break. I'm not going to UE5. I'm not going to use any of the UE5 features. There is literally no reason to do so. Yeah. There was one point where Socially Distant was in UE5. Okay.
Starting point is 01:46:22 Great. The performance was not great. It looked great. The build size wasn't great. But I do know Unreal, and he's not wrong, even with a simple hacking game, because I've been developing hacking games for a lot longer than Sohli.
Starting point is 01:46:39 None of them succeeded or came out, but one of them wasn't Unreal, and it was Unreal 4. And every time I updated, even minor engine updates, some weird thing would break with the in-game terminal. And sometimes it'd be a compile error, sometimes things would just stop rendering and I wouldn't know why. There was one weird change to how Slate works, which is the UI renderer in Unreal, change to how Slate works, which is the UI renderer in Unreal, that broke between, I believe, 4.22 and 4.23. I had to fundamentally rewrite my code. That was great. It compiled,
Starting point is 01:47:16 it just didn't work because they deprecated an API and stubbed it out. TLDR, unless your engine you're using is not supporting an operating system you want to use, if it doesn't have a feature that you want, there's probably not a reason to upgrade. Yep. If it ain't broke, don't upgrade it is basically the industry standard with Game Inventions. As an example, I believe the latest Final Fantasy VII is still a UE4 game. If I remember correctly. FS7, Remake. Because I know the first part was...
Starting point is 01:48:00 Part 2. Is it UE4 still? I could be wrong. Yeah, no, it's UE4 still. Yeah. And it came out this year. Or last year, sorry. I'm glad. I'm glad I never... I'm glad I switched away from Unreal 5, and the reason I did is because when I switched to Linux, you still have to compile Unreal for Linux. Ha! And when I did, text rendering was so broken that I could not read the dialog box to tell me how to set up everything and get it working. It was completely blurred out, couldn't read it.
Starting point is 01:48:45 Oh my god. So Unreal's a bit of a mess right now. It used to be great, but like, what happened? Oh, that's fun. That's real fun. Video games. Video game development. Yeah. Angels. They're great. They're great. Just, uh, just, uh, write in OpenGL by itself.
Starting point is 01:49:14 Don't even use a library. Just make plain and openGL calls. That's your solution. I don't even bother if Vulkan, hence the story you don't need the performance gains you get from it. And you won't get them unless you're a really good graphics programmer, which I am not. Mmhmm. Yeah, well, look, if it works, it works. Uh, yeah, pretty much fine. I guess there's like one more thing we can probably talk about. Um, oh, actually we did talk a little bit ago about Cosmic and
Starting point is 01:49:48 uh what what is what is your current like thoughts on it? I know that you're waiting sort of for the screen, um not screen, um zoom, waiting for the zoom which is supposed to be alpha 6, alpha 7, something like that, but have you had like have you tried to play with it as it is and just you know probably not have much luck with it? So I physically can't use Cosmic right now without Zoom. It's not possible. Sure. So I could play with it in a virtual machine but like that's not why I use desktop environments. I don't use them to play with them. I use them to use my computer. So I don't want to spin up a VM and test it if it's not going to work on bare metal for me. So I haven't actually touched Cosmic, but I have seen the UI, and what I will say is I like it,
Starting point is 01:50:35 and I'm redesigning Socially Distant to look a little bit more like it. So I do like where they're going with the user interface. Of course, I've only seen vague screenshots and videos of it. So like I know vaguely what the window decorations look like, but I don't know what it's like to actually use it. I don't know where the bugs are. I don't know how fluid it is, but I like the look of it. And I like the look of the dark theme. And so so far it looks good. I don't have a lot of experience with it yet. Well, since we're talking about cosmic zoom, that how do you, how do you want
Starting point is 01:51:17 the zoom to work because people are going to design, there is going to be zoom of some sort and considering that a lot of the design choices they've made have been very inspired by Gnome, um, I will see how that ends up going. But what do you- So I have experience with Gnome Zoom. Yeah, what do you want from the Zoom? I want it to be like K-Win, um, because I'm a little biased there because I'm the one who fixed K-Win Zoom. And the reason I say that is because I have dual monitors. I don't use dual monitors the way that most people use dual monitors. I use them just so that I have peripheral vision when I'm reading. I can use an Alt or Wide for that, but I also do sometimes use
Starting point is 01:52:06 dual monitors as you would use dual monitors, so you know, it's nice to have. And the problem with dual monitors and Zoom is nobody except for, I'd argue, Kwin gets it right. So Windows, it works mostly fine, but there's a few bugs with edge detection, with detecting that you're pushing up against a monitor edge and panning the zoom area. It's usable, but usable to the point where I didn't notice the bugs until I started looking for them. So Windows is mostly okay, but KDE on Linux is the best, because you have the configuration of how you want to use the mouse while zoomed in.
Starting point is 01:52:54 Some people prefer having it stuck in the center of the screen. I've talked to other blind people with the same condition that I have, and for them it's to make the mouse cursor easy to keep on screen. It's in the center of their screen. Their vision is a lot worse than mine. So that makes sense for them. But for me, that's disorienting and nauseating. So for me, I need the ability to go in and have it in push mode.
Starting point is 01:53:19 Yeah. What does KDE call the one where it's centered? Is that like follow mouse, something like that? The default is proportional. That's the one where the zoom area moves in proportion with the mouse. So if the mouse moves a pixel, the zoom area moves a pixel. Right. There's also the centered mode, which is what I was describing. That's not the default, but that's where it keeps it in the center of your workspace. And only if you start bumping up against the edge of the workspace doesn't fall back to report handle movement.
Starting point is 01:53:51 And then there's the push mode where on a single monitor, if you push up against the top edge, it moves up. If you push toward the left, it moves to the left. That's how I like it. But I need that to work for dual monitors or for three monitors or for one monitor that's arranged weirdly. And right now, KDE is the best desktop for that. It's not perfect.
Starting point is 01:54:15 You can still kind of escape into the void. If you, if you move your mouse to the top left corner of one of your outer displays and then zoom in, you'll start to see the void and there's a zoom limit now so you can't get too far into it and if you move the mouse cursor around you'll get back into reality and there are certain arrangements that do break it or at least did when I merged it or when it got merged. But for the most part, if you have a standard monitor layout, like maybe you have two monitors side by side perfectly aligned, it'll work fine. If they're slightly misaligned, like I had, it'll work fine because that's what the merge request did.
Starting point is 01:55:00 I really just want Cosmic to do that. Honestly, just steal the KWin code for lack of a better phrase. Because it works fine and it's accessibility. It's not the type of thing where you can really make assumptions. You need as many options as possible. They need to be accessible. You need different people because people do have different preferences on how they need their mouse to work. And I say need, because this is again accessibility, it's not like light versus dark where dark looks cool and light doesn't.
Starting point is 01:55:37 We actually need these things to work the way that they do. So right now KDE does that the best, and GNOME, when you zoom in on multiple monitors with push mode, it breaks butter completely. Like rendering glitches happen within seconds, it's not usable. And it hasn't been usable for the better part of 15 years. So yeah, that's something I really hope that that someone looks into that. I don't have experience with the GNOME code base. I'm sure someone would be willing to help me learn my way around, but I'm a bit scared and I've got other things I need to do and KDE already worked. So I just hope that that same bug doesn't make it into cosmic. I doubt that it will, but you never know. Because again, nobody really gets zoom right on Linux. KDE is the closest we have to correct and it doesn't, it's not perfect. There are still monitor arrangements that break, and there's still bugs. So yeah, that's where I'm at.
Starting point is 01:56:49 All I really want is to be able to have another desktop environment that I can use other than KDE. KDE is great, but I want choice. If KDE for whatever reason breaks and I don't have a usable system with KDE, I'd want to be able to swap over to Cosmic and have a usable system. But right now there's no other desktop I can use. Unless I want to use Compiz. And nobody wants to use Compiz nowadays. One of the things I noticed with- Except for the two people that do.
Starting point is 01:57:16 There is a surprising amount of people who really like it on Reddit. They're weird, I don't get them. One of the things I did spot that KDE has is the option to move the zoom area using, like, keybinding. Have you ever played around with that? I've done that on Windows, but, be honest, it's a lot slower to use than just flip the mouse in the direction I want to go. Right, right. Yeah, if you're gonna be clicking on stuff, your hand's probably on the mouse anyway. Yeah.
Starting point is 01:57:43 It's the same argument I have with like Vimbo hands. It's great if you don't have to use the mouse, but I have to use the mouse anyways, I'm supposed to type normally. Sure. Sure. Just wanted to just want to double check on that one. Um, we're closing in on the two hour mark. So I guess, um, when, when the site's working properly, where can people
Starting point is 01:58:09 find your stuff and if they want to go and support the project and all that, where can they go? Okay, so if you want to find out about Socially Distant, there's SociallyDistantGame.com. I promise it will be fixed before the podcast goes live. It should be, this isn't going up for like two weeks. I've got a few weeks. And if you want to support development, there's patreon.com, especially Zidic Lite. It's two bucks a month for, or name your price. And that money goes directly to paying for the beefy Hetzner box that hosts the source code, but also getting me coffee every now and then so I can continue to develop the game.
Starting point is 01:58:50 And you get monthly devlogs. There was the February one that- or the January- actually no, February. We're in February right now. Yeah. January one came out a few weeks ago to Patreon. I have to post it to everyone because it's out of early access. But I'm thinking of doing some sneak peek type stuff about career mode, which nobody has seen yet. And that's going to be Patreon exclusive. So if you want to access to that, that's a good way to support me. And then, I did say this last year, but I mean it this year. Play testing is about to start because I'm working on career mode. So if you want to help actually make the game run well, I need hardware to test it on. And I don't have a lot need hardware to test it on. And I don't have a lot of hardware to test it on. So it would be nice, but at the very least have a group of people who can test it on different desktop environments,
Starting point is 01:59:54 different graphics cards, stuff like that. Because I am developing the game engine, obviously, and you know, is important. So if you feel like helping out the game with the game that way, there will be info on the game's website about how to apply form you've got to fill out. And then I look at it eventually and reach out and then you get a Steam key and you can play the game. Awesome. And then I'll leave what breaks. Anything else you want to mention or is that pretty much it? The last thing I want to mention is it has been almost two years since my eye treatment and
Starting point is 02:00:26 things are going great. Wow okay well that's good. Yeah. Awesome um I guess for me main channel is Brody Robertson. I do Linux videos there six-ish days a week um uh I've got the gaming channel Umm... Uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuhhhhhuh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh-uh fantasy which is the best kind of Final Fantasy. I've got the React channel VeridiaOpens from React which I upload clips to. If you're watching the video version of this you can find the audio version on any podcast platform. Tech over T is on Spotify. Spotify also has video which is neat as well and I've got the video version of this yeah that's on YouTube. take a tea, search that. I don't know why I'm forgetting my outro today. I've done this like 250 times already. Um... I'll give the final word. What do you want to say? Anyone sign us off?
Starting point is 02:01:33 Uh... Well, I don't actually know. Um... Last time I think I said we got a stomp of the gompa, but that's not gonna work here. Um... Uh... I have been known to come up with random phrases that are... words spelled out. The one I came up with with my friend Ash was, uh, using bottles under nicks turns ugly, and that spells ubuntu. So that's how I'm gonna end it. Sure.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.