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


"defrag" error on IODD virtual CD-ROM

IODD's virtual CD-ROMs like the ST300 and MINI often display "defrag" when attempting to mount newly-imported ISO images, as detailed by ./techtipsy.

The IODD Guide explains that "The ISO/VHD file is too fragmented to load (Max 24 fragments for ISO; 0 for VHD)." and suggests "Use defragmentation utilities like MyDefrag (dead link) or Defraggler."

Another option is WinContig (H/T), a green, portable app that merited a rare addition to the System page:

🌱 WinContig v5.0.3.3 [961K] + "Quickly defragment individual files without the need to defragment the entire disk." Supports Windows Vista through 11, server versions from 2008 to 2019, and FAT, FAT32, exFAT, NTFS, and ReFS filesystems. 📺

Updates

  1. Initially skipped SysInternals' Contig, believing it only supported NTFS as claimed on Wikipedia ("Supported file systems: NTFS") and even more explicitly on Grokipedia ("It exclusively supports the NTFS file system, leveraging the native Windows NT defragmentation API introduced in NT 4.0, and does not function on FAT, exFAT, or other file systems."). However, version 1.83 successfully defragmented an ISO file on an exFAT-formatted drive.

  2. IODD offers VHD Tool++, a portable app with a number of functions including file defragmenting. However, the current version (0.8.0.1) simply wraps Contig, which is bundled inside. (Curiously, VHD Tool++ is not mentioned on IODD's own error messages page, which instead recommends MyDefrag and Defraggler as noted above.)

❧ 2026-03-22