Wave

Category - Tutorial

The Quest for Ethical AI: Actually saving time with generated commit message bodies

Mia Rose Winter 11/11/2025

The Total Hatred For AI in Tech If you have existed on the planet earth in the last 36 months you have been undoubtedly been exposed to a slew of AI tools and integrations, half of which are questionably executed and the other half is questionable if it even is AI. With all of that, coming right off of the crypto boom especially the tech-savvy have immediately questioned this hype and over the months grew to hate it with a fury. I do not except myself from that, I was there. For the first months what I previously followed as promising new tech got turned on its head overnight by capitalist pieces of shit at openAI and friends and completely soured my mood for anything that has proclaimed itself AI, and I myself got caught in the rumor hate mill: AI uses 200 quadrillion times more power than a google search, AI uses oceans of water, we need to double data centers because of AI, AI will kill us all, AI stolen my bicycle. As I do not like blindly hating and I also started to distrust how

AITutorial

If it has Text, it is Pain

Mia Rose Winter 5/1/2024

I've been meaning to write tests for Wave for a while. Honestly, in my 12 years of dev I never actually wrote one outside of the odd academic homework assignment, so I had no idea how to approach it. After a couple of videos and video presentations about general unit tests, TDD and stuff, I actually got intrigued, and with a bug discovered just today by a coworker in Wave I was baffled by I thought, okay, let's dissect this little Käfer. Prerequisites: What does Wave do here actually If you have not authored an article on Wave before, let me give you some background. When you want to load a specific article in the article view, there are three methods, two actively used and one historical, to find it. The first and most direct, the “permalink” if you will, is going to /article/{id}, with the UUIDv4 ID of the article. This is used for stuff like the article editor and during the draft and review process when the other method doesn't work, and maybe one day there will be a &l

ITTutorialInfodumpC#

Making your first misskey plugin

Leah 4/1/2024

Do you want to make a plugin for all the various key software that exist out there? Well in this blog I will be writing about making a basic plugin and explaining the basics of AIscript. Later I may make a follow-up post on more advanced stuff related to misskey plugins, widgets, and plays development. The basics of AIscript AIscript is a weird very specific language that won't compile if a space is missing or something like that. Usually in other languages, this is not an issue, but here you better keep all your code clean and organized because otherwise it won't compile. This has stumped me many times before so make sure you pay attention to this. I'm not going to teach the very basic syntax since that can be viewed here on github in English. Instead, I'll talk about the things it doesn't go over. This basic program below won't run let a=10 if a==10{ print(a) } The reason for this is that there is not a space between the 10 and the opening squiggly bracket. Keep in mind it doesn

ModdingTutorial

Migrating PVs in Kubernetes

4censord 3/10/2024

Migrating PVs in Kubernetes In kubernetes, data storage is provided by so called persistent volumes. Kubernetes itself contains a bunch of different options out of the box, notably HostPath and NFS. HostPath has the advantage of being incredibly simple. You just take a directory from your host, and make it available in a pod. But, because it is host specific, that does not work very well if you have more than one host and want to be able to tolerate host failures. NFS has the advantage of being standard, to the extend that every NAS or storage solution from the last 20 years supports it. But, perfomance often isn't great. And, unless you are using NFSv4, NFS has some challenges surrounding things like file locking. But those arent important for anything exept rare cases like databases… Kubernetes supports having multiple types of PVs, and groups them together in StorageClasses. When requesting a PV from kubernetes (using a pvc), you can specify which storageclass you want. If yo

ITTutorial

Continuing on an HTTP-Server in rust

4censord 3/3/2024

This post is basically a direct continuation of the recent Computerphile Video Coding a Web Server in 25 Lines - Computerphile The video explains the absolute basics of the HTTP protocol, and implements a very basic HTTP-server in rust. This blog-post will go into more detail about some HTTP headers, and some other HTTP request types, implementing some of them in the process. At the end of the video, our source-code looks like this: use std::io::BufRead; use std::io::Write; fn main() { let listener = std::net::TcpListener::bind("127.0.0.1:8081").unwrap(); for mut stream in listener.incoming().flatten() { let mut reader = std::io::BufReader::new(&mut stream); let mut line = String::new(); reader.read_line(&mut line).unwrap(); match line.trim().split(' ').collect::<Vec<_>>().as_slice() { ["GET", resource, "HTTP/1.1"] => { loop { let mut line = St

ITTutorial

Depth Ordering in GameMaker 2

Mia Rose Winter 2/29/2024

At some point during your usage of GameMaker 2 you will very likely encounter a very classical issue in game development, how do I ensure my sprites are drawn in the right order? Anything 2D with movement will still have a sense of hierarchy, some things are in front of others, but how do you do that with GameMaker? When you will look into your trusty search engine, you will most likely find either this blog about using a technique called z-tilting, and if the following doesn't satisfy you, definitely check it out, or you may find the YouTube channel FriendlyCosmonaut with this tutorial video, which is a bit older but still teaches some valid techniques. As someone with more background in different engines and other areas of software techniques, I want to elaborate on some of my strategies to solve this issue, including the one I used in my student project game fairy-strategy, a turn based 2D strategy game. The classic depth = -y The oldest and easiest way to get this working. Things l

Game DevelopmentTutorial

Wave on Kubernetes

4censord 2/25/2024

Kubernetes is an increasingly more popular deployment option for services. Originally developed by Google0, Kubernetes provides functionality for multi host containerized deployment of applications. Today, i will take a look at deploying wave onto my Kubernetes.[1] This does not explain how to interact with Kubernetes Wave depends on some other services to be fully functional, namely A PostgreSQL server for persistent data storage A redis server for session storage and synchronization A reverse proxy for TLS termination An SMTP server for sending email. Dependencies Because we want to focus on running wave, let's just get the other stuff out of the way. All our stuff will be happening in the wave-dev namespace, so let's create that first: kubectl create namespace wave-dev PostgreSQL Deployed via helm from the bitnami/postgresql chart using the following values: # postgres.yaml --- auth: username: "wave" password: "wavepw12345" database: "wave" us

ITTutorial

Effectively Serving a Large Amount of Images

Mia Rose Winter 2/18/2024

When you build an app, especially a web app, you will inevitably think about how to serve the user your images. In a static setting, that's easy, put them into a folder and add a relative link to it in your page, maybe with an async flag if you are fancy, done, the browser does the rest. But in a dynamic setting, you don't have that luxury, you usually want users to upload images… and now you need to decide how those images get to your server, and later, get to every visitor needing it. Image processing first, some general advice. When people can upload images, you first have to ensure their security. Never just put their upload anywhere reachable by outsiders, it may be a JPEG with Exif data containing the location the image was shot, the people in it and that's a big privacy no-no. You also need to protect your other users, whatever just got uploaded may, somehow, alter the behavior of your page or even execute malicious code (hello GitHub). Lastly, there is also the aspect of

ITTutorial

Compose 5000 lines deep, or how to Containerize responsibly

Mia Rose Winter 1/27/2024

If you are like me, and you have just learned how docker and docker compose worked, you will probably head out to rebuild your own little server, or start one anew, watch some tutorials, look for some tools, and end up with a little compose file to start your infrastructure. It probably has a reverse proxy like nginx, traefik or Caddy, a little static website and maybe something for fun, a little self made project, a node app, a lil' blazor app, maybe just some open source link shortener you found (obligatory Just Short It! mention). A total of a hundred lines, not bad, manageable. But it doesn't stay like that, does it? Rise of the stacks Now, you may get interested in some more advanced tech. Like, let's say, a blogging engine (like Wave), but that doesn't just take a container for a website, it also comes with a postgres database, a redis cache, maybe even more (at point of writing, Wave is still in alpha), so there goes another block in your compose, another 80 lines or so, now we

ITTutorial

Setting up a new Linux Server

Mia Rose Winter 11/22/2023

Every goddamn time I create a new VPS or something and install ubuntu I have to google together all the little steps and commands I need to run to give it a baseline of security, I am writing this one down now. Creating a custom user Script kiddies love pinging random servers with root and see where they can get in, I once ordered a new server but didn't configure it until the next day, and when I logged in with root it told me there had been 900 logging attempts (over night!). So yea, let's create our own account: Add a new user $ sudo useradd -m -G sudo rose -m is to also create a home directory for that user (we put our ssh key there), -G sudo adds them to the sudoers group Set up a password: $ sudo passwd rose now open another terminal, ssh with that new user into the server and see if you can run commands with sudo ls or something. When you have valiated your newly created user works and can use sudo, you can exit that root-user terminal. Transfer SSH keys You always wanna use

ITTutorial
Powered by Wave