We're back

I've been thinking recently that my mapping of changes to adaptabilities is a bit wonky. That is, I have a really negative initial reaction to changes that would usually be considered neutral or positive (e.g. every time Discord has overhauled its UI, I've had a one-week period of dang near allergic reaction to it) and I don't seem to take big changes seriously enough (e.g. moving between houses and student residences up to six times a year).

I've also been thinking of why that might be. If I were to draw up huge tables listing changes that I am and am not adaptable/resistant to, it might reveal a pattern, yes. And maybe that's something I'll post about having done at a later date.

All that to say, I bid a surprisingly difficult farewell to the old Kuixz.github.io, and say hello to Eleventy.

And that has made all the difference

My personal website has a new look! A greyscale, static, standardized look, maybe, but a functional, maintainable, non-hacky one. (The greyscale-ness was on purpose anyhow.)

It should come as no surprise that I love getting my hands dirty, learning by experimentation, bashing things out. Before I learned about imgbrd-grabber I wrote my own Indigo, a BS4-powered image board downloader that will likely never get its own page on this website for obvious reasons.

Maybe the shell-adjacent calling system I built for it will get its own page eventually, though.

class CommandLine:
  # ...
  def call(self, fname: str, *args) -> tuple[SuccessCode, Optional[Exception]]:
    accepts = self.accepts(fname, *args)
    f = self.bound_functions[fname]
    match accepts:
      case False:
        return SuccessCode.UNDEFINED, None
      case AcceptingState.ACCEPTS:
        try:
          return f(*args)
        except Exception as e:
          return SuccessCode.EXCEPTION, e
      case AcceptingState.MISMATCH:
        print(
          f'Type mismatch: {f.name} has type {f.signature()} but was given {", ".join([name_of_type(type(x)) for x in args])}'
        )
      case AcceptingState.UNDERDETERMINED:
        print(
          f"Not enough arguments passed to {f.name} (expected {len(f.parameters)})"
        )
      # ...
  # ...

Similarly, when I first decided to build a personal website, I gave it a try without using any frameworks or libraries. Which, was really fun! Creating the WheelBarrel's illusion of being 3D with z-indices and making it spin performantly with my first foray into CSS transforms, in particular, were the kind of small wins that motivate me to keep going in blind whenever I'm new to something.

But, when the destination starts taking precedence over the journey, roadmaps start getting drawn up, and it comes time to do things properly, more often than not, the beaten path is is beaten for a reason.

Eleventy

The first step in getting into SSG (static site generation) was to, by taking note of, and inspiration from, some already well-established blogs, discard my mental association of the word "blog" with cyan backgrounds, Impact font, Google Sites, "My Awesome Blog!", and idle, weightless chatter.

I then fell into the trap of trying to build something using a language I had never learned before before finding Eleventy, at which point this blog just kind of fell out of the woodworks.

Mostly.

There's another post cooking about the unorthodox, home-brewed tag system this blog uses. Suffice to say, whatever comes out-of-the-box can almost always be configured, built on, and made more satisfying.

In the meantime, why not give the dark switch in the upper right corner a toggle (provided you've got JS enabled)? My sincere thanks goes to the place I interned at last year, Oursky, for teaching me the "root full of color variables" pattern.

Kestrels

The working title of this new site was "Quixz' Pigeonhole". Why is it now a kestrelhole?

I initially picked kestrels just for the alliteration, but there's a lot of things that happen to line up correctly. The kestrel shares its size and syllable count with the pigeon and shares a continent with me. Apparently, kestrels and pigeons also have a history of beefing, and, ceterus paribus, I like supporting the underbirds. Also, "kestrel" being harder to enunciate than "pigeon" slows down the rhythm of the site's title from 1-2-3&4 to 1-2-3-4-5, and I love music written in 5s.

That said, quixzs-kestrelhole.com is a bit unwieldy, so I might try to secure quixzs.space instead.

Welcome

The object of this website hasn't changed. It will continue to chronicle my projects, experiences, life, loves, laughs, thoughts, and things. Just that it now incorporates one of humanity's greatest weapons in the fight against chaos.

Standards.

There is a time and place for striking out on your own. Gaining an intuition for when to forge a new path is the kind of thing I expect to take a lifetime. I want this website to serve as a milestone on that learning journey. "In this year, Quixz learned to distinguish independence from individuality". How about that?

Kestrels welcome.