Automatically play daily MP3s on an iPad every morning

Given a folder containing 365 MP3s in the Files app with names like:

2001-04-30...mp3

play the one matching today's month/day (ignoring the year) each morning at 9:00.

Create the shortcut

  1. Open the Shortcuts app
  2. Tap + in the top-right corner
  3. Tap the name field at the top (it says New Shortcut)
  4. Tap Rename
  5. Enter "Daily MP3"
  6. Tap the blue Return key

Action 1: Current Date

  1. Tap Search Actions
  2. Search for and tap Date
  3. Leave it set to Current Date

Action 2: Format Date

  1. Tap Search Actions
  2. Search for and tap Format Date
  3. Leave the input set to Date
  4. Tap the dropdown arrow to the right of Date
  5. Tap Short to the right of Date Format
  6. Tap Custom
  7. Change Format String to -MM-dd
  8. Tap the blue Return key

Action 3: Get Contents of Folder

  1. Tap Search Actions
  2. Search for and tap Get Contents of Folder
  3. To the right of Get contents of, tap Formatted DateClear VariableFolder
  4. Browse to and select your MP3 directory

Action 4: Filter Files

  1. Tap Search Actions
  2. Search for and tap Filter Files
  3. Tap Add Filter
  4. Change File Size to Name
  5. Change is to contains
  6. Change anything to Formatted Date
  7. Tap the blue Return key

Action 5: Set Volume

  1. Tap Search Actions
  2. Search for and tap Set Volume
  3. Tap 50% and change to desired playback volume

Action 6: Play Sound

  1. Tap Search Actions
  2. Search for and tap Play Sound
  3. Tap the dropdown arrow to the right of Play sound
  4. Tap Choose Variable
  5. Select Files (which is the output of the Filter Files action; Shortcuts labels it by output type, not by action name)

The shortcut should now look like this. Happily, the Play Sound action works even when the device is locked (perhaps the Apple dev who generously and sagaciously decided that can fix another issue).

Create the 9 AM automation

  1. Tap the back arrow at the top left
  2. Tap the Sidebar button at the top left if the sidebar is hidden
  3. Tap Automation
  4. Tap + in the top-right corner
  5. Tap Time of Day
  6. Set the time to 9:00 AM
  7. Make sure Repeat is set to Daily
  8. Change Run After Confirmation to Run Immediately
  9. Tap Next
  10. Under My Shortcuts, tap Daily MP3

❧ 2026-04-30


I have all I need

Rengetsu echoing Epictetus:

The world's dust
Swept aside
Here in my hermitage
I have all I need—
The wind in the pines.
幽境

Notes

See also

❧ 2026-04-27


Presenting from a Mac without constantly turning around

Presenting from a laptop often means craning your neck to check what the audience sees. The following workflow creates a controlled presenter setup: selected apps launch maximized on the projector, the projector view is mirrored back to the MacBook with click-through support, and notes remain isolated on the laptop display.

1. Set the projector as an extended display

System SettingsDisplays → select the projector/external display → Use as: Extended display

2. Install and configure Hammerspoon

  1. Install Hammerspoon
  2. Grant Accessibility permission when prompted
  3. Hammerspoon menu bar icon → Open Config
  4. Paste the script below into init.lua and save
  5. Hammerspoon menu bar icon → Reload Config
-- Auto-move and maximize QuickTime Player and Preview windows
-- on the first external display.

hs.window.animationDuration = 0

local wf = hs.window.filter.new({
  "QuickTime Player",
  "Preview",
})

local function externalScreen()
  local primary = hs.screen.primaryScreen()

  for _, screen in ipairs(hs.screen.allScreens()) do
    if screen:id() ~= primary:id() then
      return screen
    end
  end

  -- Fallback if no external display is connected.
  return primary
end

local function moveAndMaximizeWindow(win)
  if not win then return end

  local winID = win:id()
  if not winID then return end

  local function apply()
    local currentWin = hs.window.get(winID)

    if not currentWin or not currentWin:isStandard() then
      return
    end

    local targetScreen = externalScreen()

    if targetScreen and currentWin:screen():id() ~= targetScreen:id() then
      currentWin:moveToScreen(targetScreen, false, true, 0)
    end

    currentWin:maximize()
  end

  -- First pass after the window is created.
  hs.timer.doAfter(0.25, apply)

  -- Second pass catches apps that restore/resize shortly after opening.
  hs.timer.doAfter(0.75, apply)
end

-- Only handle newly-created windows.
-- This avoids fighting manual resizing during the presentation.
wf:subscribe(hs.window.filter.windowCreated, moveAndMaximizeWindow)

-- Handle existing matching windows when Hammerspoon loads/reloads.
hs.timer.doAfter(0.5, function()
  for _, win in ipairs(wf:getWindows()) do
    moveAndMaximizeWindow(win)
  end
end)

hs.alert.show("Auto-move/maximize QuickTime/Preview loaded")

Add or remove managed apps using their exact names in the Hammerspoon window filter.

3. Install and start Side Mirror

Install Side Mirror, select the projector/external display from drop down menu at top right, then click Start.

4. Presenting

Opening QuickTime Player or Preview-associated files will display them in full screen on the projector. Use Side Mirror on your MacBook to see and control the projected content. Clicking through moves focus and your cursor to the external display; recover via Opt+Shift+Return.

If you have multiple external displays, replace:

local function externalScreen()
  local primary = hs.screen.primaryScreen()

  for _, screen in ipairs(hs.screen.allScreens()) do
    if screen:id() ~= primary:id() then
      return screen
    end
  end

  return primary
end

with:

local function externalScreen()
  return hs.screen.find("BenQ") or hs.screen.primaryScreen()
end

Replace "BenQ" with a substring matching your projector's display name. You can list connected display names in the Hammerspoon console with:

hs.fnutils.each(hs.screen.allScreens(), function(s) print(s:name()) end)

❧ 2026-04-27


CapabilityAccessManager.db-wal ballooning to hundreds of gigabytes

Safely deleting CapabilityAccessManager.db-wal

Many posts suggest restarting in Safe Mode and simply deleting CapabilityAccessManager.db-wal; however, that unfortunate approach reportedly breaks WiFi, screen capture, Settings, and more.

u/Ancient-Reply2879 and Pony appear to have independently arrived at the correct method: delete the folder (C:\ProgramData\Microsoft\Windows\CapabilityAccessManager\) rather than the file (C:\ProgramData\Microsoft\Windows\CapabilityAccessManager\ CapabilityAccessManager.db-wal).

Refactored a PowerShell script shared by Anonymous (2024) and jsmorley (2025) to delete the directory rather than the contents:

Prevention

Disabling Location services (Settings → Privacy & security → App permissions → Location) and uninstalling SmartByte (advisable in any case) are reported as possible fixes.

❧ 2026-04-18


Auto-reply to iMessage and text messages via Shortcuts

Almost-perfect solution, with one limitation: catch-all matching works for sender or message content, not both simultaneously. Feedback filed with Apple via Feedback Assistant.

  1. ShortcutsAutomation

  2. New AutomationMessage

  3. Leave Sender as Any Sender to match all senders or leave Message Contains as Choose to match any text message content - at least one field must have a value to enable Next (Message Contains sadly does not support regex; a single space suffices, though messages containing no spaces will be missed)

  4. Change Run After Confirmation to Run ImmediatelyNext

  5. Create New ShortcutSend MessageMessage → e.g., "I am out of the office"

  6. Tap and hold RecipientsShortcut Input

  7. Tap checkmark icon at top right to save

Handles both iMessage and SMS, runs immediately without interaction, and executes even with the screen off.

Sources

Previously

❧ 2026-04-17


iOS: Export/back up all local and cloud contacts natively

No dearth of contacts backup apps in the App Store, though not one is required for exporting/backing up all local and cloud contacts to vCard:

  1. In Contacts List view, tap and hold All Contacts
  2. Tap Export
  3. Tap Select All Fields
  4. Tap checkmark at top right
  5. Tap desired destination from Share menu (AirDrop, Mail, Messages, Save to Files, etc.)

See also Delete all iOS contacts.

❧ 2026-04-14


Crop PDFs in browser or portable app

Wuqiong Zhao's pdfcrop Web App is sublimely fit to purpose. Tried wrangling a Tauri-based portable Windows app out of it with Claude 4.6 Opus, Gemini 3.1 Pro, and GPT 5.4 over several hours with little to show for it.

Dear friend and AI whisperer Josh adroitly conjured up a wonderful solution using Copilot & GPT-5.4-high in a twinkling, even fixing crop-box handle resizing along the way:

Successfully tested the following build steps in Windows 11 24H2 ARM64, macOS 26.4.1 Tahoe, and Ubuntu Linux 22.04:

1. Install prerequisites

Windows

macOS

macOS offers native PDF cropping in Preview.

Linux

2. Configure Rust

rustup target add wasm32-unknown-unknown
cargo install tauri-cli --locked

3. Clone and enter the repo

git clone https://github.com/citricguy/pdfcrop.github.io-tauri/
cd pdfcrop.github.io-tauri\pdfcrop\examples\pdfcrop.github.io

4. Install JS dependencies

npm install

5. Build WASM package

wasm-pack build --target web --release --out-dir pkg

6. Compile the app

npm run desktop:build

In Windows, find pdfcrop-desktop.exe (~5MB) in src-tauri\target\release\. To build for x64 & x86 under ARM64:

rustup target add x86_64-pc-windows-msvc
cargo tauri build --target x86_64-pc-windows-msvc
rustup target add i686-pc-windows-msvc
cargo tauri build --target i686-pc-windows-msvc

Related

❧ 2026-04-10


Stickies app data missing after upgrade or migration

Problem

macOS Mojave and earlier store sticky notes in a single file, ~/Library/StickiesDatabase. Catalina and later use ~/Library/Containers/com.apple.Stickies/ (Finder displays it as ~/Library/Containers/Stickies/), with RTFD files in ./Data/Library/Stickies/ and note color and window positioning data stored in ./Data/Library/Preferences/com.apple.Stickies.plist.

For many macOS upgrade scenarios that straddle this divide (e.g., High Sierra to Sequoia), the database migration silently fails. Even in the best case (as when upgrading from Mojave to Catalina), colors revert to yellow and window positioning is lost.

Solutions

Related: Stickies extraction scripts

❧ 2026-04-04


Thunderbird silently blanks emails after IMAP-to-Exchange switch

Since switching to Thunderbird's new Microsoft Exchange support announced on November 18, 2025, 24 messages moved from Microsoft's server to local storage have ended up completely blank, much like the macOS Mail bug extensively covered by Michael Tsai. All 24 show a file size of 127 bytes, containing only:

X-Mozilla-Status2: 00000000
X-Mozilla-Keys:

Granted, this is with Maildir enabled and hundreds of thousands of messages across dozens of folders, but the bug had never appeared when the account was configured as IMAP in Thunderbird, so have switched back for now. (The new account had to be set up manually, then switched to OAuth for both IMAP and SMTP, as it wasn't offered otherwise (setup in a fresh Thunderbird profile worked normally). One downside of returning to IMAP: syncing changes to macOS Mail once again requires quitting Thunderbird.)

Update

While penning this post, happened upon an open bug from 17 years ago:

Thunderbird "loses"/corrupts email messages when downloading from the mail server to a local folder

❧ 2026-04-02


Move fast and break Windows

or, Shipping bugs at scale with AI:

2025

Apr:

May:

Jun:

Jul:

Aug:

Sep:

Oct:

Nov:

Dec:

2026

Jan:

Feb:

Mar:

❧ 2026-03-22