A busy, exhausting work week punctuated by surreal moments that shall remain forever secret.
Monday, 2024-03-04
Woke up at 4AM, which kind of set the mood for the day.
- Powered through my morning calls by dint of using my standing desk and doing my best to keep a flask of coffee level.
- Found new and enthralling ways to pick up 99 individual DuPont connector sheaths off the floor (Note to self: do not shake shipping baggies like sugar packets to settle the contents, because like sugar packets, they can have unseen rips). I have no idea if the missing one parachuted off the plane from China or if it is stuck in a cranny someplace.
- Received a Keychron K7 Max (which I will be writing on–and about–at length in due time) and another set of replacement fans for my 3D printers. For someone who hates fans, I certainly spend a lot of time and effort trying to find quiet ones.
- Managed to do a little more yak shaving and bump a few more items off my To-Do list, this time to streamline doing some repetitive tasks with images:
- Decided to grab some naturally-occurring Vitamin D before the last call of the day.
- Was unsurprised by Nintendo nuking two emulators off the face of the Earth in one fell swoop. Decided to wean myself off the Switch when I finish Tears of The Kingdom (which should happen sometime in the next 5 years or so at this rate).
Tuesday, 2024-03-05
Had to make a trip to the office again, which is becoming far more usual this year than I expected, so my free time was shot.
- Got a new set of soldering helping hands in the mail. They’re not as nice as the exquisitely designed Omnifixo, but I really needed to find something that could hold bigger than “Pi-sized”
PCB
s and where I could fasten both an endoscope camera and a large (20cm across) Fresnel lens I have someplace. And yes, I should get a soldering microscope, but all the niceHDMI
ones are outrageously expensive. - Got some P1P rubber feet and printed out some
PETG
holders to fasten them to the SK1. - Had a somewhat unexpected early evening meeting.
- Printed a Califlower to check and correct the SK1 for skew and dimensional error (which was minimal, but still a fun exercise). I suspect there are a lot of identical coasters in my future.
Wednesday, 2024-03-06
I have only vague recollections of the day, which was so productive work-wise that it risked spilling over and nuking my quality time.
- Re-charged the batteries and cleaned the lenses on my Canon compacts–I still have an S95 and an SX710HS which I decided to start using again as more than a fashion statement towards “real” photography.
- Had something like 5 calls in a row, including a couple of surprise ones that upended my work schedule a fair bit.
- Had a quick lunch and benchmarked things that must not be named on the AceMagic AM18 (which is still running Bazzite), because who knows for how long that’s going to be possible. Spoiler: it can do a lovely 4K at almost 30fps, and the bottleneck seems to be mostly on the
iGPU
side. I suspect that 30fps with some aliasing tweaks are entirely possible, but am going to move on to other workloads ASAP because I need to get back to my AI stuff. - In the meantime, printed more Califlower coasters, this time on the KP3S Pro. Calibrating printers is a meditative experience, and it’s such a nice respite from work than even though I have a brand new one, all my desks are overrun with components and parts and I only have one unencumbered flat surface at shoulder height, I’m already considering if I shouldn’t build a new printer from kit.
- On the tails of the above, spent a while spread throughout the day trying to re-pack the stuff that needs to be atop my electronics workbench into something functional.
- Wrote a fair bit on the Keychron K7 Max and started fiddling with VIA to tweak a couple of things to my liking, but in the end went straight for raw QMK config editing, because simple macros didn’t cut it.
- Had another somewhat unforeseen late night meeting.
- Spent a couple of hours poring over ESP32 C code to decompress and tried to get to bed early.
Thursday, 2024-03-07
Woke up at 4AM again with a splitting headache (either travel doesn’t agree with me or late night meetings, and I suspect both).
- Celebrated #MARCHintosh by using my lovely Platinum
XFCE
remote desktop to start a Basilisk build in the wee hours of the morning. I have plans for something portable, but am not sure it will get done this month. I would love to join the Global AppleTalk Network people are setting up, because it is so wonderfully nostalgic… - Another set of meetings that overran my lunch hour. Ate at 2PM, did chores, went back into the fray.
- Had another late night meeting that, well, reminded me of the “may you live in interesting times” mis-quote.
Friday, 2024-03-08
Miserably rainy day. Woke up exhausted.
- Got reacquainted with
btop
, which despite looking either like a “l33t” tool or like pants on a standard terminal is a great all-in-one solution for monitoring CPU, GPU, I/O, disk usage and network traffic and saves me the trouble of constantly installingiotop
andhtop
. - Hacked together a kludgy Python script to mirror GitHub release artifacts. You know, just in case:
from os import environ, listdir, makedirs
from os.path import join, exists, getmtime, isdir
from shutil import rmtree
from json import loads
from asyncio import run, create_task, sleep, create_subprocess_shell
from asyncio.subprocess import PIPE, STDOUT
from aiohttp import ClientSession
from logging import basicConfig, INFO, DEBUG, WARNING, getLogger
basicConfig(level=INFO, format='%(asctime)s %(levelname)s %(funcName)s:%(lineno)s %(message)s')
log = getLogger(__name__)
PROJECTS = environ.get('PROJECTS', 'Ryujinx/release-channel-master').split(',')
ARCHIVE_PATH = environ.get('ARCHIVE_PATH', 'releases')
RELEASE_COUNT = int(environ.get('RELEASE_COUNT', 5))
async def fetch(path: str, url: str) -> None:
proc = await create_subprocess_shell(f"wget -P {path} -N {url} -qnv", stdout=PIPE, stderr=PIPE)
log.info(f"fetching {url} to {path}")
stdout, stderr = await proc.communicate()
log.debug(stdout)
log.debug(stderr)
async def main() -> None:
async with ClientSession() as session:
for project in PROJECTS:
log.debug(f'Fetching releases for {project}')
async with session.get(f'https://api.github.com/repos/{project}/releases') as response:
data = await response.json()
filtered_data = [element for element in data if ((element["draft"] != True) and (element["prerelease"] != True))][:RELEASE_COUNT]
for release in filtered_data:
folder = join(ARCHIVE_PATH, project, release['tag_name'])
if not exists(folder):
makedirs(folder)
for asset in release['assets']:
if not exists(join(folder, asset['name'])):
create_task(fetch(folder, asset['browser_download_url']))
await sleep(0.1)
folders = [f for f in listdir(join(ARCHIVE_PATH, project)) if isdir(join(ARCHIVE_PATH, project, f))]
log.info(f"checking for old releases in {project}")
if len(folders) > RELEASE_COUNT:
folders.sort(reverse=True)
folders = folders[RELEASE_COUNT:]
for folder in folders:
log.warning(f"removing {project} release {folder}")
rmtree(join(ARCHIVE_PATH, project, folder))
if __name__ == '__main__':
run(main())
- Ended the day with another early evening call, and then just crashed without even managing to read a book
Saturday, 2024-03-09
Decided this was going to be a procrastination-friendly weekend, so after reading the news I went full on random geekery mode:
- Tweaked my GitHub release mirroring script and checked it into my local Gitea instance.
- Decided to fully upgrade Klipper on my KP3S Pro (which I’d kept stable until getting the SK1, so now I can use it for bleeding edge stuff again) and replace the puny 40mm internal fan with an 80mm one (my working theory is still that the Y layer shifts I’m seeing occasionally stem from poor cooling).
- Tested Moonlight on the Zero 3 again to take some screenshots. Then, for the sake of science, I installed
moonlight-embedded
on a Raspberry Pi Zero 2W and actually played stuff on it:
- Printed a couple of school projects for the kids.
- Since I needed a long duration print to test whether my KP3S Pro was fixed, I printed my first miniature:
This may turn out to be addictive, but not yet. I don’t really fancy accumulating pretty dust collectors and am happy with sticking to functional parts…
Sunday, 2024-03-10
Election day, which I had completely forgotten about. I mean, it’s not as if Portugal has been under particularly effective government for a few years now.
- Did some sysadmin stuff.
- Voted. Found the number and naming of political parties hilarious (I remember when it was less than half a page).
- Dove into
IKEA
for a bit of strategic storage implement acquisition (I always knew there would be a pegboard in my life sometime). - Got a
VINDSTYRKA
air quality sensor (that uses Sensirion hardware and Thread) to try out, because my homegrown solution is tying up a Zero W I have other uses for and the poor Enviro+ board design generates inaccurate temperature readings since the cursor is too close to the Pi CPU. I do lose the ability to do my own metrics, but theVINDSTYRKA
“just worked”–I paired it with myzigbee2mqtt
network by tapping the pair button four times (took me a while to figure that out, as it isn’t documented in the booklet), and it immediately popped up in HomeKit and I can get centralized metrics from it, so… Net win, I guess. And yes, I’ll be checking the actual metrics in detail as soon as I have some time (I’ve got a vague “revise home IoT telemetry” entry in my TODOs since last year). - Upgraded
ollama
on my test machines and resumed fiddling withLLM
s–this time I did someRAG
over my notes, which might not have been the best of ideas:
Decided to call it a day and do non-computer stuff afterwards.
Update: I went to check on my desktop Mac (a Mac Mini M2 Pro) and it had spontaneously rebooted barely 15 minutes before I got to it. I started digging into the logs (
log show --last 45m
is your friend) and saw nothing obvious except this:
... 2024-03-10 18:43:55.246304+0000 0x1743 Default 0x0 0 0 kernel: (AppleThunderboltNHI) AppleThunderboltGenericHAL::lateSleep - complete - took 0 milliseconds 2024-03-10 18:43:55.246312+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformSleepAction -> AppleThunderboltHALType5 2024-03-10 18:43:55.246326+0000 0x1743 Default 0x0 0 0 kernel: (AppleThunderboltNHI) AppleThunderboltGenericHAL::lateSleep - complete - took 0 milliseconds 2024-03-10 18:43:55.246332+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformSleepAction -> AppleThunderboltHALType5 2024-03-10 18:43:55.246346+0000 0x1743 Default 0x0 0 0 kernel: (AppleThunderboltNHI) AppleThunderboltGenericHAL::lateSleep - complete - took 0 milliseconds 2024-03-10 18:43:55.246355+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformSleepAction -> AppleThunderboltHALType5 2024-03-10 18:43:55.246369+0000 0x1743 Default 0x0 0 0 kernel: (AppleThunderboltNHI) AppleThunderboltGenericHAL::lateSleep - complete - took 0 milliseconds 2024-03-10 18:43:55.246378+0000 0x1743 Default 0x0 0 0 kernel: PMRD: trace point 0x18 2024-03-10 18:43:55.246641+0000 0x1743 Default 0x0 0 0 kernel: PE_cpu_power_disable>turning off power to cluster 1 2024-03-10 18:43:55.246810+0000 0x1743 Default 0x0 0 0 kernel: PE_cpu_power_disable>turning off power to cluster 2 # Last line before crash 2024-03-10 18:43:55.246836+0000 0x1743 Default 0x0 0 0 kernel: PMRD: trace point 0x19 2024-03-10 18:52:57.788824+0000 0x1743 Default 0x0 0 0 kernel: PMRD: trace point 0x23 # ^^^ First line after crash #...lots of IOPlatformQuiesceAction -> AppleT8101GPIOIC and similar stuff elided 2024-03-10 18:52:57.788995+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 1 2024-03-10 18:52:57.789010+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 2 2024-03-10 18:52:57.789017+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 3 2024-03-10 18:52:57.789026+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 4 2024-03-10 18:52:57.789039+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 5 2024-03-10 18:52:57.789041+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592453]: arm_cpu_init(): cpu 1 online 2024-03-10 18:52:57.789054+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 6 2024-03-10 18:52:57.789055+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592462]: arm_cpu_init(): cpu 2 online 2024-03-10 18:52:57.789057+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592458]: cpu_start() cpu: 5 2024-03-10 18:52:57.789068+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 7 2024-03-10 18:52:57.789080+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 8 2024-03-10 18:52:57.789086+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592498]: arm_cpu_init(): cpu 4 online 2024-03-10 18:52:57.789098+0000 0x1743 Default 0x0 0 0 kernel: cpu_start() cpu: 9 2024-03-10 18:52:57.789100+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592508]: arm_cpu_init(): cpu 5 online 2024-03-10 18:52:57.789111+0000 0x1743 Default 0x0 0 0 kernel: PMRD: trace point 0x22 2024-03-10 18:52:57.789113+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592522]: arm_cpu_init(): cpu 6 online 2024-03-10 18:52:57.789121+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformWakeAction -> AppleThunderboltHALType5 2024-03-10 18:52:57.789134+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformWakeAction -> AppleThunderboltHALType5 2024-03-10 18:52:57.789145+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformWakeAction -> AppleThunderboltHALType5 2024-03-10 18:52:57.789150+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592555]: arm_cpu_init(): cpu 8 online 2024-03-10 18:52:57.789152+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592564]: arm_cpu_init(): cpu 9 online 2024-03-10 18:52:57.789165+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformWakeAction -> AppleThunderboltHALType5 2024-03-10 18:52:57.789167+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592564]: arm_cpu_init(): cpu 9 online 2024-03-10 18:52:57.789169+0000 0x1743 Default 0x0 0 0 kernel: [ 7257.592564]: IOPlatformWakeAction -> AppleThunderboltHALType5 2024-03-10 18:52:57.789181+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformWakeAction -> AppleMCA2Switch 2024-03-10 18:52:57.789373+0000 0x1743 Default 0x0 0 0 kernel: IOPlatformWakeAction -> IODTNVRAMPlatformNotifier ...
…so I went and filed Feedback FB13682232
, in hope that Apple can make some sense of it. Smells like a kernel bug to me.
Update 2: I managed to get the panic log by logging in as an admin user, and the first lines are:
panic(cpu 0 caller 0xfffffe002fc97ce8): Wake transition timed out after 35 seconds while calling power state change callbacks. Suspected bundle: com.apple.driver.AppleThunderboltNHI. Thread 0x1bff1f.
Debugger message: panic
And guess what, this particular kind of issue with com.apple.driver.AppleThunderboltNHID
has been reported since the M1 days.
I’m going to update Feedback FB13682232
, but I’m not holding my breath given how long this issue has been around.