Depending on whether this blog post gets done first or if the AMA box gets done first, the title may be accurate or entirely wrong.
I've been working on adding an Ask Me Anything (AMA) form to this website for the past 2 weeks, and it's been a hell of a ride. A ride that felt like my ass has been getting stabbed by rocks small enough to penetrate the skin, but not big enough to be visible. Like a splinter, they keep poking at you, but you don't know where the damn thing is.
The design of this AMA box is quite simple...
Now, I know how to do most of this stuff. I'm very familiar with C#, as it's my main language. I'm learning SQL, but SQLite makes it easy to work with. HTML is my passion when I'm not wrestling with the CSS. But JavaScript... well you know my opinion on the bastard.
Javascript is that thorn, that splinter, that tiny knife I can't dig out. Everything I do with APIs ends up turning into a painful exercise of doing JavaScript. On top of that, CORS (Cross-Origin-Resource-Sharing) and the HTTP protocol have also come back to haunt me like they did on the original Twitch overlay project.
I'm not that experienced with the HTTP protocol, and I've never had to wrestle with CORS before, but for this project I had to. I only needed it to add cookies as a basic (if weak) anti-spam measure, but that one decision to use cookies for this has driven me to madness.
Trying to get cookies to be successfully stored is a pain in the ass, mainly because I've never had to touch the headers in a Http response/request before. It didn't take long to figure out that there's a specific header for setting a cookie's name and value, but getting that to work is a pain.
I'd normally go through the whole process to realise what I was doing wrong here, but I don't really want to type out a long ass novel just to give you the flaccid, unsatisfying end where I tell you that the way I was calling the API was causing JavaScript to eat the cookie I was trying to set, meaning I have to make JavaScript give me the cookie, which means it's now on the client end, which means it's not as hidden from the user, which means my head is currently throbbing as I write this out.
The AMA box is currently not working as of the time of writing (2:42 PM 1/28/2025), but it's close enough to working that I should be able to get it working within the next day or so.
I still have some work to do on this site that I've been putting off, namely getting the starrymic.xyz domain a HTTPS cert, and getting that backend C# code onto my server, but I'll get around to it as soon as I can.
So in the time between the original writing of this post and now, I've had to go through what I'm paying for and drop my DigitalOcean server since it was costing me more than I really wanted it to. $8/Month isn't much, but I've got a very tight budget for my projects and most of my money goes towards food and gas and college. Not to mention that the majority of the security features for the project had to be disabled to make parts of the API work, which just made me uneasy about letting the public have access to it.
Instead of going through this whole process, I've just decided to go the simple route and use Google Forms, which I'm not too happy about, but will overall be more secure and easier to manage on both the front and back end.
In the future, I will likely try this whole AMA project again with my own code, but for now, scope and budget should stay small so I'm not draining my own resources.
I don't know if I've already talked about this, but TooManyCrates-Godot is being put on indefinite hold for the time being. Working on a 3D game is quite hard for me since I'm not nearly as good at Blender as I used to be and making assets and figuring out how to make the gameplay work is a larger challenge than I thought it'd be. The scope of it was a lot larger than I thought and the codebase has become a spaghettified mess with most of the code wiring to other components in nonsensical ways.
The interaction system was probably the best example I could give of the spaghetti in that system. Interactions worked by putting an area around an object that had a script that only held a signal. The player would cast a ray when they hit the interact key, which would hit that area and send a signal out. What made this system work so damn weirdly was that the code for interacting wasn't on the interaction area itself, but rather the underlying triggerable object which just listened to the other object's collision signals to know when to trigger. It made it difficult to make a decent signal i/o system and the system had no expandability because there was no way to connect triggers to other objects than its parent.
I seem to have a knack for overscoping everything, even when I try to keep scope small. It's a problem of restraint for me. I enjoy making complicated systems where multiple small components come together to make some interesting gameplay, but it's a trap. A trap I keep falling into because I'm a sucker for making neat systems. One day I hope to make a game with a bunch of little systems that come together nicely, but for now I need to restrain myself so I can finish something in the first place.
Take care of yourself and each other. The world is a rough right now, so take care of those close to you. Help out in your local community where you can. Raise each other up and bring everyone together. Don't wait for helpers, become one of them.
and if you read this... Brush your teeth???