kivikakk.ee

keepsake: rouge

Over a decade ago, I wrote the programming language Rouge (wayback1) — a reimplementation of Clojure in Ruby, the language itself adapted for the specifics of its new home. I didn’t really know what I was doing, but it was a fun diversion.

To my surprise, some years later, I noticed a gist turn up, written in Rouge2. Wondering perhaps what else there might be, I sniffed around, and found …

screenshot of an e-book in japanese

screenshot of the same book further down; more code in this one

… a fucking book! Three pages of a Japanese e-book called A Delicious Introduction to Clojure are dedicated to a language I wrote. Source here for the curious3.

I periodically re-find and lose this thread again, so recording it once and for all here. I finally bought the actual e-book, too; seems like the least I can do.

  1. wish the CSS were preserved, or that monorepos were already in vogue and I still had the website source. iirc it was pretty! ↩

  2. and indeed, turns out that user has a couple more! ↩

  3. either clone the repo locally or log in to see past the root, you aren’t asked for anything beyond the OAuth dance, just want some representation that you’re not a scraper. ↩

Dx

Unless you pay for it, or it’s specifically designed to dehumanise you, you won’t get a diagnosis. There’ll just be something kinda wrong with you, but not in a legitimate way or anything. You’re probably imagining it. Have you tried yoga?

(This is written from the Australian perspective, where paying for general healthcare is not the norm, and likewise getting some company you pay to cover the more ridiculous bill of some other company that renders a health service is not contingent on perhaps some third party blessing you with a diagnosis that renders you eligible to claim such payments. I don’t know if that’s how it goes in the US but I imagine it may.)

To wit, here’s the list of diagnoses I actually have:

  • Autism. The assessment cost me around A$1000 (A$175 rebated) ca. 2022.
  • ADHD. Likewise the assessment was around A$1200 (A$255 rebated) ca. 2022; another A$900 (A$455 rebated) to get medication permits renewed in 2025.
  • Borderline personality disorder. This one cost me nothing apart from my usual psychiatrist session fees, and was covertly assigned! (You can read more about how that happens but woaaah pardner, read the notas de contenido first.)

Now, contrast this with the (already outdated!) list of medications I’ve ever been on. I guess I have had depression for decades of my life at a time. Anxiety of various forms, too; symptoms matching panic disorder for a year or so. Long COVID. Chronic insomnia. Heavy and persistent dissociative issues, though perhaps they fold into BPD. Likewise recurrent hypomania; or is it cyclothymia? PTSD; or is it cPTSD? I’ve met the “new clinical fibromyalgia diagnostic criteria” for about a year and a half by now, although as a diagnosis of exclusion (“3. You do not have a disorder that would otherwise explain the pain”), it’s funny because perhaps there are other, mutually exclusive diagnoses of exclusion that would match; namely hEDS, which I’m one or two (perhaps undiscovered!) signs off meeting.

But y’know, unless I go to a specialist and pay them specifically to assess me for something, it won’t happen. (Unless, per the opening paragraph, there’s something of you that needs to be stripped away. For society’s safety! And the life insurance companies’.) And this can be annoying: I would really like some answers, or hell — speaking now of chronic pain — a better legitimised excuse for feeling as awful as I do every day. Every time someone newly learns of how I’m doing: “oh but you look good!” “I hope you’re on the mend at least.” MY FRIEND I JUST TOLD YOU I HAVE HAD STEADILY WORSENING WIDESPREAD UNTREATABLE PAIN FOR TWO YEARS NOW DESPITE SEEING THIRTY DOCTORS A YEAR IN THAT TIME. WHAT DO YOU THINK.

The other thing I’d be remiss to omit is that health conditions and diagnoses are (by and large) not real1. There is nothing so locable as “depression” in the brain/body/wherever you think things are. “Generalised anxiety disorder” and “social anxiety disorder” and “other specified anxiety disorder” aren’t, if the last one didn’t give it away, reified, separable, and specific conditions. Diagnostic criteria are for diagnoses, and diagnoses are for guiding treatment at the population level. At the individual level, you could have all the problems in the world and not one set of criteria may fit; or many may fit, and every one of those may indicate the wrong solution for you specifically.

  1. otoh there are plenty that are, but those definitionally tend to have extremely specific indicators and correspondingly specific remedies (or wants thereof). ↩

WAHOO

screenshot of lichess showing 2014 “puzzle” rank

escraping

The LLM scrapers started to reliably knock nóssa offline (even with Anubis difficulty increased), so I had to implement Measures :( Logged-out users can view the root page of any repository, but can’t navigate to any blob, tree or commit. (You can still clone them fine, though!)

That seemed like a pity since I like to deep-link a lot in posts and emails and that kind of thing, so I added a “signed URL” feature. This link to the code responsible is an example!

It still seemed a shame: registration isn’t open on the instance, so in practice no-one can navigate repositories but me and Annie. For a long time I wanted to support “remote” users from e.g. Forgejo instances for eventual coordination activities like issue tracking, and so now seemed like the time: you can login with Codeberg, GitLab, or GitHub, and an account is created automatically if it’s not linked to an existing one, with no extra steps. (Shout out to Überauth and OIDC.) To prevent abuse new accounts are given “viewer” status and can’t create new repositories or have public profiles.

This took a couple hours of a Sunday evening, mostly debugging semi-arcane “invalid redirect URI” responses1, and I’m really happy it’s done.

  1. I needed to add Plug.SSL to the stack to translate XF* headers in the %Plug.Conn{}; Überauth was reconstructing “redirected to” URIs with the wrong scheme/port and complaining the redirect was made incorrectly. ↩

Fluent jj / aggressive aliasing

Cross-post from lottia notes.