Thought is the builder

❧ 2026-05-14


Gmail account tied to unwanted Google Workspace account

A user found their existing, long-held Gmail account (e.g., example@gmail.com) inexplicably and seemingly inextricably linked to an unwanted Google Workspace account (e.g., user@example.com), the MX records for which had never even been set up.

Appears to be a common lament:

Google support forums contain misleading and confusing advice. A Gold Product Expert claims that:

"A Google Workspace account is a free standing account that uses a business domain name for its email address. It has to be created independently from any gmail.com account."

Meanwhile, a Product Expert Alumni asserts that:

"If you used your gmail account to sign up for a Google workspace Individual Account and if you cancel it then you will lose your gmail account as the gmail account will be permanent link to Google workspace Individual Account"

Google's own documentation says otherwise. From Cancel Google Workspace for Gmail accounts - Cancel a Google Workspace subscription that you signed up for with a Gmail address:

"You have two cancellation options:

"With either cancellation option, you lose access to premium Google Workspace services, your Admin console, and any billing records right away. You still have access to some Google Workspace services, such as Gmail, Google Calendar, and Google Meet, as well as other Google services, such as YouTube, Google Photos, and Google Ads, through your personal Gmail address. Personal data associated with these services is retained."

A number of users (1, 2, 3, 4, 5, 6) report success with cancelling the Google Workspace subscription: Google Admin → ☰ menu → Billing → Subscriptions → click your subscription → More → Cancel Subscription.

The aforementioned user contacted Google Support for guidance. Rather than directing them to cancel the subscription, support walked them through a more circuitous route:

  1. Create a new user (admin@example.com) and assign it the super admin role.
  2. Remove the super admin role from the original account (user@example.com), then delete that user.
  3. When prompted during deletion, transfer data to admin@example.com.
  4. Data migration (~100 GB) took about 45 minutes; upon completion, a popup window entitled "YOUR TASKS" displayed "Removed example@gmail.com."
  5. Signing in to example@gmail.com showed a message which read in part: "Your account has been removed from an organization: Your admin has converted your managed Google Account to a consumer account."
  6. Email, contacts, and photos were intact in example@gmail.com. Google Drive files were not - they'd been transferred to admin@example.com; Google Takeout on that account was used to recover them.

Google Support should have instructed the user to back up via Google Takeout before beginning the migration, and perhaps should have skipped it entirely in favor of simply cancelling the Workspace subscription.

How is this happening?

Apparently via nag banners promoting Google Workspace on the Gmail website, as described in Remove specific google ad at top of email (to "Try Google Workspace") and Workspace is Spamming Me Constantly — Please Help.

See also

❧ 2026-05-13


Full-length screen capture in Safari

When File → "Export as PDF…" is not enough:

  1. Enable Develop menu: Settings… → Advanced → check "Show features for web developers"

  2. Press Cmd+Opt+I

  3. Click "Elements" → right-click <html> tag → click "Capture Screenshot"

The feature is present as of Safari 11.1.2 in OS X 10.11.6 (missing in Safari 10.1.2/OS X 10.10.5): Preferences… → Advanced → enable "Show Develop menu in menu bar".

❧ 2026-05-09


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)

Related

❧ 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