Bit of a stressful week. Weather didn’t help, although I did get some random exercise in. Managed to get a lot done on personal terms despite multiple late night meetings.
Monday, 2024-02-26
Another rough night. Spent the morning nursing a mild headache and clogged sinuses, and tried getting up to speed by pumping up the bass:
- Performed the quarterly sacrificial ritual of Roomba cleaning, in which the victim is upended on a work table and has major chunks of lint drawn from its insides with pliers.
- Fiddled with
defaults write com.microsoft.rdc.macos AvcSupportLevel avc444
in order to try to resolve myRDP
woes with olderxrdp
responsiveness on the Mac. Felt more like voodoo than anything else. - Found a surprisingly versatile third-party Remote Desktop client. As it happens, the CTO is someone I know on
TwitterX, and so far, the app seems to connect to all my LinuxRDP
servers with sane encodings and at least as fast rendering asFreeRDP
, without any hassle. The only downside is that it is your stereotypical Swiss Army knife IT administration tool, packed with extraneous features and dialogs and panes – but you can dial back the clutter, and I’m quite enjoying it that way. - Given the above, deleted my
FreeRDP
build tree, which was sorely mangled. There are more interesting yaks to shave now. - Did a few long(ish) prints with the Two Trees SK1 throughout the day. It is definitely not a quiet machine even if you drown it out with Daft Punk.
- Finished the day with more personal budgeting and another late meeting, after which I did some system maintenance (upgraded all my [Proxmox] hosts, added a few more targets to my SmokePing instance, etc.)
Tuesday, 2024-02-27
An utterly chaotic, stressful day. I really, really can’t get the hang of Tuesdays sometimes.
- Spent a fair chunk of the morning preparing a meeting that didn’t happen.
- Landed in another that was scheduled overnight atop my lunchtime.
- Received a nice Ryzen mini-PC for testing.
- Had a major annoyance sprung on me unbidden that I had to sort out right there and then and that derailed my whole afternoon.
- Magically managed to be free at a time I was supposed to have another meeting but it hadn’t been scheduled. Took 30m to set up Bazzite on the mini PC and plug it in the living room.
- Had yet another late night meeting.
- Ended up relaxing by taking notes past midnight with my BlueHand (always a great way to force my brain to relax).
Wednesday, 2024-02-28
Almost made up for Tuesday. Had a great lunch (which was more than I bargained for exercise-wise), the high point of a blissfully meeting-free day (albeit with a lot of e-mailing and slide tweaking).
- Wrote an
ffmpeg
script to generate compact, bandwidth-efficient slideshows for sets of images in a moderately sane way. I had forgottenxfade
anddrawtext
could be that flexible, perchance because mixing them is a rather traumatic process.
- Did some simple tests with the Ryzen box I got yesterday.
- Resumed tuning the SK1 and doing long(ish) test prints.
- Poked at adding an
STL
viewer to the site, now that ThreeJS andWebGL
are common enough for it to be useful across the board (yeah, I know I’m late to the party) - Tried to enable my environmental sensor’s microphone so that I can take a stab at doing environmental noise cancellation (this looks like a good starting point for the bare math, but I’ve yet to actually try it).
- Very late night meeting ending just before midnight.
- Found myself needing to unwind, so I caught up on the news, read a book, and went to sleep… at 2AM.
Narrator: that was not a good idea.
Friday, 2024-03-01
Woke up at 7:30 realizing that the water mains was going to be shut down at 8:30. Breakfasted and showered in the nick of time, then nested in the couch for half the morning poking at e-mail and nursing a sleep deprivation headache.
- Played a few games on the Ryzen box over lunch to get an overall feel for how the Radeon iGPU handled them.
- Received the
MIDI
connectors I had been waiting for for one project and (annoyingly) a few integrated circuits that my sleep-deprived brain could not remember what I wanted for. This is one of the pitfalls of doing some twenty things at once over long periods of time… - Spent too much time pointing to things in walls that the plumbers should have been able to see unaided.
- Utterly failed at scheduling a beta certification exam and other minor work stuff I had scheduled for the day.
- Started queueing up the
CUDA
stuff I want to test. - Right before the last evening call of the week, decided to pump more music into the office speakers and ground out a bunch of small tasks.
- Wrote another
ffmpeg
script, this time to re-encode short videos, capture a poster image and spit out a ready-to-pasteHTML
template for adding them to blog posts:
#!/usr/bin/env python3
from os import system
from os.path import splitext
from argparse import ArgumentParser
def remux_file(input, output="remux.mp4", crf=20, bandwidth=3000, bitrate="96k", height=720):
cmd = ["ffmpeg"]
cmd.append(f"-i {input}")
cmd.append("-filter_complex")
filter_spec = []
filter_spec.append(f"[0]scale=-2:{height}[out]")
cmd.append('"' + "; \\\n".join(filter_spec) + '"')
cmd.append(f'-map "[out]" -map 0:a -b:a {bitrate} -c:a aac -b:v {bandwidth} -pix_fmt yuv420p -c:v libx264 -r 25 -crf {crf}')
cmd.append(output)
res = system(" \\\n".join(cmd))
res = system(f"ffmpeg -i {output} -vf 'select=eq(n\,0)' -q:v 5 {splitext(output)[0]}.jpg")
if not res:
print(f"""
---[HTML TEMPLATE]---
<figure>
<video controls muted style="width: 100%" poster="{splitext(output)[0]}.jpg">
<source src="{output}" type="video/mp4">
<img src="{splitext(output)[0]}.jpg" style="width: 100%" alt="Your browser cannot play this video">
</video>
<figcaption>
A {height}p video at {bandwidth}bps
</figcaption>
</figure>
""")
def main():
parser = ArgumentParser(description="Convert a video to a standardized .MP4 envelope")
parser.add_argument("input", metavar="I", type=str, help="input file")
parser.add_argument("--height", type=int, default=720, help="vertical resolution of the output video")
parser.add_argument("--crf", type=float, default=25, help="quality of the output video (lower is better. 23 is the ffmpeg default, 0 is lossless, 51 is the worst possible quality)")
parser.add_argument("--bandwidth", type=float, default=1500, help="bandwidth of the output video (higher is better)")
parser.add_argument("--bitrate", type=str, default="96k", choices=["96k", "128k", "160k", "320k"], help="bitrate for the audio (one of 96k, 128k, 160k, 320k)")
parser.add_argument("--output", type=str, default="remux.mp4", help="The output file")
args = parser.parse_args()
remux_file(args.input, args.output, args.crf, args.bandwidth, args.bitrate, args.height)
if __name__ == "__main__":
main()
Saturday, 2024-03-02
Writing and publishing day.
- Woke up late, read The Economist and other news.
- Gathered all the media, sorted all the draft bits, pasted them together, smoothed out the rough spots and posted my notes on the SK1. Next up, using it to print more useful stuff.
- Looked at my “yak shaving list”TM and decided to take on the “meta yak”–VS Code really needs a unified spelling tool of some sort, and I now have three highlighting my stuff in irritatingly different ways: Vale,
cSpell
and its own dictionary settings. - Spent a few hours sorting those out and trimming my workspace profiles to minimize extensions and settings.
- Fell asleep on the couch before dinner time.
Sunday, 2024-03-03
Had a properly productive morning and then proceeded to turn the rest of my free time into a relaxing yak shaving day.
- Personal inbox zero.
- Fixed a bug in my automated Mastodon link poster (a smaller, but annoying yak)
- Fixed a set of long-standing bugs and layout glitches in my link blog rendering (also changed the external link symbol to a much nicer “➹“)
- Did a little more sowing (yes, I need the practice).
- Fell asleep on the couch again.
- Posted these notes and called it a day.
- Then I did it again, because
git
is a fickle mistress.