Category Archives: General

Using Keyboard Maestro to Trigger Target Display Mode

I’m still using my now-ancient 2013 iMac in Target Display Mode as my primary monitor for work-from-home. Due to some muscle issues, I’ve switched from using Apple’s keyboards to using the Kinesis Freestyle Edge split keyboard with its tenting kit. I also invested in a basic USB 2.0 ‘switching’ hub so I can flip the keyboard between my iMac and MacBook Pro.

The problem: ⌘+F2 doesn’t trigger Target Display Mode from the Kinesis keyboard. I don’t want to have to keep pulling the Apple Magic Keyboard out of the drawer to switch the display.

Solution: I created a Keyboard Maestro macro that sends this AppleScript command.

tell application "System Events" to key code 144 using command down

I’m triggering it by the same ⌘+F2 hot key that should natively work.

Since my iMac is still on Mojave, there are some known bugs with Accessibility permissions. I ended up having to restart the Keyboard Maestro Engine a few times while cycling the Accessibility permissions in the Security & Privacy Preference Pane.

Flora

It’s still impossible for me to wrap my head around, but it’s been six months since we said goodbye to Flora. She was part of our family for 14 years, through some wonderful and some very hard times. Jane and I have never lived together without her, and her absence in our lives is as fresh a wound today as that first night without her.

I’m so grateful that our children were able to know her, even just for the ten weeks she overlapped with our daughter in this world. Her love for and kindness toward them left an indelible mark on me.

Flora took responsibility for tending to all of us from the very beginning. She held on until she knew we were all going to be ok after our daughter’s arrival, and left us on the night of our tenth wedding anniversary - she was taking care of us right up until the end.

I miss you.

iOS Scanner Apps

I just discovered that PDFpen Scan+ was discontinued, and went on a mini quest to find a replacement. I landed on ‎Scanner Pro.

I also considered:

Scanner Pro works with most of the cloud environments, so I have it pointed at a folder in Dropbox that gets slurped into my inbox. A scan can also be initiated from Shortcuts, so I’ve removed the app from my homescreen.

Fantastical Version 3, Watch App Edition

Previously: Fantastical Version 3

I’ve finally had a chance to play a bit more with Fantastical version 3, and I’m really disappointed to learn that the new version of their Apple Watch app is useless without a free Flexibits account.

In version 2, the watch app synced data directly from the iOS app via WatchConnectivity. Version 3 syncs event data from the iPhone up to their servers, then back down to the watch. This was done to allow the watch to sync without a direct connection to the iPhone.

I’d prefer not to expose my event data to their server, even if it is end-to-end encrypted. Event data in my calendars doesn’t change without my direct input (or approval), so there really isn’t any benefit to me from enabling independence of the watchOS app.

While I was looking into their encryption, I found that Flexibit’s new privacy policy is internally inconsistent with regard to the syncing of event data. In the summary (“Give me the short version”), it says:

Account passwords, events, tasks, and contacts are stored only on your device and are not sent to servers.

In the section titled “Where are my events, tasks, and contacts stored?”, this is contradicted:

Event and task data synced to your Apple Watch is stored on Flexibits servers. This data is end-to-end encrypted and we are unable to access it.

The summary claim (that event data is stored only on device) is reiterated in the section titled “When does an app send data to Flexibits?”:

Fantastical for iOS:

  • […]
  • When making changes to your calendar or dismissing alerts. No event data is ever sent to Flexibits, our servers only receive a notification that changes were made on your account. This notification is then relayed to Fantastical on your other devices.

This may seem like nitpicking, but if the only way to use the version 2 functionality within version 3 is by syncing my data to their servers, the least Flexibits can do is provide clear, accurate information in their privacy policy.

For now, I’ve switched back to using the native Calendar watch app. In watchOS 6, it seems to offer everything that the version 2 Fantastical app did (with direct sync!). I’m still using Fantastical on iOS, but I’m going to give the native app another test run in the upcoming weeks.

Fantastical Version 3

I was just checking out the new Fantastical version 3. While I don’t mind a subscription, the massive price increase over version 2 is a deal breaker for me. The only thing the subscription unlocks that I would use are calendar sets on iOS, but that’s not worth $40/yr (to me).

Looking back two and a half years to my last thoughts on this topic, my opinion is still the same. The switch to subscriptions is often coupled with a significant price increase, and that’s the cause of most backlash. The old TextExpander versions are still working just fine for me. I did finally subscribe to Day One Premium earlier this year, though I can’t recall what feature finally tipped the cost/value relationship for me.

Maybe I’ll eventually reconsider with Fantastical 3, but for now, I’ll just continue with the version 2 feature set.

Homebridge SoundTouch Platform

I’ve been testing out the homebridge-soundtouch-platform Homebridge plugin as a replacement for homebridge-soundtouch plugin (see my earlier notes about configuring this plugin). The main advantage I is that it exposes the 6 Soundtouch Presets as switches in HomeKit, whereas the older plugin exposes them as a ‘custom’ HomeKit parameter. The custom parameter is visible in the Home+ app, but not in the native Home app.

It was simple to install on my Raspberry Pi Zero W via the command sudo npm install -g homebridge-soundtouch-platform. Then I just added the following to my config.json in the platforms array to define my two speakers (the speakers have fixed IPs on my network, and I’ve disabled the China-only QPlay service, as well as the AUX inputs):

{
  "platform": "SoundTouchPlatform",
  "name": "SoundTouch",
  "accessories": [
    {
      "name": "Master Bedroom Speaker",
      "room": "Master Bedroom",
      "ip": "10.0.1.210",
      "volume": {
        "mode": "lightbulb",
        "onValue": 35,
        "unmuteValue": 35,
        "maxValue": 100
      },
      "presets": [
        {
          "index": 1,
          "name": "MB1",
          "enabled": true
        },
        {
          "index": 2,
          "name": "MB2",
          "enabled": true
        },
        {
          "index": 3,
          "name": "MB3",
          "enabled": true
        },
        {
          "index": 4,
          "name": "MB4",
          "enabled": true
        },
        {
          "index": 5,
          "name": "MB5",
          "enabled": true
        },
        {
          "index": 6,
          "name": "MB6",
          "enabled": true
        }
      ],
      "sources": [
      ]
    },
    {
      "name": "Living Room Speaker",
      "room": "Living Room",
      "ip": "10.0.1.211",
      "volume": {
        "mode": "lightbulb",
        "onValue": 35,
        "unmuteValue": 35,
        "maxValue": 100
      },
      "presets": [
        {
          "index": 1,
          "name": "LR1",
          "enabled": true
        },
        {
          "index": 2,
          "name": "LR2",
          "enabled": true
        },
        {
          "index": 3,
          "name": "LR3",
          "enabled": true
        },
        {
          "index": 4,
          "name": "LR4",
          "enabled": true
        },
        {
          "index": 5,
          "name": "LR5",
          "enabled": true
        },
        {
          "index": 6,
          "name": "LR6",
          "enabled": true
        }
      ],
      "sources": [
      ]
    }
  ],
  "global": {
    "sources": [
      {
        "source": "QPLAY",
        "enabled": false
      },
      {
        "source": "AUX",
        "enabled": false
      }
    ]
  }
}

Despite explicitly defining the presets for the speakers, on one of the speakers only Preset 4 appears in HomeKit. For this reason, I’m sticking with the older platform for now.