The Mac Won’t Be Sherlocked

With last week’s WWDC news announcing that Catalyst (Marzipan) is now an official thing, there have been a metric crap-ton of Twitter Hot Takes™ declaring UIKit the one true way forward.

I’m not going to debate that.

Instead, I just want to point out that not everything in computing revolves around a 44pt tap target by highlighting a few amazing Mac apps from oft-overlooked developers who do a phenomenal job adhering to the very best parts of macOS while continuing to push the platform forward.

Let’s begin.

Acorn

First up, Acorn by Flying Meat. For $29, an absolute bargain, you get a top-notch, native image editor designed exclusively for the Mac that is sure to make ex-Photoshop users feel immediately at home. It’s a first-class Mac citizen, not some cross-platform Frankenstein, which means it opens lightning-fast, is easy on your battery life, and can take advantage of the latest graphics tech that Apple offers.

I use Acorn almost every day for editing images before I drop them into my Xcode projects and for optimizing photos I post to this blog. Is it as powerful as Photoshop? No. Of course not. But in the many years I’ve relied on Acorn (as a power user, not as a professional designer) I can’t remember a single time I’ve needed to reach for an Adobe app.

It’s a prime example showcasing how a solo developer can build an outstanding app when they take full advantage of Apple’s powerful frameworks.

Anesidora

Anesidora is a native Mac app for listening to Pandora.

The streaming music giant has long-offered a pretty good iOS app, but only recently launched their Mac version. Unfortunately, it’s an Electron turd. (Man, I wish I had coined that phrase.) Luckily for you and me, Adam Różyński has built this wonderful app directly on top of Pandora’s API.

What I love most about Anesidora, besides the beautiful UI, is how well it integrates with all the various macOS nooks and crannies. You can see track changes in Notification Center, assign global hotkeys, Apple’s keyboard media keys do the right thing, and it will even pause the music if you take an AirPod out of your ear.

And because it’s a real Mac app, there’s no need to fire up a full instance of Chrome and Node just to play some music. Right now as I’m typing this and listening to Talking Heads, Anesidora is using 92MB of RAM and virtually no CPU. For comparison, Safari, idling in the background with no windows open, is using 105MB.

DEVONthink

I’ve written twice about DEVONthink recently, but holy damn do I ever love this app. It’s been around for years – I’ve been a customer since at least 2009. It’s where scanned copies of all the documents that would normally be in my fireproof safe are stored, along with any piece of paperwork I might need to refer to in the future, tons and tons of reference material, archived bookmarks, and more. And whether PDF, image, or what-have-you, it’s all indexed, made searchable, and synced across every Mac and iOS device.

DEVONthink has a truly deep and powerful feature-set. But the reason I want to highlight it in this post is because it’s a perfect example of how you can use AppKit to build a dense, information-rich, highly usable interface. UIKit is wonderful for its simplicity, discoverability, and ease of use, and you can certainly design powerful, professional apps with it, but that’s not its default state. Not even on iPad. AppKit, however, naturally lends itself to concurrent areas of focus and visual hierarchies. You can see more of your work at once and do more with it. Part of that, of course, is that AppKit can run on giant screens compared to what UIKit has traditionally been constrained to. But it’s also a matter of a different philosophy between the two (competing?) frameworks.

Fantastical

Fantastical is the calendar app that Apple should have shipped with macOS. Flexibits goes beyond the basics and shows how powerful a pro version of Apple’s consumer-focused software can be.

Whenever I open a new Mac app, the first two things I do are to look at every menu item and then explore all the settings available in Preferences. Nothing gives me more joy (or sick pleasure) than hitting ⌘+comma and seeing a big, beautiful Preferences window with multiple panes full of fiddly settings I can tweak to my liking. I’m not advocating that developers should provide a switch for every option they were too afraid to make a decision about – sane defaults are a good thing and there’s paralysis in choice, etc – but flexible third-party software is a hallmark of the Mac experience.

Fantastical takes the solid foundation Apple built into Calendar.app (née iCal) and extends it for power users in the ways indie developers are famous for.

Keyboard Maestro

As a geek first, a developer second, and someone who just wants to get shit done third, I love how scriptable macOS is – how automation is part of its DNA.

At the lowest levels you’ve got full access to a Unix environment with Bash (haha) and all the other standard scripting languages and tools. (For now.)

And at the graphical level you’ve got AppleScript and its friendly cohort Automator as well as the Accessibility frameworks. The former allow novice users to bend the system to their will without having to be a real programmer, while the latter gives developers powerful means to manipulate, control, and extend other apps in ways the original developers would never have thought of. (Love OmniFocus? Wait til you hear how it began.)

Keyboard Maestro is a shining example of a best-in-class automation tool for Mac. No matter how I try and describe the app, I’ll be doing a disservice to how insanely powerful it really is. Any time I come across a repetitive task, or wish another app behaved in a different way, or wondered if I could connect this with that, chances are, there’s a way to do it with Keyboard Maestro. It’s probably best I just let the expert tell you how it’s done.

(And it’s not just Keyboard Maestro, there’s FastScripts, Hazel, TextExpander, BetterTouchTool, Script Debugger, and all the various apps that followed in the footsteps of Quicksilver.)

Anyway

I love my phone. I love my iPad. The watch is pretty great and tvOS is tolerable.

But the Mac.

Wow, did they get a lot of things right 35 years ago. It just fits how my brain works.

I’m not afraid of change. I don’t care if I build my UI with drag and drop, purely in code, or with a whizz-bang new DSL. What matters to me is the end result. And after a decade of near stagnation, I want to see macOS pushed forward in bigger and better ways.

Taking an iPad app and adding a menubar, sidebar, mouse support, and even multiple windows may be fine for Twitter, but it’s not going to cut it for end users who expect a level of power, finesse, flexibility, and soul that the Mac exudes. At least not in the Catalina release.

Steve told us there will be trucks. And there will be cars. It’s OK if they’re not the same. I know which one I want to be driving.

My Favorite Email Spam Filtering Rule

All of my email is hosted at FastMail across two domains:

And across those two domains I basically have just three email addresses. [email protected] is my primary email address that I migrated to when I switched away from Gmail five years ago. And then there’s [email protected], which was originally my customer support address but has since been (mostly) replaced by [email protected].

However, one of the really cool things you can do when you accept email at your own domain name is a catch-all address. This means that [email protected] and [email protected] will be delivered to me.

This is great because I can easily create one-off or throw-away addresses like [email protected] or [email protected] that I can filter or block entirely. (You can also do this with Gmail by using [email protected]. Unfortunately, because some web developers are stupid and others are outright malicious, many websites will reject emails containing a +.)

The downside is that spammers are just bizarre. I’ll get random spam sent to [email protected] and [email protected]. As well as seemingly-possibly legit messages sent to [email protected]. (An address I’ve never used, so someone is obviously trying to correlate names to domains.) Its clear some spammers are just blindly sending to random addresses. While others are from bots (people?) trying to intelligently guess possible addresses.

Luckily, FastMail’s spam filters are great, so I don’t ever see most of that junk. But a lot of the more legitimate looking ones do make it through. How do I filter those out?

I could simply just block anything not sent to my real address, but I like having the option of using the catch-all feature as I do make use of it quite frequently. Another option might be to setup a whitelist of allowed recipient addresses, but that would quickly become a pain to remember to update anytime I gave out a new email.

The solution I came up with is simple. (It’s hardly innovative, and I doubt I’m the first person to come up with this method, but I thought it worth sharing.)

My Favorite Email Spam Filtering Rule

I created a rule that moves any email not addressed to one of my primary emails to a folder called Aliases. This serves three purposes:

  1. It allows me to continue using my domain name’s catch-all email address feature, but keeps the truly bizarre as well as possibly legit spam from clogging up my inbox.
  2. Much like SaneBox‘s @SaneLater feature, I can check-in on this other folder at my leisure because I know that any email that ends up there is either unimportant or plain spam.
  3. It lets me quickly see at a glance and setup a rule to block any repeated, bogus emails. If these types of emails where mixed in with the ones sent to my real address in my inbox, it would be harder to spot the invalid catch-all ones – especially on mobile devices which typically don’t show the full to: address.

Like I said, this isn’t exactly rocket-science. But it’s a nice improvement I made a few months ago, which has saved me a good bit of time dealing with those extra obnoxious emails that slip through my spam filter.

Automatically backup up the full contents of your Pinboard (and Pocket) bookmarks in DEVONthink

This is a followup to my post last week about archiving your existing Pinboard bookmarks into DEVONthink. I wanted to clarify two points and also explain the new workflow I’ve setup to automatically archive any new websites I bookmark – whether in Pinboard or Pocket.

  • First, in my last post, I said “I recently stopped using Pinboard as my primary bookmarking service”. I misspoke. I’m still using Pinboard to bookmark websites I want to remember as I come across them. However, I’m no longer paying for their add-on archiving service. It’s a great feature, but it had just a little too much friction for me to make genuine use of it. I like my new solution, which I’ll detail below.
  • Second, I just want to give a heartfelt shout-out to Pinboard for simply being an amazing example of a phenomenal service that a solo developer can build “the right way” over many years into a sustainable, profitable business without relying on venture capital. While not nearly as successful, it’s the same path I’ve tried to follow with my own business.

Anyway, here’s what I’m doing now.

With all of my previous bookmarks safely archived in DEVONthink, I turned my attention to automatically importing new ones as well.

I’m using the new version 3 beta of DEVONthink and discovered it has a new “Smart Rules” feature. (At least I think it’s a new feature. If it’s not, how its the world did I miss it for so many years?) Smart Rules are like the typical NSPredicate-based Smart Folders you see in other Mac apps such as Mail. But instead of simply showing you a filtered view of your data, Smart Rules allow you to perform a chain of actions on items that match your criteria.

Both Pinboard and Pocket offer RSS feeds of your bookmarks. And DEVONthink allows you to subscribe to a feed and import its items into your database.

So, I added my Pinboard and Pocket RSS feeds into DEVONthink, and then created a Smart Rule that runs whenever a new item is imported. The rule takes the URL of the new item, converts it into a .webarchive, and moves it into a pre-determined group for permanent storage.

The result is that I now have an automatic snapshot of everything I bookmark as it appeared at the time I saved it, which can be searched and retrieved via DEVONthink’s amazing full-text search engine, or exported as a PDF at a later date if I ever have the need. And with DEVONthink To Go, those archives are also available across all of my iOS devices as well.

After you’ve added your RSS feeds to DEVONthink, here’s a screenshot of the Smart Rule I’m using to do the archiving.

Automatically backup up the full contents of your Pinboard (and Pocket) bookmarks in DEVONthink

How to Import Your Pinboard Bookmarks Into DEVONthink and Convert Them to Searchable Web Archives

Pinboard is a web-based bookmarking service that can optionally crawl the websites you save and store a complete copy of how they appeared at that time.

Because Pinboard is a good web citizen, they allow you to request an archive of all of your bookmarks and their saved contents as a tar.gz file.

I recently stopped using Pinboard as my primary bookmarking service and wanted to export my data and store it somewhere in a searchable, archived format.

I already use DEVONthink to archive and search all of my scanned documents and PDFs, so it seemed like a natural choice as it also supports just about any other file format – including macOS web archives.

The backup archive that Pinboard gives you contains a folder for each of your bookmarks containing the complete contents of the scraped website as well as a JSON-formatted manifest file of metadata.

I spent a few hours trying to wrangle everything into DEVONThink using some AppleScript trickery, but was never successful. But then two thoughts occurred to me:

  1. You can save a URL to your DEVONThink database and then use a menu command to scrape the website into a PDF or .webarchive.
  2. .webloc files can refer to any URL scheme – including file://.

What if I generated a bunch of .webloc files – each one pointing to the location on disk of my Pinboard bookmarks? And then imported the .weblocs into DEVONThink and told it to crawl those URLs?

It worked!

And if you also happen to have this rather unique need, well, I’ve made the PHP script that does it all for you available on GitHub.

The PHP script in the repo will read the contents of your Pinboard archive and generate a .webloc file for each bookmark. Those files can then be imported into DEVONThink as file:// URLs pointing to the archived web content on disk. Then, DEVONThink can “crawl” those file:// URLs and convert them into searchable web archives. Afterwards, the .webloc files can be deleted.

On my iMac Pro with a fast internet connection, importing 3,500+ bookmarks and their 2GB worth of web content took about four hours. After it was finished, I had a fully searchable archive of all of my Pinboard bookmarks that can be sync’d across all my of Macs and iDevices.

Hopefully someone else will find this script useful.

My One Feature Request For iOS 13

With WWDC fast approaching, it’s the time of year when everyone posts their hopes and dreams and predictions for Apple’s upcoming software release. There’s tons of great ideas out there, and I certainly have my own feature requests both as a developer and as a consumer, but I just want to write today about one that is especially irksome during this (US) holiday weekend.

Marketing push notifications.

The Memorial Day holiday weekend in the US is a popular time for friends and families to gather and cook a shared meal together. It’s sort of like another Thanksgiving at the beginning of Summer. And in the past three days I’ve received push notifications from pretty much every food delivery app on my device. Papa John’s, Uber Eats, Drizly, Pizza Hut, DoorDash – they’ve all sent me alerts saying basically the same thing: “Hey! Are you a lonely shut-in? Just don’t want to cook? Don’t forget that you can pay us an exorbitant delivery fee and we’ll give a suburban mom $0.60/mile to bring food to YOU!”

Look, I know I can turn off notifications for these apps. But when I actually do use them, getting an alert that my order has been received or is on its way is useful. I just don’t want all the rest of the marketing/growth bullshit. In fact, Apple agrees with me. The App Store Review Guidelines have this to say about push notifications:

4.5.3 Do not use Apple Services to spam, phish, or send unsolicited messages to customers, including Game Center, Push Notifications, etc.

and

4.5.4 Push Notifications must not be required for the app to function, and should not be used for advertising, promotions, or direct marketing purposes or to send sensitive personal or confidential information. Abuse of these services may result in revocation of your privileges.

The App Store is eleven years-old. Do I actually expect Apple to suddenly start enforcing their rules now, when they’ve been turning a blind eye towards growth-at-all-costs for so long? No, of course not. Just like mailing lists, mass push notifications obviously drive consumer spending. And with Apple hyper-focused on increasing services revenue to offset declining hardware purchases to appease Wall Street at the cost of degrading customer experience, they’re certainly not going to bring the ban-hammer.

But maybe there’s a middle ground.

I propose segmenting push notifications into two groups:

  • Alerts related to my account
  • Marketing and everything else

Let me enable/disable those in any combination.

While I unsubscribe from most company mailing lists, there are quite a few marketing emails I regularly get and look forward to. So I wouldn’t necessarily just mass opt-out of every marketing push notification. Just the ones that are noisy and truly irrelevant.

Will Apple actually do this? Hahahah. No. Of course not. That would take courage.

Creating a Permanent SSH Tunnel Back to Your Mac at Home

Today’s post is a bit more technical than what I’ve been writing about lately, but it’s also partly for my own reference to save me some googling when I forget everything again in the future.

I was always a big fan of Apple’s Back to My Mac service. I found it incredibly useful to be able to screen share with my Mac at home and access its files. (So useful, in fact, that I even built an app to extend the service’s functionality.) But Apple shut down the service in Mojave. And besides, with all my data now in the cloud it’s become less of an issue since there’s rarely ever a file that’s “only on my Mac” back at the house. I do still find the need to occasionally SSH into my LAN or screen share, though. And for the last few weeks I’ve been spending more time working outside the comforts of my home office. And it looks like that may continue for the foreseeable future – at least for a day or two a week.

So, this holiday weekend I decided it would be fun to finally get around to setting up some sort of permanent connection that would allow me to log in remotely.

For various boring reasons all the devices on my home network are behind two layers of NAT. Opening up a hole in my gateway’s firewall and forwarding a port or two would work, but that has always felt a bit icky to me – I don’t like the idea of some automated bot on the internet finding an open port on my network and just hammering away at it.

Luckily, from my time spent working remotely for Yahoo!, I got pretty good at the ins-and-outs of setting up SSH tunnels. And I happen to have a few web servers on the public internet with bandwidth to spare.

So, I added this to my ~/.ssh/config file:

With that in place, I can run ssh vpn, and a reverse SSH tunnel will be established between my Mac inside my network’s firewall and my remote web server. It will then forward ports 5900 and 9933 on the remote host back to my local Mac’s VNC and SSH daemons.

This means when I’m working remotely I can run ssh home on my laptop (or phone if I’ve got something like Prompt installed) and I’ll be SSH’d into my Mac at home. Further, I can then open up macOS’s Screen Sharing.app and connect to localhost:5901 to access my Mac’s desktop.

So, that all works great. The only issue is that if the SSH connection from my Mac at home to my web server is interrupted, the internet flakes out, or I restart that Mac, I’ll need a way of automatically reconnecting.

For the last few years, whenever I’ve needed to keep a job running on one of my web servers, I’ve used supervisord. It’s easy to install, flexible, and mostly straight-forward. Without giving it much thought I did a quick search to see if it’s available on macOS and – yep! – got it installed a minute later with Homebrew.

For reasons you’ll read about in a minute, I won’t go into the boring details of getting supervisord to launch automatically when macOS boots, or how to configure the program to launch and keep my SSH tunnel open. I’ll just say that after an hour of hitting my head on the desk, I was never able to get the tunnel to connect when my Mac restarted.

The supervisor program I setup would get stuck in a backoff state that would eventually fail after a number of retries and end up as fatal. I don’t fully understand why, but my best guess is that supervisord tried to launch the job before the network came online. SSH would, of course, fail and exit unsuccessfully. At which point it would get retried again, fail, repeat, etc. Again, I don’t know for sure – that’s just my best guess.

Instead, after taking a break to play with my kid and think things through, it dawned on me that I was making this all way too complicated. macOS already has everything I need built-in.

I fired up LaunchControl and two minutes later had a launchd job installed that opened the SSH tunnel on boot and kept relaunching it if it ever failed.

Practically, this meant that it immediately re-spawned the connection over and over at launch until the network came online and SSH connected. Once that happened, the connection typically remained open for hours if not days at a time. And in my testing, any time the network glitched out, launchd would keep restarting it until the internet was back up and a new connection was made.

Here’s the .plist for the launchd job that LaunchControl generated:

So now everything’s working. I can connect back to my Mac at home from wherever I am. Whether I’m on wifi or cellular, on my laptop or iPhone.

I’m also reminded how incredibly robust macOS is and to not reinvent the wheel so quickly. There are a million-and-one ways of automating your Mac. It’s best to turn to one of them before looking at third-party solutions.

Apple Asked For Feedback

Apple asked for feedback from developers today in an email survey. I try to keep this blog positive and restrict most of my snark to Twitter, but I figured I might as well post it here, too.

If you can’t see that image for some reason, here’s what I wrote:

I’m a long-time, independent Mac developer. I’ve traditionally sold directly to customers and, now, with the Mac App Store, still push customers to my website first. The value Apple provides with the store is simply not even near worth the 30% cut. When selling directly to customers, after credit card fees, etc. I pay around 8%. I’d be happy to give Apple (maybe) 15% for the (limited) exposure the App Store offers. But not more than that.

Also, in general, the Mac App Store is a kafkaesque hellscape full of scam artists that erode customers’ trust in the overall system and shitty apps that are nowhere near the level of quality that long-time Mac users expect from 3rd party software.

Add to that the arbitrariness of App Review, which seems more interested in penalizing legitimate developers for the most insignificant of reasons, while big name companies get away with flaunting the rules, and fly-by-night developers actively ship malicious, misleading, predatory, and outright-broken software. I have no idea what the point of App Review is if they’re not going to enforce the rules consistently and actually vet the apps in the store.

I absolutely love developing for Apple’s platforms, but if you weren’t the 800-pound gorilla in the industry, there’s absolutely no way in hell I would put up with the shit you throw at honest, hard-working developers trying to better your platform and earn a living.

Missing Rdio and Making the Best of Apple Music with Shortcuts

Man, I miss Rdio. I mean, I really miss it. I loved that service.

When I was a teenager, I’d spend hours on the weekend and get lost in new and used music stores (CD’s) just digging through stacks of beautiful album artwork and unfamiliar band names. I’d talk with other customers and ask the clerk to let me sample a few tracks when something caught my eye. The joy was in the discovery as much as the actual purchase and listening that came later.

Rdio was the first streaming music service I used. It was like walking into an infinitely large music store. And it was all free! (Well, $10/month.) Their UI was wonderful. Websites today are walled gardens designed to keep you on the property for as long as possible. But Rdio, like the web of the late 90’s and early 2000’s, was overflowing with links leading through a maze designed to get lost in. Each album page – in addition to the artwork and song listing – had detailed info about the band, their other music, related artists, genres, etc. (The only similar mainstream experience I can think of today is when you fall down a Wikipedia rabbit hole.) And the majority of the pages had an in-depth critic’s take on the music in addition to listener submitted reviews that were generally well written and free of the awfulness we see in YouTube’s and Facebook’s comments section today.

What I’m trying to say is Rdio came very close to recreating the record store experience in digital form. Apple tried and failed with Ping and has since made additional social attempts inside Apple Music. I can’t really speak about what Spotify is like now. I was a subscriber for a few months after Rdio died, but it never really stuck for me – and Apple Music’s tight integration with Mac and iOS have kept me tied to their service instead.

So using Apple Music the last few years has been fine I guess. I can play what’s in my own collection (usually), and search their streaming library, but I find it extremely difficult to organically discover new music. It’s sort-of possible on the desktop with iTunes, but the iOS app (and I took a look just now to double-check) only shows “other albums by this artist.” The “For You” tab makes an attempt by showing other genres similar to what you already listen to, but I find their algorithmic recommendations lacking. And, again, if you do tap on one of the suggested albums, that’s about as far as you can go. You can’t further explore beyond that artist. And don’t even get me started on the “Browse” section or whatever the hell Beats 1 is doing. That’s a dumpster fire of shitty editorialized content that I can only assume is mass promoted by the record labels for the masses. (Yes, I might just be snobby and elitist about my music, but I really do have a lot of pop music in my collection that I enjoy. I just find most of Apple’s selections…shallow.)

Anyway, like I said, it’s fine. Not anything special, but fine.

But over the last few months I’ve made a conscious effort to start listening to more music again. I used to always have something playing in my bedroom, dorm, various apartments, and later houses. But I think once my kids were born, their needs and noise took over and music fell to the wayside. But now I’m using the wonderful Anesidora app to keep Pandora shuffling through songs in my office where I sit all day. I need to stay focused on my work, and having to think about and choose something to play takes me out of the zone. I like that I can just tell Pandora to play something it thinks I’ll enjoy and it will take care of the rest. It’s mindless and exactly what I want.

But Pandora typically only plays music I’ve already listened to and given a thumbs-up. It rarely surfaces new music. That’s what I still have to try and use Apple Music for. And I typically try and do that when I’m in the car.

Using your phone for anything while driving is stupid. So if I want to queue up some music, I have to do it when I’m still in the driveway or if I think I have time and it’s safe while stopped at a traffic light. But I need to be fast about it. And that’s where Marvis, Launch Center Pro, and Apple’s Shortcuts app come into play.

I discovered Marvis last month from Ryan Christoffel at MacStories. It’s a highly-customizable client for Apple Music. All of your songs, playlists, and the entire Apple Music catalog in a gorgeous, functional UI that you can design around your own needs. Here’s what my setup looks like:

Marvis Pro Screenshot

I’ve got the Home screen organized so that I can tap and play my most listened to playlists and albums without scrolling or having to dig through Music.app’s tabs and navigation stacks.

Specifically, at the top I can start any music I’ve recently added to my library. I’ll often go on a music adding binge and add a ton of stuff at once then finally listen to it days or a week or so later. This section collects all those albums in one spot so I don’t forget to try something new that looked interesting to me.

Beneath that are three of Apple Music’s main auto-generate playlists. Again, I have one-tap access to my Favorites when I want to hear something familiar and New Music that Apple thinks I might like (which is often hit or miss).

Further down the screen is “New For You”, which is a stream of new releases from artists already in your library. I’ve wanted this feature in iTunes for years, and I’m thrilled Apple Music delivered.

Of note: I’ve used the display settings in Marvis to pack as much music into as small a space as possible. This puts as many tap targets within “thumb reach” as possible and minimizes any scrolling I need to do. Very important when that red light could turn green at any moment.

Next up, if I want even faster access to my most common playlists, I’ve created three shortcuts in Shortcuts.app to play Apple’s “New Music for You”, “Your Favorites”, and their top Alternative songs and added them to Launch Center Pro’s excellent Today widget. From my phone’s home screen, I can swipe left and tap to start playing.

Launch Center Pro Screenshot

And going a bit further with Shortcuts, I’ve added two as icons on my home screen:

  • “Play Album”, which starts playing the full album that the current song belongs to. This is super useful when I’m listening to a suggested music playlist and it plays a new artist I’d like to hear more of.
  • And “Bookmark Song”. This adds the current song to a playlist I made called “Bookmarks”. I treat it like an Instapaper for music that I can come back to later when I have time to explore.
Shortcuts Screenshot

So, that’s my music setup at the moment. I achingly miss Rdio but am trying to make the best of Apple Music by making it as easy as possible to listen to the music I love and explore the new songs it thinks I’ll enjoy.

Starting and Finishing More Long-Form Writing in Drafts.app

I’m writing this blog post in Drafts.app on my Mac. But before I publish it, I’ll also probably do some light editing of it on my iPad before bed. And I’ve been capturing ideas, short thoughts, and building a basic outline on my phone over the past few days as things occur to me or I find myself with a bit of downtime.

I’ve been a heavy Drafts.app user on iOS for years. But this workflow is relatively new for me and came about with the release of its Mac counterpart two months ago.

Previously, for going on I don’t know how many years, all of my long-form writing, which typically means blog posts, has lived exclusively in MarsEdit. (Really long-form stuff like magazine articles and a few aborted attempts at writing a book are done in Scrivener.) The app syncs perfectly with WordPress and allows me to write in Markdown and preview my words in a live, pixel-perfect preview of my blog’s template.

But MarsEdit doesn’t sync between my desktop and laptop. And there’s no iOS counterpart for writing on-the-go. So that forced me to write the whole post from first draft to published version on the same machine. It also meant the outlines for my longer posts and short scribblings lived in other apps – sometimes OmniOutliner, other times Apple Notes, and occasionally OmniFocus and Drafts.app. I didn’t have a single unified workspace for all my thoughts.

Drafts for Mac has changed that. With seamless sync, I can begin writing anywhere I want, come to a stopping point, and pick back up later exactly where I left off on any device.

Dr. Drang wrote last week

Drafts has become the place “where text is.”

I couldn’t agree more. Looking through my Drafts Archive section, it’s now overflowing not just with short beginnings and snippets that got quickly shuttled off to other apps, but real writing. It’s my one place for everything in-progress as well as a history of final outcomes.

As for the specifics of my new blogging workflow, all of my posts are assigned a tag of blog. (It’s currently the only tag I use for anything.) Then, I have two custom Workspaces.

One called “Blog Posts” which only shows drafts tagged blog, defaults to Markdown syntax highlighting, and automatically switches to my Markdown helper keyboard on iOS.

And then there’s another workspace titled “Everything”. It doesn’t actually show everything. Rather, it’s everything that’s not tagged with blog. I’ve currently got about twenty unfinished posts in some form or another in my Inbox. I don’t want those clogging up and crowding all my other notes which tend to be more “action oriented”.

These two workspaces let me quickly switch between notes that I might need to do something with or reference and those that stick around longer and require a more focused, creative mood to tackle.

And as an added bonus, the Mac app can now show a live preview of your post rendered in your website’s theme, too – just like MarsEdit. (The iOS app has been able to do this for a while as well, but it doesn’t let you see the preview and edit text at the same time.)

Anyway, that’s all a long way of saying that I couldn’t be happier with this new setup. Drafts truly is where all of my text starts.

Losing Faith

I posted this to Twitter earlier today, but thought I’d add it here for posterity…

Last week I mentioned that I had been yelling about Apple a lot on here lately and was going to try and be more positive. But allow me one more thought before I shut up…

We went on vacation this past week. Before we left I updated my phone to iOS 12.3 – my wife remained on the previous version. (This is where you all collectively go “uh-oh”.)

Spent five days at a state park shooting tons of video of the kids swimming, hiking, fishing, playing with their grandparents, etc. Irreplaceable stuff.

Get home, back on WiFi, start uploading everything to iCloud and Google Photos. After an hour or two everything’s synced.

Problem: All videos, of any length, stutter, stall, and skip frames in both Photos.app (macOS) and Google Photos on every Mac I try. Completely unwatchable. Time to debug things.

I export the raw files out of Photos.app to Finder and try opening with QuickTime. Same problem. Next, I use Photos.app to import directly from my phone via USB. Still broken.

But they play fine on iOS, so I never noticed any problems while filming last week.

Investigate further. It’s only MY videos that are broken. Videos my wife took are fine. Remember: I’m on 12.3. She’s on whatever 12.2 release was before.

All those videos of my kids? Gone.

This is a core competency of iOS that should never, ever fucking break for any reason. Apple markets iPhone’s camera as a top selling point – if not THE selling point.

Lucky for me, I’m tech savvy enough to know about Image Capture.app buried inside macOS’s Utilities folder. So I give it one last try using that to transfer the corrupted videos manually off my phone and into Photos.app and Google Photos.

It works. My memories are safe.

But would a normal Apple customer have thought to try that? Would an Apple Genius have figured it out? (Assuming they could even get an appointment.)

No. They would have simply lost everything.

This is fucking inexcusable on Apple’s part. DO NOT fuck with me when it comes to my photo library.

Apple needs to get off their goddamned pedestal, stop hosting self-congratulatory Lady Gaga concerts, and fix their fucking QA process, years-old bugs, and keyboards.

On the bright side, while I may never be able to trust Apple again with my photos (or type vowels on their laptops), at least they’re about to roll out a new credit card and custom-branded television content.

Courage.