Ruthless organization.

I’m really enjoying Relay’s new Cortex podcast with Myke and CGP Grey. While I was familiar with Grey’s work before, this is actually the first time I’ve spent specifically listening to him. I know, Hello Internet is everyone’s favorite show, but I’m a little late to that party, so forgive me.

In this weeks’s episode, Myke and Grey continue to chat about homescreen organization, and Grey reveals that he hides Safari via iOS Restrictions. Although this literally made my jaw drop as I listened (I’m not kidding), I totally get the idea. I’m constantly trying to streamline my phone for the best combination of access to things I want and efficiency, while eliminating things that are just hopeless time sinks. Grey is pretty ruthless about what he allows on his phone, and while I’m not all the way there (I still derive a lot of actual business and personal value from using Twitter on my phone, for instance), it’s an interesting exercise to try.

Sometimes I feel conflicted about spending time thinking about stuff like “in what better way can I optimize the way my apps are displayed”, but I do like going through these steps because I’m constantly reevaluating all kinds of things in my life, and this is just one of those things. I see it as an extension of personal growth and awareness, and as long as it doesn’t get in the way of actual things that need to happen, I think it’s probably fine to reflect on things like this.

Auto-posting to WordPress (and archiving in Dropbox) with Drafts.

Last week at WWDC, I was lucky enough to spend some time with my friend Manton Reece talking about writing. He shared with me that he had a great little setup for posting short content to his WordPress site using IFTTT’s Do Note app and a plugin. He uses a customized version of the “status” format in WP to insert these smaller thoughts and then builds a separate RSS feed that you can optionally subscribe to in addition to the longer articles.

I thought I might like to do something like this, but after looking into it further, didn’t feel like tinkering with the post format, and figured I could probably get by with the standard format. But since every post I write starts as/is stored as Markdown in Dropbox, I was unable to automate the WP integration the way he had and still generate a local copy for myself. So I began thinking through this with one of my favorite apps, Drafts. What I was able to put together was a multi-step action that allows me to do exactly what I want with almost no effort.

Drafts allows you to send email as an action. WordPress allows you to post into the system via email. Using a combination of the action and the Jetpack plugin’s email functionality, I can go from idea to published in seconds, without touching the WP iOS app (which continues to get better, but still isn’t fast) and get my local copy stored away.

Let’s say I have an idea for something longer than a tweet, but shorter than my usual posts, and I want to just throw it up on the site. I open Drafts and write a short post where the first line is the title, and the remainder is the body. I run my “Quick Post” action which does the following:

  • Prompts me to pick 1-2 categories for the post
  • Launches an email sheet to allow me to proofread the post before sending
  • Using syntax provided in Jetpack, the post is published
  • Creates an archival .md file in the directory in Dropbox where my posts are stored

This could be sped up even further if I trust that I wrote everything correctly and skip the “foreground” email option to send in the background. However, the other benefit to having the draft email come up is the ability to edit any of the syntax on the fly if I decide to change something at the last minute. You also have the ability to simply create drafts of posts instead of auto-publishing by changing the post status option from “[status publish]” to [status draft]”. I’ve built this into a separate action so I have the ability to do either one quickly, if I’m not quite ready to put something live.

You’ll need to enable email posts on your WP site first, and generate the incoming email address to use in the Drafts action, so make sure it’s enabled and entered correctly. I also wanted to have the ability to add that second category prompt but back out without canceling the entire operation, so I asked Greg about it and he mentioned that if you turn off the “Include cancel button” option and create a button that just says “Cancel”, you can skip that step without stopping the whole action. This does create a tiny bit of editing that needs to be done, because you then have as category slugs something that looks like “[category apple,cancel]” but it adds a little flexibility and I’m willing to accept that tradeoff in that final step, since I’m proofreading (and potentially editing slightly) anyway before posting. But, since Greg is awesome, he added a scripting step to the action, which obviates the need to do this. Also, I only use categories, so you can add a step for tags if that’s more your flavor (see the Jetpack page for more info).

If you’re interested, I’ve posted the sample action (minus my WordPress-specific details) to the Drafts Action Directory here. After posting, on the web it displays the CC and BCC lines as filled with the same sample email address, but when the action is installed, they should be blank (correctly).

I really like writing in Markdown, and having a copy of all my posts easily accessible that I can return to outside of WordPress. And I’ve been looking for a way to write more frequently without committing to huge ideas. This series of steps achieves that in a quick and easy way, and I’m looking forward to seeing how it works for me.

Workflow: Open tweet URLs in the iOS Twitter app.

Workflow 1.1 is out and it’s a terrific update. I’ve been playing with it since last night and toying around with a few new actions. One that I came up with doesn’t necessarily use the updates to the app but was something I’ve been thinking about for a few days regardless.

I really like the first-party Twitter app a lot and have been using it consistently since last fall. But sometimes when the flood of chatter becomes too much for me and I need to retreat a little, I fall back to Tweetbot or Twitterrific, two other lovely apps. Right now I’m using Tweetbot again because of keyword filtering, which I sorely needed for a few weeks of sanity restoration. But there’s stuff that the native Twitter app does (cards, analytics, archive search, etc.) that simply aren’t available in third-party clients.

Take cards for instance. Twitter has cool media previews embedded in tweets that let you check things out without leaving the app, but you only see a link in a third-party client. I built a little workflow that lets you open the tweet you’re currently viewing in the Twitter app to take advantage of some of those additional features.

In order to to this, I had to figure out how to get the app to recognize the URL being passed to it. Basically, you copy the link to the tweet, which gets formatted as an https:// link, which of course will open in Safari by default. Once there, there’s a tiny button in the web UI to open in the app. I copied that URL and applied it to a workflow step.

So you run the https link through a “Replace Text” step and strip out everything before the status ID, which is a long string of numbers, and append it to a link that opens the Twitter app itself (starting with twitter://). I’ve never used regular expressions before, and I know that while everyone gets all fired up about them, I just never had a reason to. But I tried it today so that you could send any tweet URL to it and it would strip the username and prepare the ID properly. One period and one asterisk later, I’m a regex expert AMA.

Seriously, don’t though, I barely got this to work. If anyone has any beginner regex tips, though, I’m all ears.

Anyway, it looks like this, and you can download it here. As with most of my first draft workflows, it can probably be done better, so have at it. I thank you in advance.

Behold, the majesty of my regex prowess, and despair.

02-17-2015, 7:05 AM
David Chartier linked to a better version with variables and all kinds of whiz-bang stuff that bypasses the copying I was doing and saves a step. Use this one instead (I know I will).

I really have to learn how to do these more complex things to take my game to the next level.

Workflow: Annotate Screenshot and Delete.

One of the things I’m always trying to do is reduce the number of apps I need to use to accomplish certain tasks. In the absence of Yosemite’s Markup feature on iOS, I’m using Skitch, and have for a while. It’s good, but I almost never open it unless I need to draw an arrow in a picture for some reason. And then I send it somewhere, and then I have a screenshot I don’t really want, and a second version with an arrow. Both of which I want out of my Camera Roll.

So I built a workflow to do just that. Here’s what it does:

  • Looks for your most recent screenshot
  • Opens that photo in the editor so you can do whatever you want to it
  • Copies the edited photo to the clipboard
  • Launches the Share sheet
  • Provides the option to immediately delete the original screenshot after sharing is complete

Instant editing, no messy screenshot leftovers. Unfortunately since the image editor can’t currently run as part of an extension, you need to launch it by itself. If that changes, this is going to be awesome.

Get it here:

Annotate & Delete

12-14-2014, 9:24 PM
Phillip Gruneich over at One Tap Less (one of my new favorite places on the internet) took this and improved on it, bypassing the clipboard entirely. I’m still getting the hang of variables, so any time someone can take my initial idea and make it better, I’m all for it. Check out his full post here, which has a few other gems as well.

Oh, and it was brought to my attention that the ampersand in the workflow name causes trouble if you try to use it in Launch Center Pro. Just change it to ‘and’ to avoid that. Didn’t occur to me. I just liked the way it looked.

Quick memes with Workflow.

Something I do a lot (for better or worse) is look for silly images online, and apply text over them, for ostensibly comedic purposes. How effective this is depends on a variety of factors, such as alcohol intake for the evening, who the intended recipient is, etc. Anyway, there’s this amazing new app called Workflow that is bound to make so many things on iOS so much cooler and easier. It’s truly a groundbreaking achievement, and as such, I decided the first noble application of this new power would be to extend my reach as a horse’s ass.

With that, I introduce my first workflow. I’ll probably revise it, and I’m certainly looking for feedback if you’re the kind of person who can make it better. Please get in touch. Anyway, here’s what it does. It’s saved as a shortcut in Launch Center Pro. When I tap it:

  • The Workflow app launches
  • I’m prompted to enter some text
  • I’m sent to Safari for a Google search on that term, where I can pick “images” and find something
  • I find an image and copy it to the clipboard
  • A second workflow that sits as an extension 1 returns me to Workflow (the app is told to wait until I return to continue executing the flow)
  • Upon returning to the foreground, it opens the clipboard contents in the image editor
  • From here I can add text quickly
  • The new image is saved to the Camera Roll
  • Then my Twitter app opens, and I can drop the new asinine image right into a tweet

I know for sure that I can tighten this up, and I plan to keep tweaking it, as well as try to do something legitimately productive with this unbelievable app. But this was a great little exercise to figure everything out and now I have a handle on the basics.

If you want to try it out, you can install the following:

Add Text to Photo

Return to Workflow (action extension)

Have fun and make lots of hilarious pictures!


  1. I reached out to Ari for a hand relaunching the app from the action extension since I couldn’t get the default URL to work. What’s currently saved in that extension will likely change as the team updates the URL scheme(s) for the app, so keep that in mind. For the time being, it functions as expected.