2024 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2024-W01 (202401) 2024-W02 (202402) 2024-W03 (202403) 2024-W04 (202404) 2024-W05 (202405) 2024-W06 (202406) 2024-W07 (202407) 2024-W08 (202408) 2024-W09 (202409) 2024-W10 (202410) 2024-W11 (202411) 2024-W12 (202412) 2024-W13 (202413) 2024-W14 (202414) 2024-W15 (202415) 2024-W16 (202416) 2024-W17 (202417) 2024-W18 (202418) 2024-W19 (202419) 2024-W20 (202420) 2024-W21 (202421) 2024-W22 (202422) 2024-W23 (202423) 2024-W24 (202424) 2024-W25 (202425) 2024-W26 (202426) 2024-W27 (202427) 2024-W28 (202428) 2024-W29 (202429) 2024-W30 (202430) 2024-W31 (202431) 2024-W32 (202432) 2024-W33 (202433) 2024-W34 (202434) 2024-W35 (202435) 2024-W36 (202436) 2024-W37 (202437) 2024-W38 (202438) 2024-W39 (202439) 2024-W40 (202440) 2024-W41 (202441) 2024-W42 (202442) 2024-W43 (202443) 2024-W44 (202444) 2024-W45 (202445) 2024-W46 (202446) 2024-W47 (202447) 2024-W48 (202448) 2024-W49 (202449) 2024-W50 (202450) 2024-W51 (202451) 2024-W52 (202452) 2025 2025-W01 (202501) 2025-W02 (202502) 2025-W03 (202503) 2025-W04 (202504) 2025-W05 (202505) 2025-W06 (202506) 2025-W07 (202507) 2025-W08 (202508) 2025-W09 (202509) 2025-W10 (202510) 2025-W11 (202511) 2025-W12 (202512) 2025-W13 (202513) 2025-W14 (202514) 2025-W15 (202515) 2025-W16 (202516) 2025-W17 (202517) 2025-W18 (202518) 2025-W19 (202519) 2025-W20 (202520) 2025-W21 (202521) 2025-W22 (202522) 2025-W23 (202523) 2025-W24 (202524) 2025-W25 (202525) 2025-W26 (202526) 2025-W27 (202527) 2025-W28 (202528) 2025-W29 (202529) 2025-W30 (202530) 2025-W31 (202531) 2025-W32 (202532) 2025-W33 (202533) 2025-W34 (202534) 2025-W35 (202535) 2025-W36 (202536) 2025-W37 (202537) 2025-W38 (202538) 2025-W39 (202539) 2025-W40 (202540) 2025-W41 (202541) 2025-W42 (202542) 2025-W43 (202543) 2025-W44 (202544) 2025-W45 (202545) 2025-W46 (202546) 2025-W47 (202547) 2025-W48 (202548) 2025-W49 (202549) 2025-W50 (202550) 2025-W51 (202551) 2025-W52 (202552) 2026 2026-W01 (202601) 2026-W02 (202602) 2026-W03 (202603) 2026-W04 (202604) 2026-W05 (202605) 2026-W06 (202606) 2026-W07 (202607) 2026-W08 (202608) 2026-W09 (202609) 2026-W10 (202610) 2026-W11 (202611) 2026-W12 (202612) 2026-W13 (202613) 2026-W14 (202614) 2026-W15 (202615) 2026-W16 (202616) 2026-W17 (202617) 2026-W18 (202618) 2026-W19 (202619) 2026-W20 (202620) 2026-W21 (202621) 2026-W22 (202622) 2026-W23 (202623) 2026-W24 (202624) 2026-W25 (202625) 2026-W26 (202626) 2026-W27 (202627) 2026-W28 (202628) 2026-W29 (202629) 2026-W30 (202630) 2026-W31 (202631) 2026-W32 (202632) 2026-W33 (202633) 2026-W34 (202634) 2026-W35 (202635) 2026-W36 (202636) 2026-W37 (202637) 2026-W38 (202638) 2026-W39 (202639) 2026-W40 (202640) 2026-W41 (202641) 2026-W42 (202642) 2026-W43 (202643) 2026-W44 (202644) 2026-W45 (202645) 2026-W46 (202646) 2026-W47 (202647) 2026-W48 (202648) 2026-W49 (202649) 2026-W50 (202650) 2026-W51 (202651) 2026-W52 (202652)

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.