2025–W13 #
Work has been a blast. I'm getting use to knowledge that I swapped out to disk a while ago and it feels good. I'm already involved in an incident: I do like a steep onboarding process.
I've set up a dedicated desk for work, instead of trying to make swapping between mice/keyboards/monitors and webcams all work correctly. I had the room to spare, and a budget.
The LX optic showed up. I had no way of testing it but today (Saturday) I put it in the Procurve and swapped the fiber, only losing 4 seconds worth of ping packets along the way. I also racked the server that I bought in ~the middle of last year. It's finally about to be pressed into production service.
I am looking at RFC 3069 as a method of IP address conservation, given Colocataires tiny allocation of v4s. (v6s to beat the band).
The first OttawaSystems happened and it fucking rocked. We had a sketchy moment when I brought the wrong power lead and it was a bit of a hurried thing getting set up but importantly:
- People showed up.
- Speakers gave good talks.
- People had a good time.
Which is basically the whole thing. It was 20-something people and I just wish I'd snagged a photograph. The videos are here though!
2025–W12 #
Some LX SFPs showed up.
These are Cisco branded and look like new-old-stock, which is nice.
Along with a piece of single-mode fibre for testing, they work in the Catalyst and the Mikrotik switches that I have -- but not in the Procurve. So it's not just complaining, it's also not using the SFP (and I believe that's the case for the generic one that I was testing at the weekend).
Worst case, I can at least get something working by using the Cisco as a dumb bridge, or putting one router port on the Cisco and one on the Procurve. Hopefully the HP-enabled SFP shows up in a few days and we can put this chapter of our lives behind us.
Also new job! It's only day one but I'm still excited, even as we move from "candidate" to "employee".
Now to see if one truly can grow bored of pizza.
Colocataires is live in its new datacentre.
It did, indeed, turn out that unbranded SFPs do not work correctly in the Procurve, so we used the Cisco switch as an over-kill media convertor. I think three hours, including security set up, to rack and establish connectivity. Not bad!
2025–W11 #
- Bought a 1000BASE-LX adaptor.
- It might work in my Procurve, it might not. It certainly complains and I can't do an end-to-end test without a single-mode fibre and another SFP, so those are on order. The newer SFP will have a Procurve compatible EEPROM, supposedly. There's also two on the slow-boat from China, so I will be awash with LX SFPs at the end of this.
- I did some wood turning which was pretty successful (on the machine lathe) and I milled some cast resin which went very poorly because clamping it in the vice tight enough for it to not come out results in deformation. This might be tricky to get all four sides square! But it's an interesting challenge.
- It was a busy week: bought a car for Robert, had my birthday, played Mothership in a group, met up with a friend -- kind of exhausting. I was glad we stayed in for my birthday instead of going out for dinner.
- New job tomorrow! Time to fall back in love with Python and also with pizza (just kidding, I always loved pizza).
- Also catch up on MySQL 8.4 and above, I suppose!
2025–W10 #
It's week 10 everyone.
I accepted an offer at a place, I'm pretty excited. And now I'm touring a datacentre and hoping that this also works out so I can kind of head into my birthday (next week, thanks) with a lower level of background stress.
The funny part is how all of this is optional and yet I get stressed. My nature, I suppose.
Have done nothing with my new domain. Soon, maybe? I'm curious about using Mox or that Rust Mail-Server to host the email instead of my existing Migadu solution -- not because I am unhappy with Migadu (I am happy with Migadu, in fact) but y'know, for fun and chaos reasons.
The prospect of starting a full-time job means closing down some tabs relating to things I was going to explore or dig into. I like my on-boarding period at a new place to be pretty focused. Specifically, my practice of getting better at Go and figuring out good Go patterns for web app development can hang fire: I'm doing Rails at Colocataires and Python at $NEW_THING -- no need to muddy things.
I want to like systemd-networkd
but it seems like it has a major problem on hosts which have huge routing tables -- like it wants to listen on NETLINK for every route and take some kind of action, assuming that most people have three or four routes on a machine, but a BGP router can have like ... hundreds of thousands. And systemd-networkd
has a fixed time it waits for things to settle (25 seconds) which ... that's just not enough.
Back to ifupdown2
, I suppose. At least for routers. But if I'm doing it for routers, maybe I should do it for everything?
2025–W09 #
We're going ahead with taking our a rack and some transit at $SIDE_HUSTLE and so I bought some hardware.
Yeah, I literally bought an HP ProCurve 2810-24G -- the exact switch I used at iWeb. If it works, why change? (Well, warranties and firmware support, I suppose!). I have some SMF and some -LX
optics on the way, too. Let's do this.
The "production" advertisement of AS401604 is still running via Free Range Routing even though I've switched my personal things to use BIRD. I did a quick test yesterday of iBGP peering the FRR instance to a BIRD instance over a multihop connection and it worked okay and BIRD used much less RAM. I don't need to be too conservative with RAM just to take a one or two "full feed" routing tables on modern hardware, but it's always nice to know you're not going to need gigabytes of RAM for the equivalent of soft-reconfiguration.
Spoke to some people about a thing. That's kind of exciting. Yes. It's vague.
I made dice out of resin and also turned some cast resin on the lathe. I think there's something here about making custom castings and machining them down to the finish and size that I want. I wonder what's in the middle-ground between "3D printing" and "machining" that would benefit from this? Probably needs to be something worth mass-producing to be worth it?
I also spoke to some other people about ENTERPRISE SALES and that's less exciting but it's a weird and silly world. "We charge X", "Well, your competitor would just charge me Y", "We charge Y, now". π€· All part of "the game", I suppose.
I've procrastinated on Rails a bit, gotta get back to that.
Bought rueful.ca
-- I plan to start transitioning away from insom.me.uk
to the new domain, reflecting that my life really is all in Canada now. I'll still keep it, I've had that domain since 2002, but it probably shouldn't be my main Internet identity.
2025–W08 #
I updated my desktop and bunch of GNOME stuff is broken. Really I was just using GNOME for working HiDPI. After some experimentation, here's mostly working HiDPI+Dark mode with cwm.
For .xsession:
#!/bin/bash
xrandr --dpi 192x192
export GDK_SCALE=1
xsetroot -solid red
xsettingsd &
exec cwm
And for .xsettingsd
:
Net/ThemeName "Adwaita-dark"
Xft/DPI 196608
Xft/Antialias 1
Xft/Hinting 1
Happily I configured GNOME to use Super+F-keys to switch desktops and that's how I have cwm
set up too, so there's no unlearning of muscle memory required.
Have been doing some Rails recently. It's interesting. Having done some web dev with Go, where nothing is really done for you, I appreciate how much in Rails is done for you, but I don't appreciate having to reverse-engineer some of those things when you want to change them. So far: for a CRUD-ish app, on balance Rails is probably good. I do think that I am about to enter into a fight with its CSS bundling system to get both DaisyUI and TailwindCSS working fully correctly.
(Tailwind is fine, tbh).
I've had my test Clos-network running in my basement for like two weeks. I should write my long overdue blog post so that I can power it all off.
2025–W07 #
Using Rails again after a break (from all of Ruby, too, I guess). I still like Go but it's hard to ignore how much is done for you with Rails that you have to piece together yourself with other frameworks and especially when a language is much less opinionated (i.e. choose your own templating/routing/persistence).
I tried Bullet Train (probably a no) and Avo (probably a maybe, but not to expose to customers).
TailwindCSS + DaisyUI is a maybe.
I might always be chasing the thrill of throwing together webapps in Flask+Bootstrap 3 back around ~2014 -- the combination of moving fast and looking good (relative to the apps of the day) was great.
Lots of other random stuff: bought a projector at a thrift shop and it's fully working. It's old -- and it's 800x600, but for video or maybe slides with large fonts, it's not bad. And it was less than $14!
House things:
- Replaced every wall register.
- I could be happier with the outcome- lots of fettling and force required to make everything work.
- Draught excluders on the doors.
- If you're picking up a theme it is: our house is too cold.
- It seems worse this Winter (I've been here nearly 5 years) -- either it's an especially rough one or we've made things worse through some change that we've made.
- Once again having a thermal camera pays off.
- If you're picking up a theme it is: our house is too cold.
- Picked up filler to repair holes around one of the basement windows. Come Springtime (when I can remove the windows reasonably) I'll make more substantial improvements.
"Farewell to Harms" (no, I have not read the Hemmingway book β I was simply amused at my pun). I made an effort with the typography and design of my tilde website. I've become good at removing things from my life lately and thought it would be a neat "single-serve" website. I've a list to write up, but was head-of-line blocked by not having the website ready. Well; no excuse now.
At least I didn't build a static-site-generator -- the whole thing is hand hewn HTML written straight into the text editor, as is fit and proper.
2025–W06 #
I sorted the "cable too short" problem and have homed my Mini-ITX in a 2U rack-mount box which is nice. I think the first SATA connector is iffy though, but it came up again after a reboot. At least it's ZFS so if it does develop a problem then I'll know?
Also interested in dm-integrity with XFS as a more Linux-native way to get a good fs and also checksums (although not in one package).
I ported over my personal routing stuff from FRR to BIRD. FRR (well Quagga) is where I cut my teeth with BGP, and I came to it after exposure to Cisco iOS/Catalyst/PIX environments -- so its command language felt familiar. But I am not sure that it makes it good, and there's some annoying bugs in recent versions of FRR. Bugs are fine, but they are also really hard to debug because of the non-modularity of things (compared to something like BIRD -- which feels more like a toolkit language you can build a router out of).
At some point I'd like to do the same for AS401604/Colocataires.
Got more eBay networking gear for homelab reasons -- I'm learning about Clos networks and so I have a machine with 4x 1Gb links going to two "L3 switches" (these are actually PCs with a bunch of ports running Linux in my case, as I didn't have a spare five grand (each!) for Nvidia SS2201's). This, along with ECMP-vs-LACP and one other topic, are rattling around my head and need a much better, much longer write-up when I get the chance.
Learned some CSS grid things for my personal site (and I used a bit for Colocataires, but it was more misuse than anything). The snarky thing to say is that I can finally replicate the kinds of layouts that I could do in 2002 with tables, before everything went to CSS, but it really is great to not have to import someone else's whole framework just to be able to work on a grid again.
I set up NAT64 with Tayga -- a userland IPv6 to IPv4 mapper. You can combine with with a DNS64 server (or use Google's public DNS64) and then you can continue to access the IPv4-only Internet from IPv6-only clients.
What "year of" will it be first: Linux on the desktop or IPv6?
It looks like nftables are the new thing that I should move all my firewalling to. It looks fine although there's limited documentation. For now, I went back to iptables/ip6tables shims which take the input I'm familiar with and write the nft
changes for me:
root@remote:~# ip6tables-save
# Generated by ip6tables-save v1.8.11 (nf_tables) on Fri Feb 7 18:20:09 2025
*filter
:INPUT ACCEPT [571:150495]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [38:8189]
-A INPUT -s 2602:f72c::/36 -j ACCEPT
-A INPUT -s 2001:470:1d:51::/64 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REJECT --reject-with icmp6-port-unreachable
COMMIT
# Completed on Fri Feb 7 18:20:09 2025
root@remote:~# nft list ruleset ip6
# Warning: table ip6 filter is managed by iptables-nft, do not touch!
table ip6 filter {
chain INPUT {
type filter hook input priority filter; policy accept;
ip6 saddr 2602:f72c::/36 counter packets 0 bytes 0 accept
ip6 saddr 2001:470:1d:51::/64 counter packets 27 bytes 7093 accept
tcp flags & (fin | syn | rst | ack) == syn counter packets 0 bytes 0 reject
}
chain FORWARD {
type filter hook forward priority filter; policy accept;
}
chain OUTPUT {
type filter hook output priority filter; policy accept;
}
}
2025–W05 #
I did some experiments with ECMP and definitely broke my home network (twice) with switching loops. I plan on writing the whole thing up for my website.
Speaking of which: I updated my website. Really just the homepage for now, but with the idea that I'll make ad-hoc pages on there and probably advertise them in my RSS feed. I don't particularly think that I want a "blog" -- something that makes the gaps between updates so obvious -- I just want a website and maybe a "recent updates" feed. Then I can keep things evergreen?
I also embarked on two small projects: laser cutting some pieces to adapt the 1U server case / albatross I bought around 5 years ago so that it at least looks tidy from the outside and is a piece of equipment suitable for an actual datacenter environment. I don't expect to colocate it -- it's just that I went down a bit of a rabbit hole of those 10" mini-racks, and then of the various ways of rack-mounting Pi's.
As of now, I'm basically using the front 30cm of 1U for a single Raspberry Pi which is hilariously low density. But also I don't have 5 Pi's that I need to put into 1U (and in this case it's a Pi 400 anyway, which is an odd shape etc.).
Anyway, I'm pleased with how it all turned out, using D-type panel mounts to pass through power (USB-C), network over RJ45 and RF over a BNC. I wanted to pass USB-A so I could plug a lead in to access the serial console on the Pi if it crashed etc. but the Amazon-special that I bought just ... is not the right size and shape for a D-type panel, despite being advertised that way. Classic Amazon.
The other project was to rehome the Mini-ITX I wrote about a few weeks ago. I'd looked at putting a 10GbE NIC in with adapters and by using a smaller cooler to create room in the case etc. and decided it wasn't worth it -- I just put a USB3 NIC on (good for around 300Mbit/s). Anyway: I found a 2U case on Amazon for C$75 which really is crazy cheap, so I bought it. Now I can use a regular sized ATX PSU (the Flex-PSU can stay with the nice case for the next Mini-ITX board that comes along) -- and I can fit low profile cards 90 degrees to the board (no riser necessary).
One problem: the 12V input isn't long enough. Sigh. So I have ordered an extension, but until then the machine is using the old PSU hanging out of the side of the case on a crash cart, and it's stopping me from pursuing other experiments with the HP server. But at least it's got a 10GbE NIC, right?!
2025–W04 #
I've written more Ansible this week than is good for me (the correct amount is zero). Man, I wish there were better tools in this space, but Docker (and later Kubernetes) seem to have killed the whole "machine state management" space.
Colocataires has its first BGP session up, although all of its prefixes are being filtered. I've re-learned about RPSL. There's a lot of things you do exactly once when creating a network and then don't touch for years so it's easy to forget them.
I'm also doing some CSS -- it's good-ish now. For both a redevelopment of insom.me.uk
and one for Colocataires. Flex + Grid let you do a lot of stuff that has been hard ever since table tags were shunned.
Fixed the IPv6 in my house so I can manually enable it on some hosts without giving my whole house global v6 addresses. It turns out that you get a lot of CAPTCHAs (and your Netflix changes regions) when using Hurricane Electric tunnels. I hate that v6 in Canada is so stalled.
I bought 32GiB of RAM for my desktop for $60 -- such a criminally small amount of money. I'm still used to the modern laptop, where you just get whatever RAM came with it soldered on. Kind of a mystery that this otherwise quite good (NVMe disk, 12th-gen i5) computer came with only one 16GiB stick installed, now that I think of it.
Set up LACP on my local switches, just for the experience. A piece of layer 2 tech that I never had reason to personally play with. Shopify used bond
devices on nodes, but for HA (as far as I could see) and not for increased bandwidth. Had to use layer3+4
as my load balancing algorithm to see real improvements though -- it's tough when you're using MAC addresses (the default) because you're not going to have an even distribution of nodes (probably) for bench-marking. And then; how can you know it worked?
Next up: ECMP.
2025–W03 #
Built a little web-app with gin
, the Go web framework, and I instrumented it with OpenTelemetry, feeding into Uptrace, and using Badger as its database. It was pleasant enough and there's a lovely feeling of doing a refactoring and, once you've pleased the compiler, running the app again and finding everything still working.
I know that's what test coverage is for, but there's a lot of stuff a compiler does for you that would be a boring amount of test coverage. That said, in using gin
with OpenTelemetry there is a lot of pass-by-name/stringly-typed stuff going on, so the chances of hitting a nil pointer is higher than with other ways that you could write Go code. I'm down with it, for now.
I've tried to use these libraries (and I guess, framework, in the case of gin
?) the way they "want" to be used -- mostly leaning on the defaults. But I think my one exception might be how Go templates are used. The gin
default is to have one *template.Template
instance and you reference a template (or a define block) when rendering HTML. This means you can't do the "inheritance" templating style, where later blocks override placeholder blocks in earlier templates, so I'll evaluate multitemplate. If that works out then maybe I can finish messing around with my web-dev libraries and actually develop stuff.
Upgraded my iLO controller, BIOS and RAID controller firmware due to a tip from BM. (i.e. -- HP makes security fixes available without support contracts, so while you might not always get the latest firmware, you can usually get a much later firmware then you might get on a second-hand server).
The iLO in particular is great because the 2016 version that shipped on the server that I got originally is too old to work properly with modern browsers, negating much of its worth. I got the dreaded internal NAND flash error but a format fixed that up too. This brings my System ROM up to 2019 (from 2015), and the iLO to 2023 from 2016. Two major versions of RAID array too, which might also fix some of the issues that I've been seeing when using SATA disks in the array instead of the SAS disks that originally shipped with it.
Burned a lot of time trying to low-level format some drives that report "512b logical/4096b physical" sectors and a) I was unsuccessful and b) after more reading it seems like it probably doesn't matter in any case. Just make sure that Linux is using a 4K block size (or more) when referencing the drive. This can be done with ashift=12
when creating a zpool, -b
on mkfs.ext4 etc.
I also spent some time looking at native use of 8k or 16k blocksize all the way down to the storage layer -- when I was a Google Cloud customer it was hinted that it's possible to use 16k blocks to talk to their Persistent Disk service. This is something that's very useful with MySQL, as MySQL generally runs with a 16k block size, and therefore needs to be protected from torn writes, by writing everything twice (to a double-write buffer, and then to its final destination).
Colocataires has its ASN issued and IPv6 and IPv4 all applied for. itshappening.gif
. Also I've been relearning how to do book-keeping. The exciting stuff. Update: And we were issued our first ~5 octillion IPs (5 000 000 000 000 000 000 000 000 000) of v6 and ASN 401604!
In non-computer news I cleanly removed the paint-tube from a Vevor pressure pot and replace it (and the valve) with a nice snug 3/8" plug and verified the whole thing can hold pressure at 4 bar for 24+ hours. Air stuff always scares me, but most people who convert these pots (for resin work) use an angle-grinder to cut the tube and leave a stub there and a tempting level to knock (which can release 4 bar of air all in one go) so I'm happy I took the time to do things "properly".
Got nerd-sniped by the whole 10" Mini-rack thing going around various /r/minilab
blogger / Youtuber circles. Primarily because I reckon I have the stuff on hand to just fabricate a rack, but then I'll still end up buying stuff to put into it, so it's just a consumption hobby thing again. Also, I am lucky enough to have a full 19" rack and I think a lot of the reason for the 10" standard to exist is for people who don't have the space / money for the larger gear.
2025–W02 #
After looking at buying a smaller cooler or perhaps a whole new case for my mini-ITX server which only has a 100Mbit/s NIC, I remembered I have a USB-C 1Gbit/s NIC. Problem (sufficiently) solved!
I did some more shuffling around: even with my ThinkPad T440p for sale, I have too many laptops which overlap in functionality. As I (gladly) lost my Windows machine to be the downstairs gaming PC, where it sees more use, I thought putting Windows on my T480 would at least mean I don't have more than one machine that does the same thing (what with Linux being on the liberated Chromebook with the screen removed).
I plan on not trusting the Windows laptop at all, making it perfect for leaving the house without worrying about the compromise of 1Password/SSH/GMail if my laptop is stolen. It just runs whatever Microsoft puts on these things and the DuckDuckGo browser (as a change from my Firefox default). But what if I want to do something privileged while I'm out of the house?
For that, I've set up a privileged VM with a little XFCE environment available over remote desktop over SSH tunnel or VPN. It doesn't sit logged in, so it would still need my 1Password unlock password even if that was compromised, but gives me a remote-desktop-able Firefox instance and somewhere to jump from with my main SSH key.
I'm looking at MPLS over BGP -- I had a reasonably stable thing going with frr
and DN42 with just ... routing real packets over WireGuard tunnels. One thing I had working was routing IPv4 when you only have IPv6 next-hops, which is neat. You really just need to know the MAC of the next machine you're sending the packet too -- that MAC can come from the IPv6 ND table as much as the regular IPv4 MAC table. Using MPLS kicks this up a notch: don't even care what MAC addresses or IPs we're transiting, as we're only going to look at labels.
This is complicated enough that it's making me want to set up an actual blog again (or at least a website) to share some of this stuff. These week-notes are really "here's what I did" but it might be nice to have somewhere for "here's how I did it and what it's for".
Speaking of that theoretical blog: I completed a round of benchmarks of storage devices, both with and without a hardware RAID controller as well as with and without a battery-backed write cache. It's hardly ground-breaking or even that scientific but I'd like to write it up somewhere -- if only so I can refer back to it in the future.
Applied for an ARIN organization object for Colocataires. One further step towards the DFZ.
Updated: It was issued! Yay. Next to apply for IP space and an ASN.
I built a little Go utility to post to a bot account on Mastodon/GoToSocial. It'll run from a cron and it was a pretty nice experience. My comfort and speed with Go are improving.
Anyway, I thought why not gold-plate it and add some error logging to a service. This is because in a few places I just panic when seeing a rare error and I'd like to be notified when that happens and it seems like Sentry or similar could do exactly that. In a co-incidence, I was looking at uptrace/bun
as a Go ORM thing and I thought "what's uptrace?" (not much what's up with you etc.) -- it's a Sentry-like that looks a bit more minimal but targets all the modern stuff that didn't quite exist when Sentry was started. All the Open*
libraries.
I thought it would be cool to implement tracing and error reporting with email logging for my own stuff, perhaps as a pre-cursor for things we build at Colocataires.
Now, trace and error collection are actually hard problems and most of the tools I've found, even the open source ones, were primarily designed to run as a hosted service. Because of that, and because of scale, they have grown a pretty large set of dependencies that something designed to run in a homelab would not necessarily have. Sentry now depends on PostgreSQL, Redis, Kafka (and its dependencies) as well as some OTel stuff and Uptrace also depends on OTel as well as Clickhouse and bundling a test SMTP server because you never know what a user will have at their end. Also Grafana, maybe just for demo purposes as they implement their own Loki and Prometheus compatible backends?
docker compose
papers over this stuff and maybe I should just be happy with that and look away but there's definitely a part of me that finds running a whole PostgreSQL somewhere that I will forget about is a worrying thing.
2025–W01 #
Google Calendar reckons it's ISO week 1, even though it didn't start in 2025. Okay, then.
I continued with the whole bunch of benchmarks I was doing to local disks. I've installed two 2TiB SATA drives in the 1U server, and put the "good" RAID card in, along with a 10GbE NIC. Now I'm thinking I should just fill 'er up and get another couple of caddies for the SAS drives. I've not checked in on the power draw of this storage, I suppose.
Networking-wise I think that I've learned what I needed from the Mikrotik, although I also got its SNMP metrics going into Prometheus. This is totally annoying on Debian, due to the licensing of the SNMP MIBs, so I highly recommend just downloading a package from https://github.com/prometheus/snmp_exporter/releases which has a working snmp.yml
. (Basically the Debian instructions tell you to build from source to get a working snmp.yml
which, to me, defeats quite a bit of the purpose of having a .deb
available).
I've moved up to a 4K 27" screen and switched to a modern desktop for what I will consider my "proper" computing (i.e. coding, working on things for the business). It's pretty lush, and I decided to go back to GNOME because I can just set the scaling to 200% and (so far) everything just works?! Given that even getting a consistent dark mode to work without a desktop environment was tricky (on my laptop), I don't even want to try getting HiDPI working. I've mapped GNOME's workspace keybindings to be the same as my cwm
bindings on other computer, for muscle memory reasons.
Text looks amazing, and this is recreating the feeling that I had when I once owned a 27" iMac back in 2010. That felt like an opulent computing experience (although I ended up selling it as we needed money). I've got pixels to burn, now.
So, now I have a new screen, I also set up a desktop -- having gotten the specs and benchmarks for the hardware I already have I realize I was wasting a 12th Gen i5 as a server in my basement so it's now my desktop. It's quiet enough and sleeps, and it can drive the 4K screen over DisplayPort. That meant I needed to shuffle things around and a mini-ITX I built last year becomes the "always on" server. It's got an i5-3470
which is kind of meh, but that's fine for my purposes as it has an NVMe drive and a SATA SSD for the media I want to keep on hand. No big "always on" filer, here. The only thing I wasn't prepared for:
It has a 100Mbit Ethernet port.
I can't remember the last time I saw one of those on something that isn't a Raspberry Pi. Now I need to decide how annoying that is before I commit to getting a smaller cooler so I can fit a PCIe card in the tiny case and get 1GbE or 10GbE networking. It seems like a waste to have 300Mbyte/s disk writes behind a 100Mbit/s network, though.
2024–W52 #
I continued to do a lot of playing with hardware which has been fun: more benchmarks, including my SATA SSDs etc.
I picked up a Mikrotik CRS305-1G-4S+ because I would like an 10GbE switch which can be managed but doesn't cost crazy amounts of money. I wanted to try out RouterOS and SwOS. Initially I was just going to use SwOS because my needs are simple but it doesn't have a CLI which always makes something feel like a toy to me. So I set up RouterOS but I found that it's capable of so much (for real, this is a pretty feature packed device for C$200) but I would spend a bunch of time turning built-in things off and would need to be careful to not accidentally go from accelerated switching to CPU bridging. SwOS, by comparison, seems to be so simple that you basically always end up with hardware offloaded switching (i.e. you could actually get several Gbit/s out of it, not the hundreds of Mbit/s you'd get when hitting the tiny little ARM CPU).
I picked up some multi-mode fibre and two BX optics to bridge this (at 1Gbit/s) to my LAN but I needn't have bothered because the management port is bridged with the rest of the LAN by default, and it's an RJ45 1GbE port. I also needn't have bothered because I learned that my 10GbE DAC cables can operate at 1GbE speeds, but I'm sure they'll come in useful at some point and they were only like twenty dollars each.
I got BGP for IPv4 working on DN42 and BGP for IPv6-kind-of working (it was being advertised, but then the routers at the "other" end were dropping packets destined for me on the return path -- this suggests that maybe the next-hop I'm sending is wrong but it looks correct). It's cool to me that you can peer IPv4 over purely IPv6 BGP sessions since RFC4760.
I think I'll set up a v6 local-addr next-hop peering between my two private VMs so I can test this from a situation where I can control both sides. I'll also want to look at BIRD which seems popular for BGP and routing-in-general on Linux. FRR is descended from Quagga and Zebra (which I used) and is "inspired" by Cisco IOS' configuration so it's extremely familiar to use, but familiar doesn't have to mean better.
I have a few things that I could write up which would make decent blog posts so I thought about resurrecting my blog. Then I thought that I could create a new blog, and just stitch posts from that into my RSS feed. It'd be good to maybe merge these updates (from Thymesheet) in, too, so I started writing an RSS combiner. Then I remembered I'd seen one before -- it's even written in Go!
I got that working and decided I don't want to do any of that after all. I'll probably write up pages on my website and maybe link them into the RSS feed manually, like I did with https://www.insom.me.uk/24/serial.html
I wrote up https://www.insom.me.uk/24/retro.html which was an undertaking. I don't love my writing style.
Christmas happened and was pleasant. As I mostly write about technology things here, the most relevant thing is that I got an Apple Watch. Not actually as a Christmas present, it's an older Series 6 that my wife was no longer using, but it coincided with Christmas anyway.
It's kind of wild to have this much data about yourself. I'm curious about my sleep and my heart rate and my blood oxygen levels and now I have a device that will keep track of those things and tell me. I previously had a "smart watch" and I didn't enjoy it -- I don't actually want more information from the Internet, and on my wrist no less -- but if you look at this as a health device instead then I think this makes sense.
I'm not really a pundit but I can see Apple slowly turning into a full-fledged personal health device company. AirPods 4 can already function as hearing aids in some countries (where they have regulatory approval) and they got sued for the blood oxygen monitoring on the Series 9 as it infringed on dedicated devices.
It's likely that Apple can get better at health before legacy health-related devices get good at UI.
AirPods are expensive earphones, but they're incredibly cheap for hearing aids. An Apple Watch is a moderately expensive watch, but it's a cheap health monitor.
2024–W51 #
Wow, it's week 51.
I've spent a bunch of time working with BGP and IPv6, joining DN42 (as AS4242422552 -- rolls off of the tongue!). I've got iBGP between my house and Montreal, and eBGP between my Wales VM and a peer in Frankfurt. I have BGP between Wales and Montreal working (technically) but the packets don't route correctly because of how I've set up the tunnels etc.
I think the wisest thing is to set up WireGuard tunnels on the VMs themselves, rather than trying to make tunnels created in the KVM host (the Dom0, as it were) visible in a reliable way to the VMs. (Previously I was exposing a bridge device which contained a VXLAN which was itself tunnels over WireGuard. Too messy.)
I'm going to set up Babel for distributing internal routes through the IGP -- as much as a test as anything else. Probably iBGP or frankly a lot of static routes would actually work. I will not be readvertising BGP routes into Babel as I don't think that's really what it's for and I can cover the whole DN42 network with a couple of network
statements / static advertisements.
Been fun, though.
Also on the verge of getting PD's and my company set up and registered to start doing networking "for real" again. In honor of that I'm getting some of the equipment I might want to colocate up to shape. I currently have a 10G PCIe NIC in the HP DL360e and I'm using the onboard RAID/SATA controller connected to the first four ports in the front disk backplane. The other PCIe slot has a carrier for an NVMe SSD which is currently vacant as I nabbed it for something else.
I think I'd like to end up with 2xSSD and 2xHDD (2TiB) out of the working ports on the front (possible with the internal card) but I'm also considering if getting a card with an external SAS connector would be a good idea. That would allow attaching a cheap(ish) disk shelf to this machine to make it a bit of a powerhouse really. But it's also a lot of eggs in one basket, vs. just building a NAS-style device with the backplane internal to it, if I/we want a lot of bunch HDD storage.
Much to think about.
2024–W50 #
Bluetooth to the rescue again. I have my Steamdeck plugged into an external display with bluetooth keyboard and mouse and it's a pleasure to use. Who even needs a gaming PC, right? π
Got neovim
auto-completion working again as I missed it, but boy it needed several plugins. My config now has a block like this:
Plug 'neovim/nvim-lspconfig'
# These are the completion ones! Seven!
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-cmdline'
Plug 'hrsh7th/nvim-cmp'
Plug 'hrsh7th/cmp-vsnip'
Plug 'hrsh7th/vim-vsnip'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Plug 'junegunn/goyo.vim'
Plug 'gruvbox-community/gruvbox'
Plug 'tpope/vim-eunuch'
Plug 'tpope/vim-fugitive'
Plug 'tpope/vim-surround'
Plug 'tpope/vim-vinegar'
Plug 'christoomey/vim-tmux-navigator'
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Plug 'fatih/vim-go'
Plug 'vimwiki/vimwiki'
Plug 'luochen1990/rainbow'
That's not even the config, just the plugin list. This seems out of hand. We're not emacs
users!
UPDATE: I upgraded to the latest development release of Neovim, to try out native completions, but tbh I don't like them (yet). I aimed to start from scratch leaning as much on language servers as possible, but in the end I have a stripped back version of the config I started with. Plugins that I can't easily remember the keybindings for without looking them up got booted. Mostly that means that fzf
, rainbow parentheses, and tmux navigation made the cut. (Also gruvbox
, of course). I'll leave vim-go
commented out and probably will do serious Go development in Visual Studio Code (womp).
Prometheus: I've decided I dislike running Grafana -- it's a big complicated thing that I mostly rely on being packaged by other people. Instead I'm sticking with Prometheus and adding a standalone AlertManager. This lets me manage my config with YAML files instead of click-ops or an API and it supports Pushover natively which is pleasant enough.
If I want to look at one-off graphs (like I used to with Graphite or Collectd) I can just use the native Prometheus UI (recently updated!) to look at one-offs. I didn't really need pre-built dashboards, but I do need things like "out of disk space" alerts.
Regarding my music SSG, I've decided to write it from scratch again. I've learned what I need to know from the prototype and now I think that that refactoring it into the thing that I want is more work than writing a new one that does what I want. I'll keep a few of the tests and structs though, they are fine. But I don't want to depend on SQLite just because I was avoiding doing a GROUP BY
in Go (vs. SQL) and because I wanted to avoid keeping a few big map
s in RAM.
In the end, the Go part of the project is really just Advent-of-Code complexity. (There's a bit more to the Javascript parts, but also hopefully as little as possible, y'know?)
Suddenly inspired to fix and generally massage my BGP set up -- the node in Montreal broke at some point and I ended up completely replacing the VM. Now I have BGP-over-WireGuard from Ottawa to Montreal. I extended things with a GRE tunnel to my VM in Wales, which is a separate (private) AS using GoBGP (I used FRR for the "real" routers in my house and at OVH).
Now I'm here creating a bunch of objects in DN42 as a practice run for hopefully doing similar with ARIN in a few weeks. So far, so good? Looking forward to setting up some peerings.
2024–W49 #
- Well, I definitely spent a lot of time fighting Bluetooth on Linux. It all "just worked" on Debian Trixie under GNOME, but I switched back to
cwm
and had lots of issues.- It seems that my Bluetooth adapter might have been going to sleep prematurely and messing things up, so I disabled that with a kernel parameter. I also had to tell the HID devices to use the kernel driver instead of the userland driver (which just did nothing, weird!).
- Also, I think a lot of things on Linux assume you're either running under a desktop environment with all the DBus etc. providers -- or that you're an terminal dweller who wants to configure everything with curses or a CLI tool: I'd just like some GUIs, some of the time, thanks!
- Ripping a pile of CDs. I've stalled on my Go-based static site generator for MP3s. (It's reasonably far along, just not gotten back around to it). Ripping CDs will be required for the end result, so might as well feed the machine. I've somehow amassed 20 discs to rip since my last session of doing this. Hooray for charity shops and the local second-hand record store.
- Still planning on doing a BGP / ISP things. Found gobgp which seems like ... exabgp but in Go. A thing to have in my tool-belt, I guess!
- Also have to refresh my IPv6 experience and bring it up-to-date. Planning on running a v6-only network in my house with CLAT/NAT64/DNS64 all good to go. If I can get a tunnel from someone, I guess!
- Other stuff:
- Four of us and a dog dragged the tree home a couple of miles with a cart, as is (recently made up, but cast-iron) tradition.
- Presents got, dinner planned and ingredients ordered. I feel weirdly ... done.
- It's once again nice to not care too much about BFCM, but I do get some FOMO of my Shopify friends who are still there.
- Finally, finally, have rid of the cabinet saw we had in the garage so the car can fit in there properly. Just in time for the snow to come.
2024–W48 #
- BSides Ottawa CTF was a lot of fun. I met some people from BenchSci and joined their team
- I think we came in 6th (leader boards are blanked for the last 30 minutes to create some suspense before the winners are announced).
- We were second at the end of Day 1, which felt pretty cool. All down hill from there, though!
- I think we came in 6th (leader boards are blanked for the last 30 minutes to create some suspense before the winners are announced).
- Got my COVID + flu shots on Tuesday and that took me out for all of Wednesday with a killer headache.
- This whole week has been fraught with appointments and health stuff, making today (Thursday) the first "normal" day since Wednesday last week (before the CTF).
- Today (Thursday) I went down a rabbit hole of Air Traffic Control and listening to planes with SDR, and looking at the publicly available map and NOTAM data available. Not quite sure why, it just seemed to happen.
- I also had a call with a friend. We kvetched about work, naturally.
- Looked into IPFS, something I am keen on existing, to find that it's probably still not useful for what I want and maybe it never will be?
- I have amassed a criminal amount of tabs and I'm going to need a purge. Some of them are waiting on the right context to come around again (like registering ARIN objects) and some are in queue to read, while some are in a queue to post about (like on clinks)
- Partly this is because I've spent so much less time on the computer lately, which might be positive, and partly because I've spent the time that I have on thinking about the nature of stuff and the time we live in.
- I put my bikes away as we're heading below freezing again and when I'm riding for fun, I don't want to be out in subzero temperatures. My son's bike is still out because it's how he's getting to college, so it'll stick around until there's ice on the ground making it unsafe (and not just ... y'know ... unpleasant)
2024–W47 #
- Gaming PC being downstairs is working well.
- Doing Linux music stuff, it's okay
- Constraints are helping, I think. Rack + DecentSampler + Vital + Reaper.
- VCV Rack is a very deep environment, you can do a lot just inside it.
- Doing Linux music stuff, it's okay
- Finally learned how to make boolean operations on paths do what I want in Inkscape
- I'm CNC engraving some stamps and I wanted to create a negative shape to feed into Easel.
- Before figuring this out I had to either boot up the Windows machine or use my iPad and Affinity Designer, which is silly.
- I'm CNC engraving some stamps and I wanted to create a negative shape to feed into Easel.
- Looked up the next steps for ARIN registrations etc.
- Played a lot of Cult of the Lamb.
- I might be ready to give Elden Ring another try.
- Much bicycle stuff!
- Had a lot of fun on my fixed gear, changed out the brakes for better ones.
- Swapped bikes with my son for a ride, decided his bike was borderline unsafe and not a good fit for him, convinced him to get a new bike.
- He is, unsurprisingly, much happier with this new one.
- Discovering that I can have multiple "panes" of tabs with Sideberry is a game changer.
- Going to BSides Ottawa this week; hope to have fun. It was good last year.
- Started playing D&D with family. First session was good.
2024–W46 #
I have a work in progress Go utility to generate my static HTML files for my music library: Atmosphères. A good way to learn how many things do not want you to use accents in the names of things (Go modules, SourceHut project names).
It's been nice to write a little Go thing that's more than a script but smaller than, say, Shardlifter. It's big enough to bother checking err != nil
but not so big that you can't panic
when you detect an error.
The single-binary thing really feels like Go's killer feature. I also learned (via the town con
command on tilde.town) that you can embed arbitrary data into strings, []byte
arrays or pseudo-filesystems at compile time. This really lets me ship things as a single binary, even if I end up including HTML templates or even images.
Also learned about CSS grids and subgrids which are amazing. So much of what a framework like Bootstrap brought to the world 10 years ago was a working grid, and now we can just ... have one. In native CSS. Progress is a fine thing.
I've repurposed my gaming PC as a shared machine and moved it to my wife's office. Since getting the Steam Deck my actual Windows machine has been wasted, with it's relatively nice 3060 video card and 11th generation CPU. Also, Windows has been less and less pleasant to use for non-gaming things, so ... good riddance? It was good for music things but I have Reaper, VCV Rack and a couple of plugins all supported on Linux so let's see if constraints help bring out creativity in me.
UPDATE: I have done MIDI to Linux. Using VSTs seems pretty crashy but I think that the thing that works best for me is to run standalone instruments under pw-jack
and Reaper without third-party VSTs. Then I can sent MIDI to DecentSampler or to VCV Rack and record their outputs (if I need to) with a minimum of things going wrong. It would make hopping between projects a pain but I don't really do that -- I rarely revisit things once I've bounced to an MP3 and uploaded them somewhere.
2024–W45 #
Bikes were one thing: this week has mostly been plumbing. Not in a good way! A slow leak at Stevenage and we had to rip out about a square meter of ceiling, about the same of floor tiles and throw away the old sink cabinet. We've simplified the plumbing, which was totally nuts, and replaced seals which had degraded. In some ways, it's like bike maintenance, but wet. We ended up getting a new sink because getting a cabinet compatible with the (perfectly fine) sink was more difficult and expensive. At least we re-used the drain and the faucet tap.
Although it's also been bikes: 4 layers of filler-primer and much sanding and my frame and forks are looking okay. They definitely would not pass for new, but I like it. I'd be tempted to keep the bike "primer grey" but I know it won't take clear-coat well. Excited to do the paint layers and move towards making it rideable again; I have big wide bars to try out and basically all of the parts arrived. Not freed the right-hand pedal from the cranks yet, though.
For computers: I'm building a static HTML view of my music collection with a player. That's already working, but I'd like to use HTMX to give me a player which doesn't stop as I navigate between albums. This is part of my "serverless" fascination -- moving from Navidrome (which is good and all! but overkill) to the smallest thing which would work, and which would not require me to run another full-time service. (I don't mind having something to sync the HTML with the MP3s now and then -- a CI action? or maybe just a cron ...). Ideally this would be a piece of software I can ignore for years and come back to find it working, and not another source of dependency and version update rot.
2024–W44 #
Well, the "technology" this week has mostly been bicycles. I was away in New York state for three days and then covered in bike grease for the other two.
No bad thing!
I bought a rusty but rideable fixed gear conversion from an 80's-style racer and I rode it a few times before tearing it apart. So far I've had success freeing the bottom bracket, fork, brakes, wheels, cranks and one pedal. The other pedal, along with the seat-post seem stuck fast. I have hope for the other pedal (otherwise I have to buy a new crankset) but I doubt I can get that seatpost out. Luckily: it's in good condition and about the right height for me.
I've got a steerer-tube conversion (threaded to threadless) and new bars and grips on the way, along with paint and primer to give it a new look. I already have enough chain to replace the rusted one, new bolts for the bottle carriers and wheel nuts, along with replacement brakes, pads, levers and I think I should have enough cable and cable sleeving. I suppose it helps to be a hoarder for bicycle parts. If I can free the other pedal, I have another set that I prefer to put on there.
2024–W43 #
I attended P99CONF and if anything I'm even more interested in serverless databases (I watched a talk by the SlateDB folks - though I was already aware of them).
Also had two reminders that modern hardware is much better than older hardware even if comparing clock speeds doesn't make it clear:
- I encoded the same video with a 6 Core 12th generation i5 with AVX2 in almost the exact time as an 20-core dual Ivy Bridge 2470v2 machine which lacks AVX2. Clock speed is one thing, but CPU features are another (never mind power draw!)
- I'm not getting the speed I expect from my 10G NICs and it looks like it's because I have a mix of PCIe generations among my machines (even back to 1st gen on my file server) and that x8 slots are actually only being served by 4 lanes. The modern machine mentioned above has PCIe 4.0 and it's not even fancy; just newer.
This will probably lead to me powering down my file serving duties from a 6-disk multi-pool ZFS set up which can't saturate 10G and is drawing too much to just a single SATA drive + the NVMe in box
-- the modern machine. All of the data is backed up elsewhere or it is itself a backup so running 1x isn't a giant concern for me.
(The older generation machine does have great deal of RAM though, so when the right memory-bound workload comes along it'll go back into active use).
2024–W42 #
As I've finished at archive.org I did some hardware maintenance:
- Moved the NVMe SSD from the 1U HP box to my Mini-ITX machine
- Moved the SATA SSD from the NUC into a second bay in the 1U HP server
- Left both powered off
See, since I have extra compute capacity from Kimsufi I am leaning towards running less from my home. I still have feelings about self-hosting, like with ttw
, but also about the amount of hardware complexity I have invited for no reason other than to have something to tinker with. When that tinkering brings joy: go for it, but when it feels like a time-sink or drudgery: not so much!
I'll still end up running something from my house, probably the Acer business computer with an NVMe and a single large HDD to serve as on-site backup -- but some of other things which are dynamic (like ts.binch.top
, ironically) as well as my music collection and video library could actually be served from static file storage (or even object storage + a nice frontend) instead of requiring raidz
volumes and filesystems -- as cool as those are.
This ties in with one of my "avoid mental pitfalls" values ("Virtual can be better than physical") and one of the areas I wanted to learn more about for my thoughts about my future in computing ("Serverless databases").
Virtual can be better than physical
This is a reminder that tinkering with lots of old, small or underpowered computing doesn't give me that much joy. I don't need a dedicated NetBSD or Haiku machine: I can use a VM, on my already very capable VM host. The same goes for trying to acquire or fix-up vintage hardware: I, personally, would be as happy or happier with an emulator, and sometimes need to remind myself of this.
Serverless databases
Having run various databases for organizations for almost my whole career, I think that many deployments of many database technologies are overkill, and we are doing them by rote or because we learned out-of-date lessons. I think other people feel this too, given the rise of SQLite to solve all sorts of problems people would have jumped straight to PostgreSQL or MySQL for in the past.
My basic theory is that, given good locking primitives and data-structures, many light uses of databases could be replaced with flat files or object storage. Cache is cheap, and loading entire pages from SSD is so much faster than it was from spinning-disk (and seeking is almost free). That's not a new observation, it underpins things like ScyllaDB's approach -- but they are in the business of selling a product and taking that observation and solving "big" production data problems with it. I'm much more interested in solving small problems:
- How many uses of Zookeeper or
etcd
could be an S3 bucket with CAS/PutIfAbsent semantics? - How do RocksDB/LevelDB's LSM architectures map on to object storage?
- Kafka KIP 405 lets Kafka use object storage for the cold segments which aren't being written to -- but all access is still intermediated through Kafka brokers, requiring servers. What would it look like to consume data straight from a bucket and not need a client library or a daemon when bulk-loading?
2024–W41 #
I've simplified my office as I move back to one laptop for everything.
Firefox profiles are pretty great for splitting work and personal but the UX of using them sucks compared to Chrome. I know it's easy to take pot-shots from the outside but this feels like it "just" needs some polish to provide an experience similar (or better!) to Chrome's user profiles? (You need to visit about:profiles to create or launch new profiles).
When I am done with my Internet Archive dev VMs I will take downtime on the 1U server in the basement and steal its NVMe drive for the mini-ITX machine I built. I'll probably take the old Nook SATA SSD and add it to the 1U server as a trade? 10Gb networking hasn't been the major upgrade I thought that it would be. No further experiments with BGP for the time being, although everything that was set up is still working.
I've only done two Looptobers so far, and I really only enjoyed the first one, but I'm not letting it get me down. There's been a lot on! I've found "giving in" and using Live instead of Reaper some of the time has been good for me -- I'm too much of a purist about doing things the hard way.
I set up an IRC bouncer last month and I should have done this a long time ago. I'd like to get mentioned bridged to my phone (maybe via Pushover) -- that'd be the icing on the cake, I think?
2024–W40 #
Time for thinking about technology has been limited lately, and this log is mostly supposed to be about what I've done and not more abstract things but also it's mine and I'll do what I want.
- Built a Mini-ITX PC
- Not because I needed it, but because the Mini-ITX motherboard I bought for a 1U server does not fit correctly, so I ended up adding a case and using the PSU I had to round it out.
- Yes, this is nuts, but I was annoyed by it being incomplete: at least now it can be a computer.
- Not because I needed it, but because the Mini-ITX motherboard I bought for a 1U server does not fit correctly, so I ended up adding a case and using the PSU I had to round it out.
- Thinking about aesthetics of programming environments
- Literally: "what do I like", in the absence of having to use an environment because of work or pre-existing code.
- I think I might like Go? I definitely prefer having a static binary than shipping (say) a virtualenv because I want to run something.
- I think that I prefer all of the explicit error checking more than throwing and catching exceptions, and more than
?
/.unwrap()
, too. - I like types, but I also like them fading into the background.
- I like not having too much syntax, and
gofmt
just deciding "this is correct, nothing else is permitted"
- I've also been thinking about persistence, given that I've mostly been working on a big distributed SQL database on top of HDFS for the last few months.
- After years of deriding "serverless" I think I am ready to consider what simpler things built on top of object storage can do.
- I read about slatedb and an article about making serverless databases with snapshot isolation and my interest is piqued.
- I think that "object storage with some locking or CAS semantics" is one of the fundamental building blocks for computing that uses or produces state.
- After years of deriding "serverless" I think I am ready to consider what simpler things built on top of object storage can do.
- And I like SQL, if the alternative is an ORM.
- sqlc seems like the right kind of thing for me -- ahead of time generation of boilerplate for getting things into and out of SQL queries -- but the SQL queries are just written in your engines own dialect; not a crappy version of SQL re-implemented in Python/Rust/Go/Ruby
- Literally: "what do I like", in the absence of having to use an environment because of work or pre-existing code.
2024–W38 #
I did so much last week that I didn't have time to write it up for week notes.
Mostly, a bunch of time went on hardware things. I bought 3x dual 10GB NICs, thinking I could arrange them into a ring network using Linux bridge devices. (Spanning Tree would stop it creating an actual loop). I bought three DAC cables to go with them.
Only one of the cards worked, which was a pain, so I ended up getting a different, Intel-based, one and putting that in my storage machine. So only one hop of my network is 10G, but that's okay. I get about 480Mbit/s over the link. I am not sure what the bottleneck is; a topic for future study.
While I had the 1U HP server open I decided to swap out the hardware RAID controller for an NVMe drive on a PCI add-in card. This meant moving from SAS to SATA -- I could plug the SFF/Mini-SAS cable into a convenient slot on the motherboard, but the internal B120 controller can only do SATA. But I have SATA SSDs, so I think swapping a RAID of battery-backed 10K RPM disks for a single SSD is probably at least a draw if not an improvement.
I bought a cheap motherboard to stick into that 1U case, thinking I might need a router soon, along with a PCIe extension for the 10GB NIC. Well -- the motherboard arrived but the clearance it needs at the bottom is more than the stand-offs on the case allow for, and if I lift it up then the lid on the case won't fit. Awesome. And that's without adding the cooler. I thought I had an 1155 compatible cooler but I didn't, so that went on the shopping list too.
Having bought this motherboard to complete the case I already have, I will probably end up buying a 2U case. Life's funny like that sometimes!
In software I also set up a fresh Wireguard VPN and then put a VXLAN over that and BGP over that, using FRR. FRR is the modern-day successor to Quagga (itself a successor to Zebra) so it's familiar territory. I can't wait to be speaking BGP for real. I also dug out an article I wrote on how to do high-availability services using BGP. It's gone from the original iWeb blog so I found a copy on Wayback. 12 years!
2024–W36 #
Techie stuff:
- Learned some more details about WSGI for a work-related thing
- Now looking into Nomad as a Kubernetes-like
- It's funny: I really don't like Kubernetes, but now I realise I have quite a bit of muscle memory built up and an understanding from several years of usage. Starting over with a similar-but-different stack is intimidating.
- It's been a while since I wrote much Rust. I decided to just open some Go and some Rust that I wrote and look through it to see how I feel. Maybe it's relying on my subconscious too much but I am definitely happier at the prospect of writing more Go and not so much at writing more Rust.
- Although, to be honest, for almost everything I am writing at the moment I'd probably write it in Python first.
- One of the big wins for both Go and Rust is shipping a binary though, not a whole bag of source code and wheels like one does with Python.
- Fn+Left Click turns off tap-to-click on the Logitech K400 keyboard I am using. Game changer!
2024–W35 #
Wow, I missed week 34 entirely. Not great!
- I started and am many hours into Tactical Breach Wizards which is great.
- I saw Cage the Elephant on their Neon Pill tour, with D.
- I continued to spend a lot of computer time on Debian packaging and Python things (mostly work-related).
- I installed the final railing around my front porch, closing it off from the side. Now my new, not very good, path to the front door is the only way onto it.
- Yeah, I'm not thrilled with the work on the path (done by a contractor).
- Dumbing my phone continues although I put YouTube back on for a train trip and I had to install the Ticketmaster app because I don't think there's any other way to get into one of their concerts now
- Wanted to buy some mainstream music and I found 7Digital exists in Canada. These were a big name when I worked on music websites in ~2010 and literally their website looks like it could come from 2010. (But I love that).
- Sadly they are now owned by Songtradr, who also own Bandcamp.
- Bandcamp good: Songtradr bad.
- Sadly they are now owned by Songtradr, who also own Bandcamp.
2024–W33 #
- ~~Not done the TPLink replacement yet.~~
- Now I have and it's pretty great. I mean, most of the "win" is moving from WiFi 5 to WiFi 6 but I'm just happy there's other "good" wireless gear that isn't Ubiquiti -- I haven't been their target customer for a while, I guess.
- That said: TP Link Deco only being configurable through an app? Fuck that. This was a free AP I got from my ISP, so it's relegated to a separate dedicated network and not part of my house-wide "BradyInside" network (which is all in-wall access points).
- I have packed up my office downstairs in the house and am moving back to my old office upstairs
- Which is currently my youngest's room -- he's only in there because his old room was taken by his older brother when he moved back in.
- But he's moving back out, so we reset things to how they were.
- I suspect something about either the whole house, or my office, is making me sick -- so this gives me more data, I guess.
- If I work from coworking: I do not get a dizzy spell. Increasingly I do get them at home.
- I am having another pass at "dumbifying" my iPhone -- only putting messaging and communication apps on there, running it in black and white, making it unappealing.
- I watched some videos by Digging the Greats which resonated with me, and made me want to try this again.
- I've done this before, it worked for a bit, but that's no reason to not try again. Literally nothing is forever, including good or bad habits, IMO.
- I'm moving some of my fun stuff over to the iPad -- it's not that I'm giving up podcasts or Mastodon or whatever, it's that I'm not carrying them around in my pocket. They have a time and a place (and a device).
- I also got a new Kindle a while ago and so I'm trying to bring that along in places I would have used my phone to entertain myself (commute, couch, lunch-break whatever).
- I read most of Atomic Habits when I was staying at an AirBnB that conveniently had a copy -- defaulting to reading books instead of ephemera seems like a solid way to increase the number of books read, and a very small change I think I can consistently pull off.
- I watched some videos by Digging the Greats which resonated with me, and made me want to try this again.
- Going through the Django tutorial because it's been so long since I wrote a Django app it's better to pretend I never did and start ab initio.
- Fought some Terraform this week. Man; I dislike this tool intensely. It feels like a necessary evil when you're in the cloud but an ... unnecessary evil when you're not.
- Set up another email domain with Migadu: Migadu -- it's good :tm:.
2024–W32 #
- Switched to Distributel broadband.
- It's good but I was off to a rocky start: I moved the install date (Bell engineer) without moving the activation date (PPPoE credentials are enabled) and so I was without Internet for about 24 hours.
- Good thing I moved ttw first!
- It's much, much cheaper and it gives me a Nokia ONT rather than relying on the unsupported hack of taking an SFP out my old Bell modem.
- Two of the adult kids are moving (back) out soon, so I'm going to take this opportunity to move where I work from and also to make some changes to our house networking.
- UniFi stuff is all going and being replaced with the equivalent TP-Link Omada stuff. Running the controller is increasingly annoying and if anything all I've found is my UniFi experience getting worse.
- I have one Omada AP already and at least I can configure them individually without needing to use their SDN software (although I might use that, we'll see).
- I'm using GNOME and not a basic X11 WM for the first time in a long time.
- Partially I wanted things like my Bluetooth devices and hotplugging screens to just work
- I've set up keybindings that are pretty similar to what I was using with
cwm
and I mostly run three or four apps in full-screen on different desktops so it's not been very jarring
2024–W31 #
- Got a very cheap Kimsufi dedicated server to move ttw to.
- Arranged to change ISP from Bell to Distributel (which is also Bell). Hoping they'll fit an ONT with an RJ45 on it so I don't need to rely on the SFP I pulled out of my old Bell router.
- A lot of work time not enjoying Raft protocols failing when used over unreliable network links.
- Got a Meshtastic radio up and running but absolutely no one is in range. In theory there's a node at Algonquin College, maybe I'll ride up there and see if I can at least make contact (doesn't help me at home, of course).
- Failed to 3D print sometihng reasonably plain due to difficulty taking off supports. Support is such sweet sorrow.
- It's been about a month since I wrote serious Rust and I can feel the knowledge trickling out of my brain...
- I did make some changes to my Atkinson dithering implementation to output black-and-white images, but that didn't really require thinking about Rust, just thinking about my problem.
2024–W30 #
- Did more oil painting but low-key ruined the portrait of Zeus (the dog, not the god) I was in the middle of. Trying to be calm and dry out the new layer and tell myself everything can be painted over. We'll see. This was an ambitious thing to try in the first place.
- Learning the current state of Python packaging and linting. There's a lot of change out there from the days of
requirements.txt
. I also learned some GitLab CI -- which is effectively the same as most other CIs as everyone (but Jenkins) converges on a YAML file with containerized steps. These things are related. - It was another very tiring week with a lot of fixing (and some breaking) of stuff at work. (Writing this on the Sunday after week 29, not after week 30. Let's see, I suppose!)
- Update from Thursday: yeah, there was more.
- Had my first pint of alcoholic beer in a long time.
- It ruined my sleep and I don't feel like I was missing a lot
- Giving up alcohol probably one of the bigger changes I've been able to stick with in the last few years
- Coffee, meat and salt have not fared so well.
- Building Debian packages again. Honestly, before we all went Docker-crazy in devops-land, Debs are probably one of the finer ways to package your artifacts for deployment.
- Met friends for lunch; as always, one of the best things you can do.
- Getting interested in Meshtastic's LoRa mesh network. All my radio hobby stuff has been HF for a long time -- maybe ISM bands can be fun, too?
- Had bad news about my dog, Zeus. Not sure if I can bring myself to finish his painting now. Or if it means I really must do.
2024–W29 #
Last week got busy quick and so I didn't update my weekly log before it was published.
The drive to Kingston was pleasant; real Ontario landscape: straight roads, so many trees, rock faces. We stopped at Mallorytown to charge the car and it's encouraging to see the EV chargers heavily used -- but the state of EV charging still kind-of sucks. You basically need an app for every different charging company / system. My son came down to Kingston to spend some of the weekend and needed to charge and doesn't really understand why it's not just like buying petrol: use some KWh and pay with your card when you're done.
Relatedly, I listened to a podcast about the Controlled Digital Lending lawsuit that's happening at Internet Archive and the line that "if libraries didn't already exist they would never be allowed to be created today" came up.
I think this is actually true and also I think if gas stations were created today they would all want you to pay with different apps. They already want you to use their loyalty cards. It's just that EV charging networks don't have a legacy of letting you pay a person in a booth or using just a card to anonymously pay.
I already come across as pretty anti-capitalist but it's a reminder that as it's become possible to gate things with technology, it's clear that's all that was holding back large companies. Airlines that only let you order food using their app (which you need to create an account for). EV companies that only let you pay with their app. If Loblaws could force you to create an account to use their grocery stores, I think that they would.
I am not a tinfoil hat cash-only user, but it's clear that (without EU-style consumer protections) we're heading towards an anonymity-free future when it comes to interacting with commerce. (Which, blood on my hands, I helped nudge forward in my time doing database things at Shopify, I suppose).
I started using ListenBrainz and it recommended a user to follow who's recommendation list is distressingly similar to music I listen. Obviously: I asked for this, it's part of why I'm uploading, but it's alarming to find out there's a "type of guy" and you are it.
2024–W28 #
Sunday ~funday~ landscaping day. Dug out and levelled a spot for some pavers at the end of my side steps. I laid them and filled the gaps with sand and have levelled the steps do. Hopefully the last messing around with this I need to do before next year.
Using Directus CMS for Clink has made me far more likely to post there already. It's about a draw with Thymesheet -- no better, no worse.
Helen and I are going to Kingston, Ontario for a week. I'll still be working and we're taking Zeus, our foxhound. It'll be a nice change of scenery in the evenings and weekend though. I have not taken enough advantage of having adult children at home; one day it won't be possible to leave the house and know things will be taken care of. (Also we'll have to take the other dog or find someone to take her; neither of which I relish).
2024–W27 #
- Fit cadence and speed sensors to my bike
- I need to use Wahoo to use them? Strava doesn't support them directly? This sucks.
- Took the opportunity to do a few tweaks: aligned my bars to forks, put gunk in the tires, brought them up to 50psi
- BBQ'd for the first time in the season. It was okay. I need to be more patient at letting the coals get hot enough (i.e. start much earlier than you think you need to start)
- Got the 3D printer out of the basement. This SV06 is so solid; no calibration needed after a move and after 6 months sitting in the basement.
:chefkiss:
- Installed railings on my porch! Two sides done; one to go. (The fourth side is the house).
- Used the "RailBlazer" kit which I can recommend for both look and ease of installation. Needed to use a ratchet strap to constrain the shape to a square and not let things get trapezoidal, though.
- Attended Canada Day festivities for the first time ever (which also means the first time as a citizen π₯Ή)
- Metric were great despite their set being like ... 9 minutes long.
- Back using Thunderbird for the first time in a very long time (since I don't love Migadu's web mail). It's pretty great, actually.
- Read a bit into RocksDB, which is the backend for OutbackCDX
- And then inserted a bunch of CDX indices from Common Crawl's latest data
- And I found my own website in there, in
cdx-00295
. Well, a few pages from it, at least.
- And I found my own website in there, in
- This is kinda work-related I suppose, but I'm having fun.
- And then inserted a bunch of CDX indices from Common Crawl's latest data
- Tried a headless CMS: Directus
- In a way headless CMS' feel like a very simplistic and commoditized way to avoid having backend developers
- But I think of how many web systems I've built which could have been (or were!) powered by
phpMyAdmin
back in the day -- maybe CRUD is some very high percentage of all use cases?
- But I think of how many web systems I've built which could have been (or were!) powered by
- Switched
thymesheet
over to using one, though, by sharing a SQLite database. - Had a bit of an argument with Traefik to get this to work, it was easier to pick the routes Rocket still cared about than to do the same for Directus.
- Switched Clink over too -- the way it works it a Python script scrapes the JSON API and generates
.md
files and then Zola builds the site. Why yes, that is janky.
- In a way headless CMS' feel like a very simplistic and commoditized way to avoid having backend developers
- Started Scrobbling (kind of; uploading to ListenBrainz but I'd like to mirror to Last.fm too, might need to make my own scrobbler from Navidrome to that).
- Gotta say: after a few months I'm loving Navidrome and it has all the features that I want and apparently none that I don't want.
- I use Amperfy on iOS, use the webapp, and DSub on Android (where I have a dedicated old Android handset in the garage for music)
- Gotta say: after a few months I'm loving Navidrome and it has all the features that I want and apparently none that I don't want.
2024–W26 #
- Started week 26 at the right time!
- I should get a medal for this as I frequently end up putting stuff on the wrong week.
- FWIW ISO weeks start on Sunday.
- Moved email from Fastmail to Migadu because of layoffs that look like union busting πββ
- I also took the opportunity to bin SendGrid for ttw and some other places I sent email. I've felt like the free tier of SendGrid was a zero-interest-rate-phenomenon just waiting to be cancelled and the company is bullish on directly replacing labour with AI so fuck them, too.
- I guess it's the time of the year to be militant about labour and also SMTP.
- Did some more dithering code! I implemented Atkinson dithering and it's the most aesthetically pleasing so far. https://github.com/insom/dith/commit/00e4a4a620262d068673915b9c583e17344eac37
- Finished the 100 exercises from rust-exercises.com
- Some were fun and I could feel myself getting better at Rust; those "a-ha" moments.
- Some were weird and I got the tests to pass but I suspect I just tricked the compiler vs. solving them the intended way. That's the problem with test-driven learning (like Ruby Koans etc.) -- not every answer that passes means you learned what you were meant to.
- Tried out a new heart rate monitor for Strava rides. I also have a pair of rotational sensors to install to get my cadence vs. speed statistics.
- I set up a little Hadoop/HDFS minicluster at home to fill in gaps in my knowledge. If you see this "fill in my knowledge" theme lately: these are things I don't 100% need to know for my job (or I would learn them in work time) but that it bothers me that I don't know well enough. I like to speak with confident authority on a topic and that means using software, not just reading the docs about how it should work.
- Started using Bootstrap 5 for a little project. Having tried TailwindCSS and other modern things (which are probably better) it's still refreshing how quickly you can build something not-ugly with Bootstrap. There was a time around 2012 when it felt like every DevOps tool used Bootstrap: the undeniable attraction of making a pretty interface without having to learn (much) CSS.
- I learned Sieve, or at least enough to replicate my email filters.
- Wild that I've avoided it so long, considering I was a mail administrator for many years (as part of my job and also due to self-inflicted family responsibilities)
2024–W25 #
- Some oil painting: working on a portrait of my dog.
- Machining: Squaring up stock: my favourite! Kind of not joking though.
- Seems like some random offcut I found might be stainless, which is tough to machine.
- Not a great start π
- Continued to play Pandemic Legacy Season 1 -- it's really fun so far. Our group of four players is up to May (we won four in a row but just lost our first go at May).
- Considering creating some custom notepaper for typewriting notes on to, but (other than being fun) I can't really see a way that's going to improve over the (copious) notepaper I already have?
- Fun can be its own reward, of course.
- Finished my first week at the Internet Archive!
- Set up my Macbook and realized I probably need to refactor my dotfiles into something with actual conditionals (at least the
bash
parts). I probably should have done this as soon as I had non-Linux machines I logged into (NetBSD/Illumos) but the macOS really forces my hand here.- And that's how I found out that
which
on Illumos always produces output even when the path isn't found. - It took three attempts to get something that works across macOS/Illumos/Linux but now I'm happy.
- And that's how I found out that
- Relatedly: spent time with
pip
,pyenv
,ansible
,podman
and other, similar friends. - Set up a little link blog at https://www.insom.me.uk/C/
- It's just using Zola which is probably overkill for a few pages of HTML and an RSS feed -- but so would writing another SSG or webapp π€·
- It was my 21st wedding anniversary this week. Time flies.
- Met a former colleague for patio coffee which was a pleasant way to spend time on the hottest day of the year.
- Threaded an overlocking sewing machine. (iykyk)
- Read up on repmgr as my new friend for promoting and demoting PostgreSQL. At a core level, the steps are basically the same as MySQL, really.
- Set up a three node ScyllaDB cluster for fun(!) and poked it a bit, filling in some gaps in my knowledge. Found out that the amount of battery backed RAM on my SAS array gives SSD-like performance with the sizes of datasets that I'm using. Which is nice.
- Set up NoCloud
cloud-init
using ISO images for building things more quickly in my home lab. This was easier than when I first did it, but that was nearly a decade ago so ... you know you'd hope it's gotten easier?
2024–W24 #
- Wrote some
ansible
to automate make my home VM / physical machine / remote server set up more consistent- I haven't written any for about 8 years but tbh it hasn't really changed fundamentally
- And have decided to make some changes:
- Go all in on
neovim
vs. regularvim
(I was inconsistent machine to machine) - Use Debian packages instead of binaries for things I was running ad-hoc before (prometheus, thttpd, Caddy)
- Rotate my SSH key, which was way over due
- Remove the last Ubuntu machine under my control and replace it with regular Debian
- What with having to workaround things like
snap
andnetplan
I realized it was somehow more work to use the "easy" distribution
- What with having to workaround things like
- Go all in on
- Update: I replaced the Ubuntu machine. Now the Wireguard tunnel, HTTP Server, Traefik config, iptables etc. are all under Ansible management. I have so much more confidence in rebooting this machine now π
- I took this opportunity to make sure my VM in Wales also comes up cleanly post-reboot with some additional
/etc/network/interfaces
entries and theiptables-persistent
package.
- Sold a lot of stuff at a yard sale at the weekend. Quite a lot of work, and not a lot of return, but really the point is for less stuff to end up in landfill (or: in my garage). The rest got donated.
- Sometimes I think people will buy "bargains" at a garage sale that they would not pick up for free. No data behind this, just vibes.
- Seriously looking at getting my own AS, potentially just for me, for some v6 allocations.
- This week I have not drilled and tapped any 1/4-20 holes
- Met some former colleagues for dinner, which was a nice time
- Lots of yard work, during the time when it's not 33C or raining. Today was a nice 13C and basically dry π
- Moved quite a few random things that used to run in
tmux
sessions ποΈ to run underrunit
. Usedmk-runscript --add unprivileged insom
as root to give me my own sub-runit watching~/.service
- Not computers but I ordered a new bin store, a railing kit for the porch, new bins and two yard bags of gravel.
- Ordering is the easy part! Now I need to finish putting down weed-proof fabric and getting all of this stuff in place.
- The weather next week will be ridiculous (33C!) so these things will probably chill out in my garage for a while.
- Update: I installed the weed-proof and we built the bin-stores. I unloaded the railing pallet -- I'm not certain we'll get to that this week.
- Switched to
wezterm
overkitty
as I'm using Linux/Windows/MacOS and it seems like a good replacement which works on all three (and has agruvbox
theme π) - Picked up my new Macbook Pro for my new job (starting Monday!)
2024–W23 #
I attended BSDCan last week. It was good! It felt like going to one of the FLOSS UK (UKUUG) Spring conferences in production quality and general level of good will towards others. I've basically only gone to commercial conferences for the past ~7 years (save one: Processing Day).
I learned a few BSD bits which will be useful, especially that I can cross-compile all of NetBSD from a Linux host! This is great because I have much more powerful Linux hosts to use, so if I do some kernel development, the cycle times will be much shorter. π
Possibly more importantly; I learned some bits about speaking BGP and running an autonomous system. FRR is the new Quagga (which was the new Zebra). Chelsio make cheap but good(enough) 10G NICs. There's a carve-out to get a /24 of IPv4 if you are using it to help transition to IPv6 (for your first allocation). Good stuff! Also it just elevated my excitement levels, tbh.
Other stuff:
- I made a stand for my webcam with a heavy weight at the bottom, a telescoping part and 1/4-20 threaded bits at both ends. It decouples my monitor from my webcam which gives me way better options for video conferencing -- something I stopped caring about when I left work but I've had to care about a little more recently as I meet some folks online.
- It feels like drilling and tapping 1/4-20 is one of the main things that I use my milling machine for?
- Used Blacksheep on Python to do some poking around an API and persisting to a database with SQLModel -- both very pleasant and quick. Makes me wince when I think how much pain it was to do basically the same thing in Rust.
- Added a dark-mode to Thymesheet and a noisy background. π§βπ¨
- Continued to noodle with virsh/libvirt and now have live migration between two hosts working (when the guest uses an
nbd
storage device).- One important part was to select a subset of CPU features the heterogeneous hosts shared.
- It still feels like magic, after all of this time.
- Used my new VM host / guests to set up two BGP ASNs for internal testing.
- Blowing the dust off my Quagga knowledge (it's FRR now, as above).
- There's much more emphasis on allow-listing updates using route-maps than there was in the mid-2010s when I last did this stuff. (Good!)
2024–W22 #
- Refurbished my fountain pen and also added some additives (!) to some ink to make it all flow better.
- Really enjoying writing, slowly, with the fountain pen. Not quite sure why, but also: why not?
- Attending BSDCan for the first time. Also my first time in any of the University of Ottawa buildings.
- Excited to learn about ZFS and NetBSD things as well as a refresher on BGP/OSPF/etc. from a BSD perspective.
- Spent some time learning what I've missed in ~8 years of not really paying attention to the Python community.
- Lots.
- Typing, and libraries like Pydantic, Blacksheep and SQLModel are all kind-of exciting.
- I read Hexagonal Architecture Explained which I did not buy from this extremely fake looking website (which is probably real).
- It was okay? But it really felt like a few late stage drafts and not a full technical book. I think I got what I needed out it; I'm happy to have read it. Also one of the authors died under tragic circumstances so who knows what future polish passes the book might have gone through, otherwise.
- Dan and I came in third in his local pub quiz. Just wanted to boast really and if not here, then where? π
- I set up coc.nvim for completions in Vim (especially Language Server Protocol support) and it's an amazing change. I've written a few days of Rust without firing up VSCode. Helpful while doing the 100 exercises which would otherwise require changing workspace all the time.
- Also it's good with Python, especially when the Python code has type hints. Another +1 for typing.
- I did some interviewing and it was pleasant but also the normal amount of anxiety inducing.
- I do not feel super-motivated to work on making anything with code for myself right at this moment. idk why: I have been quite productive and motivated since March, even if I wasn't making massive strides. Perhaps because I am in a bit of an in-between state?
- Rebuilt the Sherline milling machine which got damaged at some point and has been waiting in a box for over a year for a fix.
- I don't really need it, but it's also not really valuable to sell.
- Originally I was going to sell my large mill and move back to the Sherline, but I am not confident anyone will buy that one. So now I have two.
- Decluttering my mind and also my garage continues. In some cases I've been able to just change my feelings towards a tool (like the milling machine: I don't want to create precision metalworks, but I don't need to get rid of the tool -- I can just accept that it's like a glorified drill press, and then I can happily use it knowing that not everything needs 25 microns of accuracy).
2024–W21 #
- Set up Grafana dashboard and Prometheus Exporters
- Including the sick looking Mastodon one!
- Wrote a letter to my niece
- Which required some pen maintenance; my fault for writing so rarely by hand
- Set up PostgreSQL binary and logical replication (separately)
- This is so much easier than it was in the past! The way it's implemented is powerful, like Shardlifter was (i.e. filtered replication is easy, as is heterogeneous database tables on the other end)
- But its downfall is tracking the DDL at the source database, ironically. (Also like Shardlifter, but unlike native MySQL replication).
- Much sorting and getting rid of things as I continue my mental and physical clear out of old hobbies.
- I bought a domain recently and set up email with Migadu for the first time. I like it. It's spartan but I feel I can trust it. Like; I still trust Fastmail too, but it's nice to see what's out there, especially if you don't need or want the app / webapp.
- I set up alerting (with Prometheus again) to go to Pushover. That familiar doorbell chime that was my on-call tone for several years at iWeb π₯
- I mounted a drilling vice to my mill and put back in the Jacobs chuck and now it's being used for lower precision things than it was made for -- but also it turns it from "the mill is for my hobby: machining" into "the mill is a tool we can all use for cutting stuff" which fundamentally suits us better, right now.
- Back making music with Reaper on my Windows machine with a grid controller. A pleasantly low-material approach.
- Was the wallpapering this week? If so: wallpapered. In the UK you mostly have plain paper that you paste up; but this stuff we got was peel-and-stick which seems more common over here. I don't love the process of hanging it, tbh!
- Finally created mounts for the 3x and 2x solar panel configurations. The 3x is on two strips of angle aluminium. The 2x is on re-used supports for an IKEA bed. Both required using the mill in its new configuration and it felt good to use it as a proper tool.
- Doing the 100 Rust exercises thing that did the rounds a little while back.
- Been a few weeks of minimal computering, so I don't want to lose my Rust muscle memory.
- I also did some asyncio Python, which is obviously much less of a leap.
2024–W20 #
Mostly: I went to Halifax, Nova Scotia, by sleeper train.
This makes this update less of a "what I got done" week notes, I'm afraid π€·
The Train:
- Good: The food, the general experience, seeing Canada.
- Good: The station is right down town!
- Bad: (for me) sleeping in a car which starts and stops is surprisingly unpleasant.
- Bad: The train was hours late due to freight having priority. Obviously: if you're taking a 23 hour train you are not in a hurry, but also what is the point of scheduled arrival times under this system?
I've never liked a city as quickly as I liked Halifax. The climate feels a bit closer to growing up in Ireland (over on the other side of the Atlantic), but is still definitely Canadian. There's Irish on signs occasionally, and on billboards. It's about half the size of Ottawa and has a heavily used (and seemingly sensible) transit system.
H and I enjoyed staying in an apartment, and really thought about the burden having hobbies which require so much space and material creates. We have both started serious clear-outs of our stuff and reprioritizing of hobbies since coming home. I'd rather enjoy doing 2 or 3 things well than be stressed by the ~10 things I could be doing, all of which I am bad at. The most obvious way this manifests is in tools, especially infrequently used ones like the welder. I don't want a huge heavy piece of equipment (and attendant safety gear) because once every year or two I want to join two pieces of steel. It's silly.
I have the longest gap in my GitHub history since leaving work, I think. I brought a computer with me on vacation, but aside from processing some photos, I didn't push anything anywhere or take part in any for-fun programming.
Speaking of which: I have my cameras set to using a high-contrast black and white filter and have Shotwell using the camera's RAW developer. As much as possible I am trying to commit to shooting 4:3 or 1:1 monochrome this year. I took more photos on vacation than for months before that; I'd really like to shoot more.
Finally: I cracked my rib removing the tumble dryer so our washing machine could be replaced. It sucks: it's a small enough issue to not need treatment or painkillers (yay) but a big enough issue to stop you doing things and it's still, you know, a bit painful.
2024–W19 #
It's a new week!
I racked that really big server and I am really impressed and pleased with it. It has quite a few quality of life features that weren't common the last time I was dealing with rack mount gear (which was almost always Dell): internal USB and even an internal SD card slot -- although I don't know if that works as a boot device.
This particular machine has onboard hardware RAID but also has an external hardware RAID in the only currently-usable PCIe slot. The RAID card as a 1GiB NVRAM pack installed, so writes are super-quick. I had forgotten that disks can be fast when you have a battery backed write cache ahead of them. Lovely.
I re-learned some libvirt/virsh stuff at an accelerated pace. Last time I did this, at iWeb, we used libvirt directly for a while before switching over to CloudStack as a management layer. Gotta say: CloudStack hasn't really moved on, it seems, since I last used it. Maybe that's because it's mature? But also maybe that's because it's legacy. Maybe those things mean the same thing π
I've also tried out SFTPGo which is a neat piece of open-source software that does most of what iWeb FTP did. (We had to write iWeb FTP, but now anyone could host basically the same thing for free, as long as they adhere to AGPLv3. Progress!).
I caught up with friends at the weekend so there's less to show on GitHub, but between migrating my OmniOS hosts to VMs and testing out live migration between machines in my home rack; I think I've done enough computering. (Also: we're playing House of Ashes from the Dark Pictures Anthology at home, so that's taking up most of the evening after dinner-time).
This is the week I go to Halifax! I'll update this to be in the past tense, after it happens.
Misc:
- Set up PostgreSQL replication for the first time in a long time.
- Just
physical
so far,logical
is up next.
- Just
- Put blank Windows 10 installs on the ThinkCentres ahead of selling them.
- Added an RSS feed to
thymesheet
. - Moved up to OmniOS r151050 -- exciting because it supports VirtIO SCSI. I'm not using the SCSI driver yet (still virtio-blk) but now that it's possible I'll probably move over.
- Theoretically this could allow hot-adding devices to a running OmniOS VM, although quite a few pieces need to be joined up for that to happen.
- Set up an IPFS node for pinning files.
- I'm interested in the tech, although it is a little cryptobro-adjacent.
- Especially in how it could be used for serving media attached to fediverse posts, instead of the current paradigm of copying them to every server's cache folders.
- I'm interested in the tech, although it is a little cryptobro-adjacent.
2024–W18 #
- Played with local AI via ollama -- Mistral and llama3 models, specifically.
- Running it locally makes me feel less icky, not sure why?
- Glued up the "rows" of 2x4s for my chopping block, in sets of two.
- Not going to lie: played a fair bit of Fallout 4 this week.
- The new update came with new Enclave quests!
- But it also came with many new bugs.
- Bethesda giveth, and Bethesda taketh away.
- I have a compiling, but not working, version of my LCD code and some other stuff is messed up.
- Just compiling caused an OOM kill until I updated Rust. sigh.
- Update: I figure out that blocking on a future from sync code which was, itself, waiting for async task to complete somewhere else will never work.
- So I basically reverted the top commit, but at least I understand why I had to do that.
- I have come full circle: Embedded HAL is good, actually. π
- So I basically reverted the top commit, but at least I understand why I had to do that.
- Looked at async Python and IRC bot writing
- Wrote a little Python to backup an old old blog and move it to Zola. but also thinking about buying servers and about a MySQL proxy because of a conversation with PD.
- Fixed
lemonbar
multi-monitor support when using mirrored displays!- Fixed it wrong, once, then correctly (I think) the second time.
- Made twm look and act nice, as a cope for the fact GNOME is totally broken on my Thinkpad 440p for ... some ... reason.
- This has taken the place of 9wm and mwm as my "window managers for very constrained machines". For now, hah.
- Deployed thymesheet -- you're swimming in it.
- Did some CAD with Plasticity: just a little design to cover the lightbulb sconces in my en-suite.
- It kind of sucked? Like it was easy to get the shape I wanted, but getting it dimensioned like you would with CAD was frustrating. It made me think about using OpenSCAD, tbh.
- Then I took that STL and did CAM to it with PyCAM. The output was pretty poor.
- I think PyCAM fundamentally wants to work either in a spiral (with square edges) or back and forth rastering over the design. I'm not confident that would ever produce the results that I want, even with a crazy high step-over?
- I'm trying again with Fusion 360.
- Shocker: this was much better.
- Did some Rust exercism. Solving the problems once and then getting to see others answers and going for second or third iterations is a great feature. AoC doesn't encourage you to make your solution nicer; once you have the right answer you're done.
- Of course, AoC is for a different purpose, but I personally know a lot of people who use it as an excuse to learn a new language. Might as well learn it well?
- Also: first time writing a macro and I nailed it.
- One thing off the long-term project list: used those 433MHz modules to both receive and clone a simple OOK transmitter.
- I wrote the code in Rust using the
rp2040-hal
andembedded-hal
!- And I ported it to the Trinket M0 crate with minimal code changes (most of the time went on getting uploads to flash working with
cargo embed
)
- And I ported it to the Trinket M0 crate with minimal code changes (most of the time went on getting uploads to flash working with
- I wrote the code in Rust using the
2024–W17 #
- More or less "finished" Thymesheet, in that it's usable.
- Ripped out
diesel
and replaced it withsqlx
and I am much happier. - Did a reasonable refactor and also use DI to pass in a database.
- Ripped out
- Met up with three friends this week; a really nice time.
- Set up the CCTV at Stevenage
- Made OSM contributions!
- One of which felt like a subversive act (moving City View)
- Wrote an ActivityPub implementation which works well enough to DM myself with.
- Disk usage dropped on
ttw
as turning off versions kicked in (it starts a 7 day countdown, I suppose to stop it being a footgun?) - Hobby machining with conductive materials.
- Skinned Thymesheet with regular CSS. I think this is another case where people are scared to write CSS so they write ten times as much HTML? idk, I just don't get it.
- Set up a local LLM server (ollama)
- I don't feel guilty using this in the way I would paying for ChatGPT?
- It's mostly a curiosity, but it is kind of compelling and surprisingly "lucid"
2024–W16 #
- I waxed a pair of jeans with a hot air gun and a double boiler. I wasn't thrilled with the results but tried again using a crock-pot (for melting) and an iron with parchment paper (for setting) and it was miles better.
- I made a weight?
- It's basically a piece of steel with an M8 tapped into it and an eye hook but it was cool to tap a material that was so hard.
- I had to expand the hole with the metal mill.
- I painted it, but hated the paint job.
- So I sandblasted it clean again.
- It was a lot of work for one weight!?
- Added
markdown
tothymesheet
and learned a bit more about how to useMap<>
in Rust. - Tapped a 1/4-20 hole into two different bases for lights that I have around my office.
- One for a fill light Shopify provided.
- One for a little mini-spot that's usually camera mounted.
- Pleased with these little modifications.
- Dyed the armchair cover black.
- It came out purple.
- Rit is not magic.
- It came out purple.
- Wrote a Solarized GL shader and customized my colour setup, a little unproductively.
- But I had fun!
- Sandblasted some stuff.
- Thinking that the space vs. usefulness trade-off of the sandblaster is not good.
- Lunch with CL while I was in the city at coworking.
- Back to some Tailwind and DaisyUI
- I am not loving it.
- For now I went back to just writing CSS. CSS is easier?!?
- Got injected Config working in Rocket for Thymesheet.
- It's kind of nice how you can do dependency injection, even if I initially complained about it
- Update from the future: it continues to rock!
- It's kind of nice how you can do dependency injection, even if I initially complained about it
- I reworked my desktop / office computer situation. Have a terrible Windows machine ("of last resort") and will work on simplifying what I do until it fits into a Linux-only world.
- Reaper on Linux is a pretty great step in that direction. I have a few plugins set up there and it's actually nice not to have the overwhelming setup that I had on Windows.
- No two ways: I am going to miss Fusion 360. If not for modelling, then for CAM. (But also for modelling).
2024–W15 #
- Watched the eclipse!
- Learned about Traefik and deployed it on
merked
andruxton
. I really like it so far. So much smaller config thannginx
was. - Started working on Thymesheet from co-working.
- Installed Navidrome and I like it, too. Gives me my own music with almost the convenience of streaming platforms.
- I looked into ARIN registration. Seems like there's a "Catch 22" of needing to show you'll immediately need resources before you are allowed to have any?
- Tried different Bittorrent clients because Transmission was semi-broken on
pk
but they all had their downsides. Just decided to not use Bittorrent for now as that side-path was a time-sink. - Bought (from KJP) and laminated (with glue?) some wood, for carving two-tone plaques.
- Lamination turned out well!
- Burned time on SQLite3 on Windows. Got there in the end. Second time I've done this?
- Burned time on setting up Tempo and a local S3 server (Garage) -- decided to park this.
- Maybe Pyroscope is more appropriate?
- Maybe I should finish building a slow thing before I need distributed tracing for it.
- Processed all of those twisted 2x4s for a chopping block.
- Figured out MiniDisc uploading from Chrome via WebUSB!
- Found an 11 million file leak in my Mastodon media: it was having multiple versions of files enabled.
- Ported some of Dith to Rust. It was enjoyable.
- Implemented traits on other people's types! A mind expanding moment.
- Return a
Box<dyn Error>
which makes?
operator more useful for scrappy scripts. - I am starting to accept that I can't understand all of Rust all at once, and that's not necessary to be productive in it. I need to accept some of it is magic (although, arguably, less magic than Rails is).
- I made enchiladas with my own recipe and they rocked.
- I'll never be able to make them the same way again, probably.
- I designed and CNC-cut molds for wax cylinders that knitting machines need.
- Then I did the pour and had to cut the other side of the wood to free the wax.
- But ultimately it worked really well! Even if it destroyed the mold in the process, I made nine.
- Then I did the pour and had to cut the other side of the wood to free the wax.
- I made firelighters with sawdust and beeswax.
2024–W14 #
I saw this freewheeling dev log and was inspired by that. Something like that, mixed with eightbitraptor's week notes seems like something I want: something to keep track of what I actually do in a week, with a bend towards creative things that might otherwise get forgotten.
(So I wrote a little CMS in Rust as an exercise. It took basically two weeks, on and off, but I've not written a non-trivial Rust app from scratch so most of that time was learning.)
I thought about what programming languages are aesthetically pleasing and actually pleasurable to write in. I read Devin's thoughts about uxn and framed as: a language I can potentially use for the rest of my career that I don't pick for outside pressures.
The language(s) that fit that, for me, are Python and Go. Despite this, I convinced myself to learn Rust. It just has so much potential to unify the types of programming I do. I could stop writing C if I can do Rust from microcontroller to monolith.
I am still strongly prefering Go to Rust, although I've not written much of either in a week. I went back to my Go version of Whap (note: an internal app I was working on porting to Rust) and felt literal relief at how simple it is. But I did get my embassy version of the LCD code written, I guess.
The CTF I went to with tahnok made me aware that Python is still my quick-and-dirty-prototype language. Will Go get to the point that I enjoy it or find it fast enough for that quick and dirty development? Will Rust?
Random Stuff:
- Treated the steps and bench with linseed oil
- Rearranged the garage
- Thought a bit about canvas waxing
- Renovated my Panavise