Random Follow-Ups

I have (quite literally) been spending a good deal of my free time doing chores of various kinds, both physical (which are never enough) and digital, so here’s a sort of catch-up for a number of minor things that have been going on.

The COVID-19 Thing

We’re at nearly 1400 new cases a day, reaching the 1000-a-day average later than I expected but definitely experiencing a full-on second wave.

I’m just going to leave my usual chart here and spare you the background story (my older post is still very much on point):

My 1000-case prediction was only off by a week or so.

Here’s the current dashboard if you feel like delving into details. Just bear in mind that the local NHS has stopped publishing most detailed data months ago, and I haven’t cleaned out stale charts yet.

Scribbling

Now that I’ve finally upgraded everything to iOS 14, I’ve started using Scribble on my iPad to take notes, instead of the discontinued recognizers I was still using.

I’ve found it has no trouble with my handwriting (in English, obviously), but I have constant trouble with editing gestures as I keep falling back to old Newton and Palm Pilot habits when I try to do simple things like inserting text mid-sentence or some punctuation characters.

All in all, it’s a pretty decent system (it worked well enough to write a good chunk of this), but hard to use in opinionated apps like iA Writer that scroll text around or have trouble with changing input methods.

Standing Desk Update

The back-to-work rush made it a priority to do some pretty heavy multi-tasking and spend hours at my regular desk, but I soon realized I needed to move around more and went back to spending more time at my cheap standing desk hack–at least when racket from construction work allows it.

In short, it’s still paying off, and I kitted it out further with a small ringlight and a white K380. I needed the other one someplace else, and white keycaps are easier to read under soft LED lighting.

I still find this desk great for early morning stand-ups (pun intended), the vast majority of conference calls and various mindless chores like clearing out my inbox, largely because being able to pace around a bit and stepping out occasionally onto the balcony to have a think is a great morale booster.

However, a single laptop screen is woefully inadequate for calls where I’m presenting or whenever I need to write/review things at length, so I’ve been trying Duet Display with an iPad mini. This setup is very cramped and laggy, but at least allows me to have a separate, shareable screen for calls.

So I’m contemplating getting a 14” LCD display–preferably something I can use in portrait mode for reviewing docs.

Cameras and Video

As a follow-up to dabbling with video gear during my vacation, I ordered a Raspberry Pi High Quality camera and bolted it to a Zero W running my own fork of uvc-gadget (which besides providing a serial interface to control the camera was also tweaked to not burn 100% CPU when idle).

I 3D printed a little support for it, re-purposed one of my microphone arms, and hooked it up to my Windows machines:

Overall I'm happy with the results, even if this looks a bit artisanal.

Manual focus is still an issue on occasion, but video quality is pretty much excellent on Teams, with only two caveats:

  • You need stable USB bus power. Plugging directly into a laptop is fine, but since I need an audio interface and an Ethernet port and only have a single USB port on my Surface Pro 4, I had to get a powered USB hub to ensure the camera worked properly.
  • The frame rate lags behind a bit (and even freezes) on occasion, which I suspect is due to other stuff running in the background.

So I’m looking into derivative projects like showmewebcam that pack less stuff into a read-only runtime image to see if I can improve performance and reliability a bit.

I’m also considering adding some physical camera controls, perhaps with one of these neat displays from Adafruit:

The buttons make this especially useful. There's also a square version, which is pretty neat.

This will require printing a new camera bracket (which I’ll probably have to do anyway for reinforcement to hold some Canon lenses I’m meaning to test with it), but that will take some time yet…

Photo Management

I still have something like five years of photos to collate, rename, de-dupe and archive properly. It’s all backed up and reasonably safe in various clouds, but never arranged to my liking, and has been getting to me lately as my personal time slips away relentlessly.

After my Dropbox migration I’m keeping all unsorted photos in OneDrive and doing triage on my Mac, which both is and isn’t helping.

It helps somewhat because OneDrive creates some useful smart albums (that, alas, I can only see on the Web, but which I can at least filter somewhat to separate unsorted from sorted stuff).

But mass moves/renames take forever to sync for some reason, and I keep getting stuck in prompts like these, where hitting Remove does absolutely nothing, leaving me to wonder what has actually synced up:

This is so frustrating.

In the meantime, I decided to have another go at my jhead mass renaming hack and replace it with a zsh script that takes advantage of mdls to grab info off filesystem metadata (which macOS updates “for free”, saving me the trouble of trying to parse stuff off the files themselves):

#!/bin/zsh

for FILE in "[email protected]"
do
    if [[ ! -f $FILE ]] then
        continue
    fi
    EXTENSION="${FILE##*.}"

    # Ensure we only handle the kinds of media we want
    if [[ "DNG dng JPG JPEG jpeg jpg PNG png MOV mov HEIC heic" != *$EXTENSION* ]] then
        continue
    fi

    # Normalize extensions (yeah, this could be prettier)

    if [[ "DNG" == *$EXTENSION* ]] then
      EXTENSION="dng"
    fi
    if [[ "JPG JPEG jpeg" == *$EXTENSION* ]] then
      EXTENSION="jpg"
    fi
    if [[ "PNG" == *$EXTENSION* ]] then
      EXTENSION="png"
    fi
    if [[ "HEIC" == *$EXTENSION* ]] then
      EXTENSION="heic"
    fi
    if [[ "MOV" == *$EXTENSION* ]] then
      EXTENSION="mov"
    fi

    # Now grab EXIF/IPTC data that macOS has already figured out for us
    METADATA=$(mdls "$FILE")
    # The space prevents matching derived properties
    ISO_DATE=$(echo $METADATA | grep "kMDItemContentModificationDate " | cut -d= -f 2 | sed 's/[^0-9]//g' | cut -c1-14)
    if [[ ${#ISO_DATE} -eq 14 ]] then 
      if [[ "$FILE" == "$ISO_DATE.$EXTENSION" ]] then
        continue
      fi
      if [[ ! -f "$ISO_DATE.$EXTENSION" ]] then
        mv "$FILE" "$ISO_DATE.$EXTENSION"
      else
        for SUFFIX in {a..z}; do
          SUFFIXED_DATE="$ISO_DATE$SUFFIX"
          if [[ ! -f "$SUFFIXED_DATE.$EXTENSION" ]] then
            mv "$FILE" "$SUFFIXED_DATE.$EXTENSION"
            break
          fi
        done
      fi
    fi
done

Back-End Maintenance

Finally, as Node-RED approaches 1.2.0, I’ve begun upgrading my NodeJS containers to 14.x and testing ARM32 and ARM64 builds, which I rely upon for my home automation setup.

This has progressed at a glacial pace (around a test a day), but has given me something better to do than conference calls and Excel sheets.

Hopefully I’ll have it all sorted out this month…