Profile for dmoonfire

Display name
D. Moonfire
Username
@[email protected]

About dmoonfire

Fields

Prnouns
*/*, he/him
Sci-Fi
soon
Pronouncation
/ˈdɪlən.muːnˈfaɪ.ɚ/

Bio

A large repository of useless knowledge and consummate polymath. I love learning new skills and knowledge and try to apply them throughout my life.

Stats

Joined
Posts
5267
Followed by
409
Following
269

Pinned posts

jump to recent

Well, probably should do a self-promo post since it's been... half a year or so.

Hi, I'm D. Moonfire (https://d.moonfire.us/), I mostly write steampunk and fantasy. 97% of those words are free to read on my website, https://fedran.com/ with the index of stories at https://fedran.com/sources/. No Patreon, no subscriber, no fees (well, I have a Patreon, Librepay, and Ko-Fi, but you get nothing special for them, what you read is what you get). Really, the only payment I crave is to someone say they like it, ask questions about stories, or just let me know I touched their lives.

For a while I was belting out a chapter or story a week and did so for three hundred consecutive weeks (I'm proud of following cadences). I did burn out for a little but I'm getting back into it, but that is why "about" 907,205 words can be found on the site for your enjoyment. All of the stories can be read online, download in EPUB and PDF format. I even have an OPDS feed if you want to add my library to your ebook reader.

Most of my stories are "lightly edited" (I don't ask for money, I can't pay editors), but I do have a couple professionally polished ones on the main website.

For a fantasy world, I didn't want it to be all action or drama, so there are slices of life, forensic mages, people struggling with the trials of just being human with topics ranging from saving one's family from death to dealing with jealousy in an open marriage. There are also spicy stories, which are hopefully all properly tagged.

My stories are also overlapping. The story about a talented swinger being rescued by a middle-aged lesbian who can sharpen knives with a touch bumps against the story about a young violin player trying to avenge a murder which intersects with a story about a young man trying to take a trip across the country in his new fangled car.

If you have a topic you want, I'll be glad to tell you what I have or what might touch those topics. Some of them will get me to write it, but I just like to burble about the joy of world-building.

#Fantasy #Steampunk #FreeToRead #SelfPromo

Recent posts

Nix code, oops (+)
Toggle visibility

In an essence to make my configuration easier to move services on my home lab, I have a network.nix file that contains information about each server and the virtual services on each one.

  tumef = {
    name = "tumef";
    host = "tumef.home";
    location = "inwood";
    ipv4 = "${ipv4-prefix}.41";
    ipv6 = "${ipv6-prefix}::28";

    serviceHosts = [
      "foundryvtt.home"
      "home.home"
     #"pihole.home"
      "postgres.home"
    ];
  };

That makes it easier where I can include every service (like home.home) into a "common" services file on each home lab server.

{ ... }:
{
  imports = [
    ./foundryvtt.nix
    ./home.nix
    ./pihole.nix
    ./postgres/default.nix
  ];
}

Then at the beginning of each service file, I have a check.

inputs@{ pkgs, config, ... }:
let
  networks = import ../../../../networks.nix (inputs);
  host = "pihole.home";
  enable = (builtins.elem host networks."${config.networking.hostName}".serviceHosts);
  port = 16007;
in
{
  # Stuff
}

So, that leads into the point that I carefully set up enable to only be true on the cost. But, apparently, I didn't actually use enable, so I had this:

  services.pihole-ftl = {
    enable = true;

Which means, I was setting up pihole on every single homelab server instead of being disabled on all of them.

Oops.

The fix was services.pihole-ftl.enable = enable;.

#NixOS

Ah, useful new tidbit. Add an entry in /etc/hosts for cache.nixos.org before messing with the homelab's DNS server. Makes it a lot easier to push the "oops" fixes.

Since I have a Sleep Big Brother (my CPAP mask) and I have an annual average of 5h33m sleep at night.

And a 99.8% nightly usage of big brother throughout the year.

I've been encouraged to sleep more.

Had a lot of errands so no programming time for me tonight. None tomorrow because of writing group, but that's okay.

Partner had a dental surgery so I'm spending the day in bed next to them while they drift in and out of sleep. Since the Framework 16 keyboard isn't large enough for my hands, I can't really write or anything so I did a bit of clean up on my NixOS infrastructure flake. Mostly removing a few years of cruft.

I'm also going to try switching from AdGuardHome back to PiHole because AdGuard started disabling most of my entries from pages 2-5 whenever that server reboots. Which is annoying because it means Plex and Jellyfin aren't automatically available without me going in and clicking on it. Which is not good for the family who just wants things to work. PiHole was previously pretty solid and had a cute interface, so I'm going to see if that works again.

However... I'm also in the middle of downloading the last 1.1 TB from the SeaweedFS cluster onto the GlusterFS. At this point, I'm annoyed with the FUSE mount that I'm just using wget -r from the SeaweedFS's file web server which is working Good Enough for now. It will takes about a day to finish up; I'm hoping most of the files are good but I'm still going to run various test programs on the archives to see if I should blow them away since wget doesn't have a "delete file on errors".

Fortunately a little ((wget -r https://...;echo;echo done;date) >& /tmp/log.txt &)& solves the problem of my laptop disconnecting and I'll just have to tail the file until it's done.

I also probably shouldn't screw with the DNS server in the middle of that.

I just realized. One of my world building efforts was the deck of cards the desert folks use to entertain themselves. It was a deck of 65 cards (8 numbers of 8 suits) and I was going to write a book called Sixty-Four Games for Sixty-Five Cards which has a bunch of solitaire and group play for that deck.

It occurred to me, if you are wandering around the long night in a desert, having an RPG that used the same deck of cards would be an awesome idea. Well, I might be writing a small RPG in the moderate future.

https://polymaths.social/@rl_dane/statuses/01KEYN2P51M10TGJCMTSKDAX29

I'm waiting in a Teams meeting for customers to join in and I'm having to fight the urge to talk about how they are taking the hobbits to Isengard because they have an AI recorder already setup.

Feeling really "off" today, but I did get a little Leicmin work done. Mostly figuring out how test some of the functionality that requires a database when I don't want to wrangle Rust's tests.

Answer? Use the CLI I'm using the develop stuff (aka, CDD or CLI Driven Development).

In this case, I'm using bats-core because it's a NixOS package and my first attempt (bashunit) didn't give me useful output on test failure. bats on the other hand will give me all the stderr and stdout when a test fails, which makes it much easier to debug. And since I can bring in Apache here (the smaller web serving packages with htpasswd don't have a verify function), I can set up a group, export the .htpasswd and verify it works.

Which is kind of cool and encouraging.

The program conform closing a PR to allow a custom --config option is annoying. Apparently there is only one true location for configurations, in the repo root. :(

I really should have gone to bed hours ago, but I got fixated and needed to finish writing encrypted passwords to the database and retrieving them. I love seeing hashed values and more so that the pepper for the values comes from a configuration file.

I was six minutes late to my vision appointment so they won't see me. Sadly, we've been waiting more than six minutes after we arrived for Child.0 to see the doctor.

One of those days where my code review comments was just screenshots of the file header where it says "generated file, do not edit".

In the various circles I'm in, there is a general push toward BDD (behavior) testing. I think the reasoning is to allow the refactoring of the internals without worrying about tests breaking.

But there is something satisfying about a slew of unit tests around one small area of code. That ability to say, "no matter how much on fire, I know this code right here is working exactly like it is supposed to".

Writing mostly BDD tests feels like testing the ships verses icebergs. Yeah, when standing on prow of the ship, you can safely say it is heading straight toward that iceberg but that is depending on megagrams worth of machinery underneath the deck is working correctly. I'd rather go room to room and make sure each piece is doing their little bit toward the greater good.

(... the greater good.)

I also don't mind refactoring when I have to rip out an entire bit also. That is one major weakness in Rust right now, at least with the tools I'm working with, but it is steady, satisfying work to get everything green again.

It was a fairly good weekend, despite being a "mostly" single parent one.

I had lots of chances to fun code on Leicmin. Last night, I managed to get about 90% done with the hashing with pepper system done. I just want to put some unit tests around the functionality of two sections, extract some functions to make it easier to read, and then I can move over to the encrypted strings.

Once that is done, I can implement account passwords (kind of important for front-end work) and and password recovery tokens (which I'm going to allow you to generate, copy once, and then never see again because I'm going to hash those in the database).

The only drawback is that I'm migrating from the failed SeaweedFS cluster to the new GlusterFS one. The remaining media files are so corrupted that it might be easier to re-rip them from the DVDs and see if the offline storage is doing well for the photography files. My dad's old archives are pretty much toast, I'll drag out the SD cards but it might be something that is just going to get lost.

My mother in law cleaned the kitchen on Friday and I have spent hours trying to get the rest of the family to stop messing it up! :) Naturally, Child.0 wanted to make pomegranate juice (he loves that fruit juicer he saw from Jordan the Stallion's YouTube channel) and splattered staining red liquid on everything. Child.1 slopped in the orange syrup for the SodaStream. It's like they see an empty count and want to puddle something bright red and orange on it instinctively.