Qubyte Codes

This is a collection of my notes. If you use a feed reader, you can subscribe!

I designed and built a keyboard! This is build for my comfort (despite how it looks). I designed it from the PCB and plates up! It uses kailh choc switches for a low profile, and a QWERTY variant of Miryoku to minimize finger and thumb movement.

The FG-11 split keyboard. Each side has 23 keys. The keys for the fingers are layed out in five columns or three rows on each side. The second and third column from the inside are one key higher further from the typist than the other columns, to suit where my middle and ring fingers sit. There are three thumb keys on each side, arranged along a diagonal. The PCB of each side can be seen peaking out on the inside edge, and the controller can be seen on the left hand. A ribbon cable connects the two sides from PCB to PCB. The plates are stainless steel and key caps white.

I built a keyboard. Hopefully it's more practical than it looks.

A photo of a four row ortholinear (square layout) keyboard. The keycaps are mostly light grey, with dark grey on the bottom row and the first and last columns. The escape and return keys are red. The caps have a high profile, with each row pitched differently at the top for comfort. The base has a low profile, so you can see the switches below the caps.

GitHub sent me a one-time donation as part of their thank you to OS contributors to software GitHub uses (who have their sponsors dashboard set up). I originally set it up in hope that someone would send me the occasional buck or two for a coffee. That never happened (at least not yet), but $550 as a one off makes up for it!

This cat is attempting to be adopted by us and is in no way subtle about it.

A cat sitting on my doormat, right outside my house.

I live so close to this countryside, but rarely take time to visit. Itโ€™s the perfect weather for it today.

A field of barley. Deep blue sky with white fluffy clouds. In the distance there is a ridge of green hills.

ๅคš่ชญ(ใŸใฉใ) time! First up, ใ—ใ‚ใใพใ‚ซใƒ•ใ‚ง

The first book of shirokuma cafe (in Japanese). Beside the book is an iced coffee.

I bought the keycaps.

I'm using Safari for personal use these days. I wanted to use omnibear for micropub stuff, so I compiled the JS (a normal build step for it), and then ran the command below. The only change I had to make was to add a description to the manifest.

xcrun safari-web-extension-converter /path/to/my/extension/

In Safari, the Allow Unsigned Extensions option must be checked. Xcode generates a wrapper application for omnibear. After booting it, you can quit it and go to Safari -> Preferences -> Extensions to enable the extension. I'm posting this note using it!

I finally caved in and ordered myself parts for an ortholinear keyboard. I've gone with a Preonic through Drop, and paired it with Holy Panda X switches. The wait means it'll be a nice birthday present for myself!

I guess the reason for rolling my own webmention receiver is that I don't want to rely on services I don't manage or pay for. Now, an argument could be made that I'm putting everything on Netlify, so my eggs are all in their basket. My counter to that is that the functions I'm writing fairly portable. All I'd have to do is wrap the functions in a little server. So, the important part is to own the logic! Of course, there's also the fun part of reading a spec and implementing it.

This afternoon I'm playing with webmentions again. I've decided to implement my own endpoint and migrate away from webmention.io (which is fine, I just want to build my own).

First concert since December 2019. Back then it was seeing Devin Townsend. This time it was seeingโ€ฆ Devin Townsend. This time was stripped back and very tight. They played some songs I never thought Iโ€™d see live, like Dynamics and Almost Again. We got upgraded to a box in The Royal Albert Hall too.

Devin Townsend and Co. on the stage at The Royal Albert hall, as seen from the Second level circle.

A bridge being built close to where I live.

The view of a pedestrian bridge being constructed from one end. It currently lacks a platform.

I found an old picture of me holding peanuts.

Me with a handful of freshly dug peanuts in a field in Japan.

A caterpillar.

A yellow and black caterpillar perched behind some purple flowers.

A little autumn weather isnโ€™t putting folk off the sea.

Three people in coats sit on the beach facing the ocean. In the distance there are people boating, windmills on the horizon, and clear sky peaking through the cloud.

An interesting path close to home.

Steps in the shade between houses.

Feels good to wander around Brighton.

A view of the ocean between some houses and a church in the Montpelier area of Brighton.

I made an excellent banana bread the other day. No sourdough involved though.

A slice of deep brown banana bread on a small plate.

I made some sourdough hot cross buns!

A plate with some freshly made sourdough hot cross buns on.

Sourdough brioche. About 25cm in diameter.

Freshly baked sourdough brioche. About 25cm in diameter.

I finally found a use for that physics PhD.

A paint brush taped to the end of a stick.

Itโ€™s good! I got lucky!

A slice of my first sourdough loaf. It has good structure and a fine crust.

My first sourdough loaf!

A dome shaped sourdough loaf o. A cooling rack.

The sourdough starter is finally ready to use! It seemed to go a bit dormant, so I fed it some rye flour and it seems to have done the trick! The rubber band marks where the top was at its last feed six and a half hours ago.

My sourdough starter in a jar. A rubber band marks where the top was, and it has doubled in volume. Bubbles can be seen in it.

The sourdough starter is growing!

Sourdough starter, showing signs of growth in a glass jar.

First batch of white chocolate and macadamia nut cookies!

A batch of home cooked white chocolate and macadamia nut cookies cooling on a baking tray.

After a day Iโ€™m supposed to discard half the sourdough and feed the remainder. This is the discard, and itโ€™s already showing some signs of activity!

A discarded portion of the sourdough starter. Bubbles can be seen on the surface.

I began a sourdough starter yesterday. Due to a lack of whole wheat flour I used 50:50 very strong white flour and buckwheat flour. Iโ€™m hoping the latter will donate the yeast!

The beginnings of a sourdough starter in a jar.

Want: Recipes to label their ingredients in groups, so I can keep them together in the same bowls and save on washing up. Also good for knowing when things need to be ready.

From yesterday: Vegan buckwheat pancakes with caramelised banana, chai spiced coconut cream, coconut chips, and cacao nibs. Eaten at Black Mocha in Brighton.

Vegan buckwheat pancakes with caramelised banana, chai spiced coconut cream, coconut chips, and cacao nibs.

Rainbow sunset with Venus.

Rainbow sunset with Venus visible.

Fox in the Pavilion Gardens.

Fox in the Pavilion Gardens

No context conference slide.

Conference slide reading โ€œwhyโ€.

Reminder for later... Paths are predicable enough in my setup that I can improve the netlify config to apply headers only to HTML by batching routes with wildcards.

Morning mist over the Sussex Countryside.

Morning mist over the Sussex countryside, viewed from a railway viaduct.

Next thing to do: add handling for h-reviews so I can rate mince pies.

Work in progress.

A partly painted room.


Testing out syndication of a note from my blog.

Between Lewes and Newhaven by train.

A view of fields seen from the train between Lewes and Newhaven.

An interesting local mural.

The concrete front garden of a local house is a beautiful mural of fish.

Another nightmarish thing my partner bought.

A nightmarish pair of felt jester shoes for a baby.

Versioning edge case discovered on the Node.js website.

A screenshot of the Node.js website showing the latest version behind the LTS version.

Hideous gnome.

Hideous gnome.

The sea.

The sea.

I'm not a huge webpack fan, but I'm wondering if I might change my own mind my porting my static site generator to it. As it stands my generator tries to be as efficient as it can be, but only for a single shot compilation. It doesn't cache artefacts. It looks like webpack, with a custom loader and plugins, might provide the necessary mechanics to make incremental builds while writing a blog post much faster.

Originally I was going to do a sort of dark-battenberg theme for dark mode on my blog, but now I'm rethinking. Since more and more devices are beginning to use OLED screens, I want dark mode to mean "mostly completely black" to save some energy on those devices.

I wrote a while back about how promises and event emitters in Node.js can play badly together. Since then, Node and JS have changed enough that I should write a follow up post.

I have a real completionist streak to me, which is a lot of fun as it interacts with IndieWeb stuff like microformats. The next thing on my radar is WebSub. I'm keen to implement both the hub and publisher in one as a glitch.

Next up, Iโ€™m considering micropub for posting full article entries. Hosting an editor and managing storage for drafts is a bigger task, but I can increment on that. Posts would be in markdown though. I wonder if thatโ€™s considered bad...

Idea for later: I need to markup each publication in the publications page as an h-cite.

I like the idea of a links page for things I've read and think others might enjoy. I'll probably build one soon.

I think I'll work on putting some of the sharing stuff at the bottom of each post into a

element at the next homebrew website club. That might mean splitting the webmention stuff up from sharing links. I'm not sure yet...

I think it's time I started writing some tests for the static site generator.

Itโ€™s possible using sed, jq, and date to read timestamps from scheduled posts and git mv and push them. This would be superior to the current Contents API approach because the content of the post will be properly attributed. Itโ€™s also lighter and agnostic with respect to git hosting.

The command to get a time stamp will be something like: sed -n โ€˜/^---$/,/^---$/pโ€™ < post.md | sed โ€˜1d;$dโ€™ | jq โ€˜.datetimeโ€™ | date -f -

Now Iโ€™ve got a handle on the GitHub contents API, itโ€™s tempting to build an editor into my blog. Could be a rabbit hole though...

Idea: Set up a web hook for webmention.io which posts to a glitch which in turn opens an issue on the GitHub repository for this blog.

Another possible set of articles I could write is on tips for writing kubernetes configuration files. I've accumulated a number of them over the last few years.

I might make the repository for this blog open soon. It's embarrassing in places, but I'd still like to show what I've done and compare notes...

Homebrew Website Club is this Thursday, so I need to either think of a blog post I want to write, or think of an enhancement to my blog. Iโ€™d quite like to integrate an editor, but thatโ€™s a big task. Something smaller, or an enhancement to an existing feature might have more impact...

Tickets booked for the next trip to Japan. Our first with the little one. I can't wait for his grandparents to meet him!

I can think of no better tribute (albeit late) than to wish the World Wide Web a happy 30th birthday on my own weird little personal site.

I have a glitch which tweets out new blog entries. Right now it just looks at changes in the sitemap. Reminder to improve it to include tags.

The selector to use is document.querySelectorAll('[rel="tag"]').


Reminder to myself to write a post about my recent contribution to Node.js.

All micropub client implementations appear to be a bit lacking (none seem to support a media endpoint very well). I'm considering making my own client and embedding it in my blog...

Testing alternative micropub server implementation.

I've come to refer to my preferrred way of creating microservices as "calving". Start with a monolith, and move bits into microservices where the coupling is weak (like a big iceberg calving off a smaller iceberg).

One of the cool things about micropub is that I can use a third party client really easily. This post was created with micropublish.net

Now I need to reconsider my landing page. It'd be nice to have the notes there, and some information about me.

I implemented #indieweb notes on my blog using a Netlify function and the GitHub content API. I'm using Keith J Grant's omnibear browser extension (in FireFox) to post. Not much to see yet, and it's a very basic implementation, but not bad for a couple of hours of work.

Notes are live! ๐Ÿ‘

Testing again, 456.

Testing, 123.