Keeping an Email Conversation in One Slack Thread
If you post incoming email into Slack and let people answer from the thread, posting the first email is the easy part. Read more of Keeping an Email Conversation in One Slack Thread →
My name is Jake Marsh. Inventor 💡 Founder 👨🏻💻 Creator 👨🎤 Writer ✍🏻 Lifeform 👽
Multimeter is my new Mac menu bar app: live meters for your battery, CPU, network, timers and your own…
How I ship each Mac app two ways from one codebase: a notarized, Sparkle-updated build sold on my site and a…
CallForMe lets the agent you already use call businesses for you: it works phone menus, waits on hold and…
BankBridge gives your agent read-only access to your bank accounts over MCP, so you can ask about spending…
If you post incoming email into Slack and let people answer from the thread, posting the first email is the easy part. Read more of Keeping an Email Conversation in One Slack Thread →
Chrome keeps copies of itself in a temp folder on my Mac, 14 of them right now, and du says they take up 20 GB: Shell Deleting them would free far less than that. They’re APFS clones, and nearly all of their blocks are shared with the copy of Chrome in /Applications. Read more of Why du Overcounts On APFS →
@Published doesn’t compare values. Assign the same value and it still tells every observer that something changed. Here’s a small test: Swift That matters most in code that runs on a timer. Read more of Keeping A SwiftUI App Quiet When Nothing Changed →
NSCache evicts entries on its own when memory gets tight, but a plain Swift dictionary keeps everything until you clear it. Read more of Emptying Caches When macOS Reports Memory Pressure →
Postage, my Mac email client, keeps two SQLite databases. emails.db is a cache of mail that can always be downloaded again, and rules.db holds data that exists nowhere else. Read more of SQLite's synchronous = NORMAL, And When Not To Use It →
When someone pastes your MCP server’s URL into Claude or ChatGPT, a sign-in window should open. What makes that happen is one HTTP response from your server. Read more of How Remote MCP Servers Trigger OAuth Sign-In →
Every text file on Deallocated Objects is compressed before it reaches the server. The generator writes index.html, then writes index.html.br and index.html.gz right next to it, and nginx picks whichever one the browser asked for. Read more of Serving Precompressed Brotli And Gzip From Nginx →
This blog has a small newsletter. When a post goes live, a little Bun service on my server emails it to everyone who signed up (it sends through Resend). Every one of those emails has to make leaving easy, and since 2024 Gmail and Yahoo have spelled out exactly what “easy” means for bulk senders. Read more of One-Click Unsubscribe The Way Email Platforms Want It →
You can follow this blog from Mastodon. Search for @blog@deallocatedobjects.com in Mastodon, Ivory, Ice Cubes or any other fediverse app, tap Follow, and new posts show up in your home timeline next to everything else you read. The blog itself is a static site. Read more of A Small ActivityPub Server For A Static Blog →
Every Mac app I sell from my own site goes out the same way. It’s signed with Developer ID, notarized, stapled, put in a DMG, and then the DMG gets signed, notarized and stapled too. The steps are well known. The order is where people get bitten, along with which file each step applies to. Read more of Notarizing And Stapling A Mac App For Direct Download →