Skip to main content

Pretty Good Hat

Tag: Code

Boring website administrivia

It’s been a couple of nice hobby web site weekends here are Pretty Good Hat PNW. Reading Adam’s great writeup of setting up an IRC server put me in the mood to play around with servers, and with the price of my shared hosting having gone up last year, I thought I’d experiment with setting up some servers at Hetzner.

Well, one good thing led to another, and curling was on TV so I had a lot of good laptop time, and so I’m finishing out this weekend having completely migrated from my prior host after more than ten years there. I learned a bunch about setting up new servers! I can’t say enough good things about Adam’s guide and the encouragement to be found hanging around the omg.lol community.1

Before cancelling my old service, I made an exhaustive scroll through all the content in that home directory, downloading and archiving a lot. Over the years I’ve had everything from twenty years of web sites2, to old versions of my CV, to little R experiments, ruby projects, and other things that kind of scaffolded a lot of my history. It really is true that a good chunk of the story of my life is the story of all the things I’ve done with web sites in that time. It’s a very specific kind of time capsule, those directories full of web projects, jpegs, and datestamps.

misc tools & process notes

  • I used Zed for a lot of my migration work. Its remote editing via an ssh connection works beautifully (and in fact is how I’m writing this post).
  • Caddy is great! The way it enables automatic certificate installation is so seamless.
  • I post with a Drafts action and a cross-platform shortcut for uploading images, both of which hit a little PHP micropub endpoint. It’s really pretty cool that with updates of authentication, I could move my posting tools over to a new host and just … keep using them.
  • web sites and servers are cool and fun to play with

  1. If you happen to want to plink around with some new servers of your own, follow the Hetzner signup link in Adam’s IRC guide; you’ll get a credit and he’ll get one, too, if you stick around! ↩︎

  2. That’s “live” web site time; I just realized that if I go back to college archives, I’m at more than thirty years. Which. Well. ↩︎

Histogram comparing the distribution of calories expended on indoor cycling rides in 2024 versus 2025. The histogram bars are filled in orange, with black outlines. Both plots roughly cluster around about 250 kcals.

After briefly operating again, authentication to the Peloton API has been re-restricted. There are apparently some workarounds, but building a bunch of OAuth mechanics on top of a non-public API is a lot of work on something too fragile for me to rely on. That means that RideShare is inoperable for the foreseeable future, and that’s a big bummer!

Much, but not all of the ride data continues to be available through Apple Health, so I can continue to use a lot of what I did to summarize the year’s exercise data last year. Here’s a quick comparison of workout intensity in 2025 and 2024.

Today’s hobby project troubleshooting: Darn, which library did I update in that other project (don’t renv me right now, I’m riffing) that’s causing this to fail? Okay, update some other libraries. Okay, maybe there’s new R version conflict; update R. Now reinstall all libraries. Hmm. Okay, rewrite to go around the place where I think the error is raised. Nope, but that isolated enough that I can see the problem. Fixed in one minute.

a bit of a text editor screen showing some helix configuration in toml

A bit of text editor showing helix configuration in toml. The first two characters of words have been replaced by red highlighted random characters, which can be navigated to by typing the two letters.

This feature of [Helix] is so good! Typing gw replaces the first two characters of words with random letters, and then typing those two letters navigates immediately to that word, selecting it for further operation like copy or replacing. In this example, gwcx would take my cursor straight to the word “register.”

I made some updates to my RideShare app (which produces nice, shareable images of Peloton rides) that I’m really happy with: More flexible output image sizing and the ability to select from the image types that the Peloton API provides for more interesting visuals. I wrote this up over at the data blog.

I vastly prefer writing and working with R to Python, but marimo is a really interesting tool and addresses the thing I’ve always disliked most about jupyter notebooks – the awful json file format that stores state in the document itself. Its browser-based editor feels pretty nimble and modern, too. I’ll explore it some more.

Screenshot from the marimo home page listing its highlights

I really like Garrick’s method of adding Bluesky comments to a Quarto-based blog. I’m already wired up to use Bridgy at my personal blog and Quarto datablog, and enabling it to connect to Bluesky was just a matter of adding the connection with an app-specific password. The difference between using webmentions versus the direct point-to-point link that Garrick and others have implemented is something to consider: it looks like the direct feed from Bluesky, at least, preserves a lot more of the continuity of a thread, while the webmentions approach (especially using Bridgy) potentially makes gathering comments a little more seamless in the POSSE sense by not requiring the link back to the original post.

At prettygoodhat, I needed one template change to insert the bluesky syndication link if specified in the post’s front matter. In single.html:

{{ if (isset .Params "blueskylink") }}
<a class="u-syndication" style="display: none" href="{{ .Params.blueskylink}}">{{ .Params.blueskylink}}</a>
{{ end }}

This adds the stub for the syndication link if one is found with the blueskylink id in the post’s header, and that should be all it takes for Bridgy to collect replies associated with the corresponding post.

Garrick’s extension gives me a thought on improving my own hookup of Bridgy to Quarto, too; that may be the right way to go over at the ol’ datablog.