< | >

Hacker's Diary

A rough account of what I did with Emacs recently.

January 29
Slightly weird behaviour observed on the server I dragged up to Debian 11: about once a week it loses its default route. Nothing immediately obvious leaps out from the config files I've looked at, but on the other hand I'm more of a RedHat person so there's a certain amount of "that looks right" going on here. For now I've just stuck in a cron job which restores the default route if it's missing.

The handy side-effects of writing your own software for something: I had the car charger replaced because the original one had a red LED on it for a bit that indicated there may be a fault. It did revert back to normal operation, but I'm wary of anything that horses around with high currents, so I figured a straight within-warranty swap was not something to quibble with. Problem: possibly because someone missed a step, I now have two chargers registered to my account with the manufacturer, and their app - not a great piece of software by any stretch of the imagination - explicitly does not cope with that. HOWEVER. I had reverse-engineered the protocols in use and built my own scripts; one the initial hacky CLI thing, the second a MQTT-based doodad to hook up to OpenHAB. The former needed a little tweaking to work with the new charger because I'd hardcoded it to use the first charger in the list returned by the API, same as I'm guessing the app does. Once I made the script somewhat list-aware and added a switch to select a specific charger, it worked almost perfectly. I was more impressed with my MQTT doodad, though: it automatically picked up the new charger and told OpenHAB about it. I was missing one piece of detail to get the cloud-based data, which I picked up this evening through the simple expedient of plugging in the car and then using the CLI tool.

(yes, the API returns a list of chargers, and the app does not know what to do with that.)

(the missing detail was what seems to be a charger-specific session ID which isn't, as far as I can tell, any of the other numbers I have lying around for the charger (serial number, "address", etc.) and I'm not immediately clear on where it's derived from or looked up, just that it seems to be different per charger; however, once you're charging and you ask the charger, "hey, what's going on right now?" it reports back with a bunch of details including the session ID.)

January 28
Went to see The Fabelmans in the cinema. Two and three quarter hours of fictionalised "Stephen Spielberg Grows Up" and just at the point where I thought the movie might actually start, it comes to an abrupt ending with a visual gag based on the previous scene. This was like amateur hour at the movies except with a budget of millions. You know how a story's supposed to have a beginning, a middle, and an end? This felt like it never got past the beginning. A biopic, in order to appeal to the audience, needs to have a narrative that may not reflect what happened with 100% accuracy; characters may be merged, details may be dropped, things may be shifted around in time. Otherwise you're making a documentary. This movie felt like it should've actually leaned into the documentary style because there was no narrative, and there were a bunch of characters who show up, are somehow important, but disappear and are never seen again, and who knows about the timeline thing. There's a bunch of places where pithy wisdom is imparted, or setups for later scenes are apparently being created, except the payoff for those never shows up. It's like violating Chekov's directive about guns in the first act, but doing that at every possible opportunity. Probably the only part of this that I actually enjoyed were the home movie sequences where you saw young Stephen Spielberg Sammy Fabelman capturing friends and family on camera, then editing, then showing the finished result. The rest? One very, very, very large "MEH".

January 22
Watched Clerks for the first time in a very, very long time. It holds up surprisingly well; the dialogue feels a lot more stilted and set up for a stage (rather than screen) performance than I recall, and it's at least as filthy as I recall. But there's a general lack of punching down in the humour because, I guess, the characters are all the people you'd punch down on, so the only way for them to punch is up; there's also that vibe from High Fidelity where Randall feels he's above his customers in the same way as Dick, Barry, and to some extent Rob.

January 21
Harry Brown was a good deal more of a movie than last night's fare. It was also pretty grim, to be honest.

January 20
Well, that's mildly annoying: selecting a checklist in the Notes app and pasting it into a textfile gives you a raw markdown checklist. Selecting that markdown checklist and pasting it into the Notes app gives you ... raw markdown.

Bulltet To Bejing started out ok but kinda devolved into "you spent all your money on Michael Caine and had none left for a script".

January 15
Season 2 of Mrs. Maisel and... we're in Paris? Ok, we're in Paris.

January 14
Rush: second time watching this and I spent more time this time wondering (a) how much CGI vs. practical was involved in the race sequences and (b) how much of the Hunt/Lauda rivalry was overemphasised for the sake of the story. Good movie, though.

January 13
Out for booze and a chat with a friend I've not seen in, erm, several years.

January 12
Last episode of season 1 of The Marvelous Mrs. Maisel tonight. Great finale: I particularly like that it was written as a potential series end - there isn't a giant TUNE IN NEXT SEASON hook dangling from the episode, but at the same time there's plenty room to continue the story. This is really good, and we'll be watching more of it.

January 11
Another oddball thing I've encountered: I have a piece of code running on the home automation box which uses TMPDIR to create a lock file. Every so often this crashes out with an error indicating that ... TMPDIR isn't in the environment. If it were always the case, I'd understand, but how does something randomly not have this set?

January 10
I have a notion to see if I can sync Apple Notes with the reMarkable, which of course requires accessing the Notes. This used be handy enough, as they were just IMAP messages stashed in a hidden folder - or hidden if you accessed the server with Mac Mail. Any other IMAP client would happily show it to you. However, somewhere along the line Apple changed that; from what I'm reading, I infer that at some point the IMAP messages became iCloud shared files, and now they're iCloud shared database records. My usual tool for this sort of thing is Python, but the de facto standard Python interface to iCloud appears to have been abandoned in February of last year (I say "abandoned" because there's a bug with what looks like a trivial fix in the code, and it's been reported but remains unfixed in almost a year) so its support for notes hasn't advanced past the infered shared files approach, which I've apparently migrated away from in my iCloud account. More searching revealed that someone has a more recently-modified nodejs interface, but, well, nodejs. So I am now signing up to port the relevant parts of the nodejs code back into the python code, I guess. (By "signing up", I mean I'll probably hack on this for personal use because I don't want to contribute code to an abandoned project, and I equally don't want to become a maintainer, I just want to try out a crazy idea.)

January 9
That was needlessly annoying: trying to get the web components of mailman3 to not use example.com for domain details. Turns out I needed to create a new Site object, then set SITE_ID to its ID value in /etc/mailman3/mailman-web.py, then - critcally - restart the mailman3-web service. Fixing this fixes not just the UI but also the verification emails sent out when you add an email address.

January 8
Not much nerd tinkering today. I've been poking around somewhat half-heartedly at a long-overdue plan to investigate putting internet-facing services on my Mac Mini into a chroot or other sandbox. Much of the documentation on how to do this appears to be largely out of date or otherwise defunct, and the way I'd normally approach this - by running strace on the stuff I want to put in the chroot to make sure I've got all the required files - isn't possible by default on the Mac due to system integrity protection, which requires a recovery-reboot to disable.

January 7
Gran Torino (which I watched years ago) is quite enjoyable, although a little less so after reading about the less-than-stellar treatement of the Hmong in the movie by persons largely unspecified but including the director/lead actor.

January 6
Got the mailman migration done sufficiently for it to be functional, and then promptly broke the web administration interface, which is all sorts of terrible and smells poorly of "my first Django app" - particularly given the documentation for it is basically boilerplate Django documentation with nothing like "don't delete the example.com site entry" or "how to reset your admin password" included. Sheesh. Anyway. The indexer keeps choking on some one of the imported mail archives, and I've not checked to see if it's incremental or is trying from scratch each time as I'm trying to fix up some other broken things. I have, however, removed all remaining traces of 32-bit software from the box, so I can at least deem the migration to 64-bit "sufficiently done".

Poking through the migrated data I noticed a bunch of mangled-looking emails with dates of "whenever this archive was migrated". Investigating further, I find that the original archiver saved all those delicious emails in old-school From_ format, with no escaping of any embedded From_ lines in the body of the email. These archives span a couple of decades, sure, but this is still amateur-hour stuff. I am now looking at this from two perspectives: one is that this stuff is all kinda moot and noone would likely care if it vanished forever, while the other is my internal archivist screaming SAVE THE DATA for all it's worth. I don't think I actually need another pointless nerd project, tbh.

January 5
Further adventures with the DSPsrv: it looks like the periodic high load was caused by exim4 attempting to deal with an email for which the destination server was not responding. I have no idea why this is such a problem, but I manually scrubbed the email queue and it's been happy since then.

I've been mildly annoyed with my FitBit's persistent failure to link up with the Apple Health app (I believe it's effectively "we will never do this" at this point; I don't know if that was always the case, and I know there are third-party apps that'll do the job for you) so when my Charge 4 HR's display started to fail, I figured I'd look around for something else. As of today I'm wearing a Xaomi Mi Smart Band 6; it's a little on the goofy side, but the display is fantastically crisp, it monitors all manner of things, and it syncs with Apple Health. I'll extract my data from FitBit tomorrow or over the next week and shut down my account there, since there's no point in leaving this stuff lying around. Also to be contemplated is the best way to get the data from FitBit into the current setup since there is literally 20 years of weight tracking, among other things.

Something that could've been automated with a little bit more effort, but wasn't: migrating mailman 2.1 lists and archives to mailman 3. The lists in question look to have been dormant for a very long time, but I figured I'd just keep them functional rather than nuke them, and that meant that an upgrade of the 32-bit-only mailman package was required.

January 4
Started slowly flipping the 32-bit packages on the DSPsrv box to 64-bit. A little bit hairy, but mostly working. Then suddenly the box is not responsive, metrics say it's using over 50% CPU, and frankly I've no idea what just happened, so I'm gonna let it be and if it doesn't recover in a while I'll take it down and try to finish the bit-flipping offline.

(I'm assuming some scheduled process kicked in which is unhappy with the current state of the machine, being a 32-bit/64-bit hybrid with "unfixable" package dependency problems.)

Yep, had to take it down and do manual carving on it. The various wikis and blogs were mildly helpful but there was a certain amount of YOLO going on as well. In any case, it's now running mostly 64-bit Bullseye.

January 3
No Slow Horses, we ran out of Electric Dreams, Vera is too long to watch on a "school night", Doctor Who is basically parked until November... so we started watching The Marvelous Mrs. Maisel, and it's a keeper. Heck of a pilot episode.

January 2
Doing some surgery on the DSPsrv installation, in which I live-upgraded to Bullseye and am currently attempting to reconcile a long-ago attachment to Sid with the Bullseye package list. At some point this will likely require taking the box down. The ultimate goal here is to get to a position where it's running Bullseye in 64-bit mode.

Right, well, phase one of that appears to have been successful: an ugly hybrid of Buster, pre-Buster, Sid, and whatever you're having yourself running on a 64-bit kernel with 32-bit "native" dpkg architecture is now running Bullseye with some additional packages of unknown but non-blocking provenance. It's still 32-bit, but I'm currently trying to back the thing up so I have a point to return to if I break it.

I should probably capture this on the long-untouched, fairly defunct Story of the Server page. It's come a long way from where it started, and I don't even know the whole tale. Also at some point I should determine if anyone other than me actually uses the thing and maybe see about spinning some parts down.

January 1
Right. Let's try this again, shall we?

previous month | current month| next month

Happy New Thingy