Basic QMK custom keyboard (with Ubuntu, Arduino Pro Micro)

After getting QMK to work, I thought it would be useful to document how I got it to work. This is starting from zero, using a Ubuntu live booting USB drive. Hardware I’m using a basic Pro Micro dev board. It uses the ATMEGA 32u4, and supports USB natively, which is what we need. When getting these, make sure to get Micro-USB (otherwise you have the chonky mini-USB), and the 5V/16MHz version.

Privacy-preserving embedding of Tweets

Embedding tweets with the usual setup is a bit annoying. You end up using Twitter’s JavaScript, which takes a while to render the content. You probably have to do the GDPR dance for your users too (I honestly don’t know the details), since it’s possible they include cookies / trackers, etc. I made a “simpler” version which uses a preprocessor and Hugo Shortcodes to embed tweets as images. It’s easy to use while writing, the preprocessor generates images using Chrome / Puppeteer as needed.

Dynamic table of contents with Intersection Observer

My Hugo theme had a jQuery-powered dynamic table of contents. I thought it didn’t make much sense to keep the jQuery library (even a small version) if I’m just using it for that. So, out it went, and in went a JavaScript version with Intersection Observer. This is based on Ben Frain’s version, simplified a bit since we get the table of contents statically embedded. Code The full code (in layouts/partials/article.

Check if a static site is moved correctly

The lazy person’s guide to confirming that a move to a static site worked. Overview: Download all relevant URLs from Search Console Convert download to a URL list Check for http to https redirects Check for valid final URLs Download all relevant URLs I’m picking one approximate source of truth - the URLs that received impressions in Google Search. This list doesn’t need to be comprehensive, just something more than I’d manually pick.

Nofollow with a bounce-URL

This is a simple (“simple” hah, it’s pretty complex for a simple annotation) implementation of a bounce URL for adding rel=nofollow support to a static HTML site. (More on other nofollow approaches) Overview We’ll modify 3 things: Add a /nofollow/ URL which redirects as appropriate Add the /nofollow/ URL to the site’s robots.txt. Modify the render-link.html code to swap in the rel=nofollow Passing mechanism: We’ll use URL anchors (/folder/page#anchor) to pass the destination URL.

Nofollow strategies for markdown sites

I touched on nofollow for Hugo-sites recently, but thinking about it a bit more, I wonder if it needs some kinda of failsafe setup. What happens if Hugo stops injecting the link parser? What happens if I move to a different setup and forget the link processor? What happens if … (insert paranoia here) The goal of nofollow links is to avoid having search engines use them, but still to allow users to use them.

Mirroring a website for use on static hosting

If you’ve been following along, or probably not, since none of this is live yet, I’ve been moving some of my random old sites over to static hosting to simplify life. Static hosting doesn’t solve everything, and doesn’t protect your cheese, but it’s cheap & carefree (at least, until your hoster deprecates their static hosting). Finding new places to put static hosting is pretty straightforward too. I use Firebase static hosting for this site at the moment, that’s what this post covers.

Simple site-search for Hugo, using Google

Want a simple search functionality for your Hugo site? Here’s the setup I used here. It uses the Google search advanced query operators (which you can get if you go to Tools / Advanced Search) to add the site as a separate parameter. as_q = the query you want as_sitesearch = the site you want to search in It opens up in a separate window, if you’re ok with that.

Some design decisions on this site, SEO and otherwise

Mostly a random collection of decisions I made when revamping this site. I’ll try to update this over time as I make new calls. Hosting Post in markdown. This is mostly for comfort, it’s easier than writing HTML. Minimal CMS. I use Hugo as a static site generator. I thought static site generators would be easy; I was wrong. Hugo uses Go and a bunch of libraries, I can’t install all of it on my company laptop (without disabling some security features, which otherwise seem like a good idea).