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