< Index

June 2026 Site and Personal Update

Hello, people of the interwebs. It's been a little bit since I've posted here and I've changed around a fair bit of stuff from underneath the website. I've also had some projects going of my own, but I'll cover those at the end.

Site updates

First of all, my server, technically named vps1, was completely reinstalled in the past few days. It was originally installed in 2022 with Debian 11 and upgraded from there to the latest version. I don't particularly like Debian and I pretty much only used it to keep my email server from updating, because I set up my email server with Luke Smith's emailwiz years ago and I have no idea how that tool set up the system, so I was terrified of changing it.

The funny thing about this website is that this is yet another Luke Smith suggestion that failed on me over the years. Like how I had to search high and low for a DNS provider after the one suggested on landchad.net was hacked, I used emailwiz to set up my email server that I've used this entire time. I don't think emailwiz is software that anyone should use, because it has no clear upgrade path or guidance besides just doing a bunch of crap for you and installing its own packages you don't even know how to configure or that exist. It's really bad! And seeing that Luke has disappeared from the internet now, I don't see it getting patches or support any time soon.

Which leads to the second point, which is that my email server is gone. An update did eventually come to Debian which broke all of the email configuration files, and I had no idea how to fix it (though I did try). So I'm just using my random AOL email from the stone age for the website email now. I'm not opposed to setting up an email server again, but I currently don't really care and I only ever received a single email from a reader of the site, so it was a big waste of time. I appreciate you though, emailer! :)

Since email wasn't a concern anymore, I switched the server to Fedora 44. This gets up to date packages and kernel support as well as having SELinux built in, which makes pushing updates slightly harder but is perfect for a static site like this that doesn't need a whole lot of configuration past initial setup. It will take time to see if this is the right approach, but so far things seem okay.

I have also made the site more modular. Since right now I'm only serving a static site with no other major functionality on the server, I can make the whole site a libre git repository on Codeberg since what's the difference anyways since it's just raw html files on the open internet regardless. This makes it really easy to push changes from any of my computers to a central git repository, and then later pull my changes either directly on the server or push from one of my computers that has ssh access and rsync. This means that it will be easier for me to manage and add changes than it was before. (I used to use bespoke POSIX shell scripts on both the server and the local machine to run rsync/mv/chown/etc. commands.)

The only thing so far I haven't been able to get working yet is reverse DNS, but that's a service that might take awhile to be detected correctly and I can't remember what I had to do last time to get it working. But that's not a huge deal for the site since I've had the same static IPv4 and IPv6 addresses and domain names for 4 years now that anyone can check.

Donation links and external links have been removed. I don't really have much of an online presence anymore and what's left is just what I can't remove or what actually helps me like the git repositories. I'm done with the whole social media thing in general, including YouTube and alternative sites like Mastodon. I just don't care anymore, and all I got from it was occasionally they made me really upset, which I just found unproductive and unnecessary in my life. To date I have never received a donation, and so there's actually no point anymore. I also disavowed cryptocurrencies for the most part awhile ago, which you can read if you wish.

Personal stuff

I just graduated university. I think I'm happy about that? I don't think I learned much from lectures at all but I did a ton of reading on the side on various topics and I think I've come away net positive from the whole thing.

I rewrote a project I had written years ago called xpr from its original C to a new version, exempla, in Rust. It was mostly an experiment because I needed something new to motivate me to keep working on it, and trying out Rust was legitimately interesting to me. A lot of people have irrational hatred (fear?) of Rust, and I'm not the person to take that at face value, so I've been using it a lot lately. And ultimately, I'm really happy!

Rust is really good. I feel like my potential as a programmer is fully unlocked any time I use it. The ability to nest brackets inside of other brackets to create temporary scopes that assign a bunch of variables, use them for one calculation or function call and assign to a temporary variable, then just return a value as their result is fascinatingly weird and I just can't stop thinking about it.

Check out the following example:

loop
{
    let curr_option: String = match getopt.getopt()
    {
        None =>
        {
            break;
        },
        Some(inner_char) => inner_char,
    };
    match curr_option.as_str()
    {
        "h" =>
        {
            return print_help();
        },
        ...
        _ =>
        {
            return unknown_option();
        },
    };
};

I'm the kind of sloppy Rust user where I'm just abusing the hell out of returning by leaving semicolons off lines. I like how I can interrupt a loop even within an assignment, and otherwise return some value, and it's very transparent that it's happening unlike languages with try/catch.

Anyways, in the process of writing exempla, I wrote a few libraries that you can use in Rust under the AGPL-3.0-or-later license. For instance, I have exutf8g, a UTF-8 parser that takes a raw vector of bytes and splits it into all of its individual graphemes. This should theoretically work with any language on any system with Unicode 17 support. It requires a codepoint splitter, utf8codep, in order to function, but it's vendored with exutf8g if you just want to see the source code.

I have another library, which is being used in the code snippet above, called rustgetopt that functions in a similar spirit to the POSIX getopt header but without any global state.

In the process of writing xpr years ago I wrote a lot of tests in a really crappy test script, and after being fed up with it when rewriting xpr to be exempla, I wrote exempla (and technically any POSIX system) a test suite called exempla-test-suite that can be used to test a bunch of utilities. It's meant to focus on exempla's results primarily, as it's the targeted system, but it only gives a FAIL test result to a test that gives completely invalid output.

Besides exempla, which is best looked at as a conglomerate of separate programs (and thus separate files), all the other programs and libraries are written in single files. There's a lot of stuff for licensing reasons or documentation reasons in the git repositories, as well as build scripts and Cargo configuration for people that want to download it automatically, but the files include their own license statement in their source code in case anyone got confused. This works perfectly well in my opinion for all of them, except for exutf8g because of its included Unicode codepoint ranges at the end of the file. The only file that matters in each of the libraries' files is the src/lib.rs file, or for exempla-test-suite, src/main.rs. The code is meant to be relatively fast, but I might have erred on the side of safety a few times at the compromise of speed. I am using safe Rust, after all. If a library or program depends on other libraries, they can be found in the vendor/ repository in full when needed or when without an internet connection with only one standalone library or executable's git repository available.

I don't really have anything else to put here, but I'm hoping if Codeberg works out (so far it's very nice), and the new server infrastructure is okay, then I will keep hosting the website and posting occasional changes indefinitely. Worst case, I also archive my own website on the Wayback Machine at archive.org occasionally, and the git repository and web hosting are now two separate locations which makes everything easier and more reliably accessible.

June 4, 2026