Always Ask for MailChimp Newsletter Reconfirmation Outside of MailChimp

When you want to merge newsletters in MailChimp like I do and tell your subscribers to sign up at the new list and unsubscribe from the old to not receive any notifications – then you’re setting yourself up for trouble!

Because it turns out that mass-migrations from list A to list B mostly register as mass unsubscribes from list A. And an unsubscribe rate of 9% or higher (I don’t know the actual minimum value, but 9.23% triggered it for my account) will automatically up the risk level of your whole MailChimp account.

Now double opt-in is enforced on my account (which isn’t bad, because I had this enabled anyway), and I’m honestly getting a bit nervous about the account being closed. It’s not a big deal if I lost the emails, mind you, but I reached out to so many people and asked for a subscription renewal that it’s highly unprofessional to screw everything up a week later.

Of course MailChimp offers instructions: The “Reconfirm Addresses” help page tell you to unsubscribe everyone on old lists, reach out via email, not via MailChimp, and have them reconfirm their subscription.

Should’ve done that, but I didn’t look that page up in advance.

So if you want to merge newsletter lists or “Audiences” on MailChimp, listen to the help page to avoid trouble!

Also, if you are affected by this, I’m terribly, terribly sorry for getting on your nerves with this.

Don’t Wait. Show Up. Or It Might Be Too Late Again

When someone close to the family dies, a lot of dust is stirred up.

My godfather died last week, and I was informed that his burial will be tomorrow – more by accident than by plan. We hadn’t talked in 5 years, and in late 2018 I became curious what he and his wife were up to. Why not visit them for a change, since they don’t come visit anymore? I was at their place a couple times, but most of the time, like once every month plus for birthdays or so, my godfather and his wife visited us at home, back when I lived with my father.

The TL;DR of this story, the main takeaway for me, is this: don’t wait.

It’s not a new thought, and the outcome is not surprising, either. I planned the trip, but deferred taking action. I never visited them, even though I could’ve managed a round-trip plus a couple of hours of chat in a single afternoon. I didn’t take the time, because why hurry? Have lots to do anyways. Later this year, things will probably settle down. Then I’ll go.

That’s the stories I’ve told myself that made me not go. And now, well, my godfather has died from some disease that affected his brain and changed him over the past couple of years, I was told. I wouldn’t know, because I didn’t show up. This could also explain why they didn’t show up anymore, either. So in the end, I wouldn’t have visited the person I was remembering, one could say. Still, I’m mad at myself for not even calling. Even if we weren’t that close after all, I think I didn’t do my part. Nobody is accusing me of anything, but I do hold myself accountable for the past years of silence between us, too. Now I regret not getting in contact and will see my godfather’s wife on his burial for the first time in years. It’s hard to come up with anything to say, because even “I’m sorry for your loss” sounds fake in my ears, because if I really feel sorry, if I really do care, why didn’t I even call, huh?

The real TL;DR maybe really is: people die all the time, so make sure you do you while they’re still there.

Or it is: “you do you” for me boils down to not going all the way, not doing the hard things, by default. And that I should consider changing my ways, from half-assed good intentions to full-assed good actions, so to speak.

Processing a Book to Extract Notes, a Video

For the Zettelkasten knowledge project, I’ve recorded and cut my first video. The process was a pain, and I think I’m going to write about it later – but for now, I’m happy with the result and very proud to have finished this mini project.

It’s part of an ongoing series to demonstrate the method we talk about on our blog. Here’s the video:

Comments are very, very welcome. So head over to the forums and tell us what you think of it!

Make Money Outside the MAS v2 Book Writing Stage is Done

My ebook update routine has changed a bit for Swift 5 this year: I’ve expanded the “Make Money Outside the Mac App Store” book typoscript a lot. It’s about twice as long, with many more explanations for the setup, many new additional feature discussions, and practices that I’ve learned of in the last years. FastSpring’s revamped store kind of forced me to re-take screenshots anyway, so I figured I might as well take more.

I also want this v2 edition to be larger in scope. You will still learn how to set up your own store, but if this is your first time reading about any of the things involved in the process, blindly following one narrow path of action doesn’t feel right. So I provide alternatives and try to give perspective: why are license codes used, and what else could you be using? Why is FastSpring superior to, say, when you want to sell apps that require personalized license codes? Which business model would work with a far simpler setup at Gumroad? Higher-level stuff like that, and also alternatives for actual implementation.

Instead of a week, it took three. And now I’m editing the result, proof-reading, getting feedback on it.

If you enjoy reading, criticising books, and want to help out: please do get in touch! A fresh pair of eyes would be super useful.

Newsletter Revival

Not everybody knows how to consume RSS, so I wanted to try to make updates to the blog available via email.

That’s why I have now revived the newsletter signup page.

This is the plan:

  1. You get virtually no messages by default,
  2. you can subscribe to automatic updates based on the blog’s feeds.

I’ll experiment with this setup for a while, but I think the current options cover almost anything I currently do, or plan to do, so that both developers and customers of my apps get something interesting in their mailboxes.

With regard to GDPR compliance I went a bit over the top and included a ”GDPR Consent Checkbox” for email delivery, just in case, even though everybody seems to agree that the mere act of subscribing is enough already. So you won’t get anything unless you check that, and update your

If you were subscribed to my newsletter before, please revisit the new settings so you can adjust which kind of updates you get. I have sent a message with information to everyone on the old lists, so you should’ve received instructions already.

TextMate v2.0 Was Released

The TextMate auto-updater surprised me yesterday by installing v2.0. No RC suffix anymore, just the plain number. That doesn’t mean this update comes with any crucial feature. It’s just a message of intent: this editor is worthy to be a successor to TextMate 1.

I think TextMate 2 was good enough for years already. In fact, only in 2019 did I begin to see weird behavior in my basic workflow with it. The async text highlighting seems to cache less than before, so that switching tabs throws off what’s visible in the editor view, and new windows start too small to fit the line wrapping all of a sudden. But does that bother me very much? Nope. I use TextMate every day. I maintain this and any other website with this editor. I write every Ruby script with TextMate. (For a Raspberry Pi Python project, I used Emacs to remotely edit on the device via SSH, though.) I write and edit my book manuscripts with TextMate. Whenevery I need to have multiple carets to edit similar lines of text, I go to TextMate. (Though I never tried the macro recorder.) It’s always open, and it’s the first app I install on new Macs. It became a part of me, and I don’t like the thought of someday having to miss it.

Get TextMate 2 for free. It’s open source.

State of the macOS Developer Platform Choices

2019 is a weird year for developer platforms.

Microsoft App Center will incorporate HockeyApp. HockeyApp is discontinued in November 2019. The App Center will be supporting Sparkle feeds in the future, too. So Microsoft will offer a service that may be useful to deploy macOS apps, soon?

Google Firebase will incorporate Crashlytics/ will be discontinued in March 2020, too. Using Firebase for macOS apps was possible, but iOS was the real target platform. Fabric seemed to be popular, so I was surprised by the news of this.

DevMate is sunsetting in December 2019. So you’re left with Paddle, which are going to focus more on software-as-a-service than indie developer apps, according to a source. As long as they stay afloat and keep the existing native app libraries functional, that’s not bad news per se, though.

I don’t know of any other rady-made solution for indies to sell apps. Do you?

Is there just not enough money to be made to warrant the cost of support and hosting?

Update 2019-09-17: Even the Open Source dinosaur PLCrashReporter (previously at is now stewarded by Microsoft, I guess as part of the HockeyApp integration.

Please Also Change Your Feed URL’s Inside Your Apps

In my post about redirecting the DevMate update feed, I missed the opportunity to mention that you should probably also update your app very soon to not rely on DevMate’s framework.

Mr Boy van Amstel at Danger Cove picked up the topic and explains how you can change your feed URL inside the app using the Sparkle SUUpdaterDelegate methods. DevMate’s closed-source framework wraps this in its DM_SUUpdaterDelegate_DevMateInteraction protocol.

Your battle plan thus should be:

  1. Redirect the remote feed URL to deploy updates to existing customers working with old versions, and
  2. Change the feed URL used inside the app as soon as possible and deploy an update to not rely on the redirect for too long.

I use the SUUpdaterDelegate to switch feed URL’s in The Archive and WordCounter, too, in case you wonder if this is a good idea in the first place.

See also:

Redirect Your DevMate Sparkle Update Feeds Now

Fellow developer Daniel Kennett mentioned that he requested a HTTP redirect for the DevMate feed to his own server. I probably wouldn’t have thought of this, and think it’s a great idea. This way, you can reach DevMate customers long after their servers have stopped responding.

You should, of course, also send them an email with transition instructions. Please don’t just rely on the update server approach to work, because eventually might be gone for good, and then the redirects won’t work anymore.

The update URLs for DevMate follow a very simple format:

To look up the BUNDLE_ID, Head to your Settings > Basic App Details in the DevMate dashboard. There, you can set the App Icon and see the App Name and Bundle ID. Since the text fields are disabled, you may need to inspect the HTML source in your browser to conveniently copy the contents.

Download the feeds for reference and upload them to your servers. Then ask the DevMate support to redirect to your place.

Currently, it seems this process takes quite a while. A couple of weeks, in fact. I don’t know if that’s because of their high support ticket volume, or because they are still coding the infrastructure for update redirects.

Either way, I highly recommend you do this now so your redirect is functional rather sooner than later.

Update 2019-09-14: Oh, and also deploy an update with the new feed URL so you don’t rely on the redirect for longer than absolutely necessary!

→ Blog Archive