The world's dust
Swept aside
No care for the future—
In my hermitage I have all I need:
The wind in the pines.
Two scrolls (1, 2) attributed to Rengetsu have the original as:
世のちりを
よそにはらひて
ゆく末の
ちよをしめたる
やとの枩風
In modern Japanese:
世の塵を
余所に払いて
行く末の
千代を占めたる
宿の松風
The elided line, ゆく末のちよをしめたる (literally "go end <possessive particle> thousand ages <direct object marker> secure <classical past/perfect ending>"), resists idiomatic translation. It conveys the sense of securing prosperity or continuity for "a thousand ages"/forever.
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 Settings → Displays → select the projector/external display → Use as: Extended display
-- 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:
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:
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.
Shortcuts → Automation
New Automation → Message
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)
Change Run After Confirmation to Run Immediately → Next
Create New Shortcut → Send Message → Message → e.g., "I am out of the office"
Tap and hold Recipients → Shortcut Input
Tap checkmark icon at top right to save
Handles both iMessage and SMS, runs immediately without interaction, and executes even with the screen off.
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:
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
Stickies.app 10.2 (build 138) from macOS 10.14.6 can be copied to Tahoe alongside ~/Library/StickiesDatabase and runs successfully; colors and window positions are preserved. "Export Text…" (Plain Text, RTF, RTFD) works; "Export All to Notes…" does not.
If preserving sticky note colors isn't necessary, simply restore ~/Library/StickiesDatabase to a clean macOS 10.15, 11, 12, or 13 instance; Stickies will populate com.apple.Stickies from it on first launch (fails under macOS 14, 15, & 26).
1. In Mojave, restore a backup of ~/Library/StickiesDatabase. 2. Optionally export to Notes.app (File → Export All to Notes…) for posterity; colors are preserved as folder names. The Notes database (~/Library/Group Containers/group.com.apple.notes) can be imported as-is into modern macOS versions. 3. Upgrade Mojave to Catalina; com.apple.Stickies can now be imported into later versions including Tahoe. Colors must be manually corrected (or perhaps scripted to extract values from StickiesDatabase and insert into com.apple.Stickies.plist, an exercise left for the reader). Windows can be un-stacked via AppleScript; this example (tested in Catalina and Tahoe) uses a 5-column layout:
tell application "Stickies" to activate
tell application "System Events"
tell process "Stickies"
set winList to windows
set winCount to count of winList
set numColumns to 5
set noteWidth to 300
set noteHeight to 200
set xGap to 20
set yGap to 20
set baseX to 50
set baseY to 50
repeat with i from 1 to winCount
set colIndex to ((i - 1) mod numColumns)
set rowIndex to ((i - 1) div numColumns)
set theWin to item i of winList
set position of theWin to {baseX + colIndex * (noteWidth + xGap), baseY + rowIndex * (noteHeight + yGap)}
set size of theWin to {noteWidth, noteHeight}
end repeat
end tell
end tell
pystickies: "Converts the database from the Mac's 'Stickies' program into RTF files, one per sticky. This is platform-independent, it doesn't use Cocoa to do the conversion, but rather uses heuristics to find the RTF data within the Stickies database."
pytypedstream: "A pure Python, cross-platform library/tool for reading Mac OS X and NeXTSTEP typedstream files. ... the typedstream data format is still used by some macOS components and applications, such as the Stickies and Grapher applications."
StickiesDbConverter: "Brief python script for exporting a StickiesDatabase file on macOS to a plain text file."
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:
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
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.
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.)