Fantastical 2.4

Michael Tsai - Blog - Fantastical 2.4 for Mac

It’s like they read my mind and implemented my four most-wanted features. Great update. Hopefully attachments and travel time will also come to the iOS version soon.

Fantastical at this point is simply the best calendar application on both macOS and iOS. It is one of the handful of apps that I absolutely must install right away when I get a new device. It has come a long way from the first version, when it was essentially a clever menu bar widget for fast iCal (later Calendar) entry.

When Fantastical 2 first came out, I still kept both Apple’s Calendar app and Fantastical in the dock. Some things were better displayed on Calendar than Fantastical. As Fantastical has improved, I found increasingly fewer reasons to open Calendar, and eventually I removed it from the dock. On iOS, I still (technically) use Calendar. Calendar’s widget is better than Fantastical’s for showing the coming block of time, so I have both widgets enabled in Notification Center.

I have been using URIs, and later Dropbox-sharing URLs, as a workaround for attachments in iCal for a very long time, probably nearly as long as it has been in the spec. This works but has never been very elegant. Since I’ve got those habits and some automation built around it, in practice I’ve found I don’t use actual attachments often, though the implementation in Fantastical 2.4 is well done.

The combined calendar display is clever, and it’s both useful and reasonably attractive. I set up a Zapier-to-Google-Calendar workflow to start certain timers on Toggl sometime after I started doing time tracking full-time at the end of 2016. This update makes it possible to leave that calendar visible as an indicator that those events are properly mirrored, without the calendar view feeling crowded and cluttered. Like many good software innovations, it feels so obvious once you see it that you wonder why no one ever did it that way before.

Undo and redo are features that I would have benefitted from literally only hours before the update was released. The extended month view is a good compromise to deal with the problem of high information density in limited space.

Daring Fireball

It really is a great update. I’m not even sure what to ask for at this point. No app is ever “done”, but at this point Fantastical feels feature complete.

Gruber may think Fantastical is feature-complete, but I’ve had something on my wishlist for years. No software on the market offers the ability to set odd intervals or perform date calculations. I’ve had some recurring duties that are supposed to be done every 10 days, not counting holidays.

I can’t simply enter an event like this in any calendar software with a preset reminder and forget about it until I get an alert. Instead, I have to enter dozens of entries at odd intervals; or enter a repeating event, check every single future event, and move ones that conflict, with cascading changes necessary further on.

Supposedly, the automation of detailed repetitive tasks that are easy to screw up if you do them manually is what computers were made for, but no one seems to have filled this niche. This kind of interval is a really common case for educators and students. Though it might be more rare for regular office workers in many places, it’s quite common in Japanese offices to have duty rosters that don’t follow a normal weekly schedule, like my 10 day rotating schedule.

Most calendar programs don’t even have a way to set something like “the third Saturday of every month”. Fantastical gets this right on either macOS or iOS. But I wish someone would build support for entering arbitrary intervals that could be cross-referenced with another calendar, like a subscribed holiday calendar, for conflicts and automatically enter events so that they fall on the appropriate date.

I was so frustrated with having to enter so many of these kinds of events by hand at the beginning every new work year, that I investigated scripting my own solution. Which is like being annoyed by a single mosquito and deciding to eradicate malaria.1

Also, while Fantastical’s natural language parsing is really good, there should be a way to specify a note for the event as part of your entry. You can set notes using the URL scheme on iOS,2 and both iOS and macOS versions will recognize and appropriately handle anything that looks like a URL in the input, but there’s no way to enter a note through the input box without having to click and drop down into the extra info section. A single basic alert can be set by typing something like alert 1 day but neither something like note foo nor note:foo work for setting notes.

Still, these are relatively minor gripes. Fantastical lives up to its name. It is a true Calendar replacement, and it is simply the best calendar for entering new events, which is something I have to do on a near-daily basis.


  1. Sure, no problem. I’ll just whip up a sterility-inducing retrovirus in my spare time. How hard could it be to learn genetic engineering when you figured out basic bio?  ↩

  2. There’s an excellent guide for using Fantastical’s URL scheme at Geeks With Juniors.  ↩

iOS Writing Apps — The New Wave

Prompted in part by Jason Snell’s article, “My iOS writing app of the moment is Editorial”:

Though people have raved to me about Bear, I don’t think it’s for me. I can configure it to be a usable text editor, but it really wants me to use its internal tagging and linking system, and that’s not how I want to work. It doesn’t sync with Dropbox and makes some styling choices (like hiding the content of Markdown links) that I don’t really appreciate. In short, Bear looks like a thoughtful notebook-style writing app, but it doesn’t really fit with how I work today.

And in part by “Bare-Metal Writing: What Our Word Processors Are Missing”:

I’m writing these opening lines in Markdown, using a Mac app called Focused, one of many attempts to rethink the word processor as a minimalist exercise. Every one of my articles starts out in this app (or at least in John Gruber’s neglected gift to the world), and yet, I always find myself looking for another option, periodically launching into a Google deep dive that rarely leads to a better solution. I always feel like my words deserve a better vessel, something that will allow me to write them faster, more efficiently, and with as little friction as possible.

(Full disclosure, one of the links in that Tedium article points to my post, “Standard” Markdown Controversy on this blog, which is how I found it.)

Text editing apps have been a very popular category of the iOS App Store from the beginning, but there has been a recent second wave of note-taking and writing apps that support Markdown.1 While past iOS apps could sync files, most of them didn’t have OS X / macOS versions, leaving that to built-in tools like TextEdit or third-party text editors like BBEdit or TextMate. These new-wave editors have macOS counterparts that integrate coss-platform.

While I have been happy with Editorial , it has been a while since it was updated, and so I re-evaluated my options when new versions of Bear and Ulysses came out recently.

These are both excellent apps, but I have not adopted either of them for writing on macOS or iOS. My preferred apps for writing on iOS are still Drafts and Editorial. I use mostly nvALT, with BBEdit for some tasks, and have Marked 2 as my preferred previewer/converter on macOS.

Obstacles to Switching

The main problem with switching to one of these apps is that my writing process is antithetical in one way or another to how Ulysses or Bear want me to work.

I think one of the main reasons that many developers are now expanding their offerings to Mac apps for cross-platform integration is because of Apple’s improvements to iCloud sync. With iCloud sync, app developers don’t have to depend on the cooperation or existence of a third party solution like Dropbox.

Apple’s expansion of the types of apps that can charge subscription fees is the other change driving cross-platform development. Sync has become valuable because it’s viable, and since it’s valuable, it can be a source of revenue.

This is both a strength and a weakness. I don’t mind paying for good apps, and I understand why going with a platform-native API is preferable in many cases. The problem from the user side is that iCloud is not a replacement for Dropbox.

In iCloud, each app gets its own file bucket and no other app can normally access it. With the changes introduced in the iOS 11 Files app, you can access text documents, but you can’t edit them in-place; you must send a copy to another app. That means that the ease of using different writing tools for different tasks on the same file is just not possible the way iCloud currently works.

I don’t want to import my files into an app, because then I have to keep track of two versions of files, or fully commit to having the canonical version in a proprietary format or location. I don’t want to have to export for the same reasons.

I don’t want to use a special syntax that works only in that app, because then I lose the fluidity of changing apps whenever the task or the situation dictates. It also means that if I want to switch apps, I have elements that I may need to revise or migrate in the future, which is one of the problems that writing in plain text was meant to avoid.

Dropbox Is My Everything Box

I use a folder (very originally named Notes) in Dropbox as my Everything Box. I might create a note in an iOS app — usually Drafts — but my notes sometimes begin as highlights and comments on an article saved in Instapaper through Instapaper notes, or the file could begin life as margin notes on Kindle. On the Mac side I work primarily in nvALT, but I could just as easily start directly in BBEdit or TextEdit and simply save that file to my Notes folder in Dropbox.

The important thing is that everything can read and write to the same place, and that place is Dropbox.

When I first started keeping the majority of my notes in digital form rather than using paper, I used Simplenote because it was fast and its sync system was simple and reliable compared to the built-in Notes app on iOS. When I started working on my note files directly, syncing across iOS and macOS, Dropbox integration wasn’t a given, and Notational Velocity had Simplenote sync built-in. Later, when I’d built up a large enough library, the sync started to run into problems.2 I had already been paying for “premium” and switched to the alternative Dropbox sync which was offered for Simplenote subscribers.

Dropbox sync opened the door to using anything I wanted at any time to work on those files. Evaluating a new note-taking or writing app was as simple as pointing that app at my Notes folder and going to work. It was thanks to the ubiquity and ease of use of Dropbox sync that I tried out Notesy 3 and Byword, experimented with Drafts, and eventually adopted Editorial as my main writing tool on iOS when Notesy development stalled.

Bear and Ulysses

I tried out Bear and even paid for a year up front because I liked it, a lot. It’s beautiful, well-designed, and easy to use, but I soon found that I can’t get over the friction of using its iCloud sync system. I use different tools for different jobs, and I may use 4 or 5 apps to interact with the files depending on what I’m doing with them at the time.

Bear

Good:

  • It’s pretty, it’s well designed and well thought out.

  • It’s theme-able and comes with a particularly nice theme that is unlocked with the very reasonable annual sync fee.

 Panic theme in Bear

Panic theme in Bear

  • It’s relatively powerful already for a new app, despite its surface simplicity. The developer is already promising some changes and improvements in the first couple of updates. There is support for x-callback URLs, with many common actions available, as well as some uncommon ones.

  • I liked it enough on trying it out to go ahead and pay for a year of sync (¥1,600) up-front when I could have just gone the cheap route of a monthly plan, just because I want to encourage Shiny Frog to keep developing it.

Bad:

  • No Dropbox sync. You can import everything from Dropbox, and then it syncs with Bear on iPhone, iPad, or Mac automatically through iCloud, with no need for signing in, exchanging tokens, etc. But once it’s in, you have to export to get it out again. It’s a one-way process; no editing files in-place with different apps from then on.

  • Bear hides links, as does Ulysses. I prefer Bear’s implementation for editing links because it provides a better tap target and the popover is faster and less intrusive than the whole-screen slide-down Ulysses uses, but I still can’t just glance at a link to see if it goes to an appropriate URL.

  • There’s no footnote support yet. I use footnotes a lot.4

Ulysses

Good:

  • I remember trying a version of this (Ulysses 1.5, I think) on OS X before the iOS App Store existed, back when Open Office was a thing. Because it’s not a new program and has been hammered on by users over the years, most use cases have been tested pretty thoroughly. The new version is a substantial re-write and presumably incorporates what they’ve learned.

  • It’s extensible. There are styles and highlighting themes and ways to import fonts5 for use on iOS, as well as other customizations.

  • It’s powerful. You can define your own markup, publish to various platforms right from the app, organize files, and add non-text elements. There are many x-callback URL actions, and it has an extensive set of keyboard shortcuts for iOS.

Bad:

  • Dropbox support feels like it’s only grudgingly supported. Sync with Dropbox is slow and buggy on iOS. I tried using Ulysses for several non-work writing projects during the 14 day trial period. It sometimes took over 10 minutes for sync changes to propagate to the actual files on Dropbox. This doesn’t take more than a few seconds with any other Dropbox-synced app.

  • It’s slow to start. Editorial takes about 3 seconds to load, and usually the full list of files from Dropbox loads in about the same time — depending on available bandwidth and the number of files that have changed. Search on Editorial is also very quick. Ulysses takes about 8 seconds to load on my iPad, and the list of files pops in over literally minutes. nvALT is lightning-fast compared to Ulysses on macOS.

  • Even after I set it aside to give it time to completely sync all files after authorizing Dropbox access, Ulysses still seems to want to load everything from scratch and becomes extremely unresponsive for several seconds every time I open it.

  • I don’t like some of the additions to the syntax. For example, comments could use Critic Markup syntax or even HTML. Instead, Ulysses used their own markup. Critic Markup is useful across applications, and HTML comment syntax will be hidden on export by default without any application-specific processing needed. Ulysses comment syntax 6 shows up as regular text unless you process the file with Ulysses’ export. So, to make your files Markdown-processor agnostic, you can’t use that syntax, nor several other app-specific additions.

  • I don’t like the hidden links or the interface for editing links. It’s slow and wasteful of interface space. Double-tap. Wait for animation. Edit. Tap to exit. Sigh in frustration as you have to do it again for the next link. I want to be able to determine the link URL at a glance and edit everything directly. That’s one of the reasons I started writing Markdown in the first place; transparency.

In the course of evaluating Ulysses (including using it for early drafts of this piece) I also found something that is truly a deal-breaker: Ulysses automatically moves references to the end of the file and then numbers them in the order they occur. It does the same with footnotes.

Don’t do that. I deliberately name my references in ways that make sense and convey meaning to me. If I don’t include an inline link, I put any references directly after the paragraph while writing a draft. In the course of writing I’ll often insert the Markdown bracket syntax for a link without bothering to actually find a URL at that time. That’s a signal to future-me that I need to find that information, but doesn’t interrupt my writing flow at the time.

In editing read-throughs or my final proofreading pass I’ll fill in the targets for those links. Just before publishing, I will often use one of Brett Terpstra’s Markdown Service Tools to move inline links to reference links at the end of the file, but while I am writing I want the reference to appear in context.

When Ulysses changes those reference links from something like [Ulysses][Ulysses iOS] to a number, based on the order that item occurred in the text, it destroys information and disrupts context. In the example above, the reference text tells me that I need to find a link for the iOS version of the Ulysses app, not the macOS version. This is much easier to understand than [Ulysses][5].

When I encountered this behavior and didn’t find a way to turn it off, this automatic switching of link style and reference re-naming got Ulysses summarily kicked to the curb, despite some other appealing features.

Editorial’s Shortcomings

While it is powerful and customizable, Editorial is not perfect. My wishlist for a new version includes:

  • Settings sync, so that iPad and iPhone versions have the same workflow tools and shortcuts in place, and changes to one propagate to the other.

  • Adoption of the TextBundle spec to simplify the inclusion of images.7

  • More regular updates, including better support for external keyboards — like arrow key navigation of file lists — and iOS 11 improvements.

I can see the appeal of both Bear and Ulysses. They include interesting features that, if I were starting out fresh, without established preferences or workflows, might be enough to give up the flexibility of Markdown-agnostic syntax or Dropbox’s universal access and edit-in-place capability. However, Editorial is still the iOS app I prefer to use for most long-form writing.

Given the amount of use I’ve gotten out of this app over the last few years, along with its stability and robustness, I’m more than willing to throw money at Ole Zorn if he came out with a new version. Even if my wishlist items weren’t included right away, I’d have hope that some similar feature was coming in the future, and honestly at this point I almost feel indebted for the time I’ve used Editorial without paying anything more than the very reasonable purchase price (¥600, about $5).


  1. Well, some flavor of Markdown. Both Ulysses’ Markdown XL (go to the Editor section of the FAQ) and Bear’s Polar Bear add elements to standard Markdown. You can elect to ignore their additions to the syntax, however, as both properly support Gruber’s original Markdown spec.  ↩

  2. Detailed here in a post from a few years ago about my writing workflow. As of this writing, I have over 1,700 notes in that folder, compared to the 500–800 I had when I first started having problems with Simplenote’s sync system.  ↩

  3. Notesy is now, unfortunately, completely defunct. The old website, http://notesy.net is no longer in service.  ↩

  4. Even though this meta-footnote was the second footnote in an early draft, I’m dead certain it will not be the second in that order by the time I publish, nor will it be the last footnote. Edit: Oh, look, there are 3 4 5 6 7 footnotes now.  ↩

  5. Look in the FAQ under iOS Editor → How do I add fonts to the app?  ↩

  6. Since I don’t have Ulysses installed anymore, finding a useful reference for the comment syntax was unexpectedly difficult. Apparently, there’s no comprehensive Markdown XL reference guide outside the Ulysses app itself. You have to dig through the FAQs or the blog posts to find references.  ↩

  7. Including inline images in Editorial is possible using standard Markdown syntax. Gabe Weatherhead wrote a post about the iOS tools he uses to make “rich plain text notes” with Workflow and Editorial’s macro tools.  ↩

Fast Contact Creation with Interact

Last year, I wrote Sending Group Emails in iOS, where I showed how to use TextExpander and Drafts to efficiently send emails to a list of recipients on iOS. Apple’s Contacts app doesn’t let you do that at all, unless by “group mail” you mean, “manually add every single recipient from a group with a two-to-three tap interaction” and “you better hope you’ve already created a group on your Mac, because you can’t do it in iOS”.

Earlier this month, Interact, by the maker of Drafts, was released. Dr. Drang tweeted about it, which is what got my attention. Since Drafts is one of my most-used apps, I bought Interact about 15 seconds after reading the description.

Interact is a contacts manager for iOS. The selling point for me was actually not the group management features, but the scratchpad. Dr. Drang’s post about Interact explains the details, but similar to Fantastical, Interact uses language parsing to figure out what bits of information should be entered into what fields in the contacts database. It works directly with your contacts on your phone, so changes should be instant locally, and sync to your other devices through iCloud via Apple’s native Contacts app.

One limitation I found on the first day I used Interact was that it didn’t support the full complement of fields available. I often use Phonetic First Name and Phonetic Last Name for Japanese names because even native speakers often need pronunciation cues,[1] particularly for given names. You’ll be forgiven a first mistaken reading, but you really need a pronunciation guide to prevent future problems. Japanese businesses have fields in contact forms for phonetic transcriptions of both names and addresses, and people with uncommon readings for their names usually include furigana on their business cards.

I wrote a support email to Agile Tortoise (i.e.: Greg Pierce) basically saying that he’d made something great, but hoping that he’d implement support for those fields[2] in a future update. It makes sense for a developer to address the majority use case before looking at fringe ones like my bilingual operating environment, but lo and behold the change notes for Interact 1.0.1:

  • Change: Scratchpad tag helpers now insert tag at beginning of current line if no text is selected.
  • New: phoneticFirst and phoneticLast scratchpad tags.

(Bolding mine.)

The change I was hoping for someday, maybe: it’s on the second line of the first point-update. I wrote that email only about four days ago. This is a developer who absolutely responds to user requests. Buy some of his apps!

Even without TextExpander snippets for tagging fields, I’d be able to add a contact much, much more quickly and easily than I could with the built-in Contacts app. With TextExpander, I can add a contact in seconds. I have a few times a year where I need to add several contacts in quick succession, sometimes in the person’s presence, so this isn’t just a nice convenience for me, it’s a huge productivity booster. Especially impressive; Interact correctly identified the elements of a Japanese address, even though English is the only language claimed to be supported. It needs help with the names, but that’s a very quick select-and-tap tagging process.

Interact’s implementation of groups makes it possible to actually use groups on iOS. Previously, through the Contacts app, a group was useful only to give you a shorter list to choose from, but was basically useless otherwise. I will almost certainly be using groups more in the future, whereas I almost completely ignored them before.


  1. I’ve had reception duties where we’re dealing with literally hundreds of people. Many family names are quite common, but you can easily guess the wrong reading even for simple kanji. For example, 長田 is usually read Nagata, but could be Osada. It is literally impossible to guess the right reading 100% of the time when there might be several possible name readings for a particular set of characters.  ↩

  2. The Phonetic First / Last fields are actually in the spec for the address book, but are not in the standard set of entry fields displayed when the language environment is English — they are shown by default in Japanese. You can go to the “add field” section of the Contacts app in Edit mode when adding or editing a contact in English to activate them, but you can’t change settings to have them on by default, which is a bit of a pain in the ass if you’re adding more than one contact at a time.  ↩

Send Delayed Messages with iOS

You need:

This workflow relies on Due’s ability to trigger a URL when you dismiss the reminder. It does require at least two interactions to run successfully:

  1. Swiping Due’s notice on the lock screen to dismiss the action, which activates the URL. (If you have a passcode or TouchID set up, you will have to also unlock your iPhone at this point.)
  2. Tapping “Send” on the email or message that Drafts generates.

Set up a draft with dummy text. You need to target a specific draft via its UUID to schedule it, so you must enter some text to create a draft to target. I wrote one titled “Scheduled Mail” to create an easily recognizable draft. By default, Drafts will treat the first line of a draft as the subject and insert it with the email action. I want to leave the first line intact as Scheduled Mail and modify the body each time so that I always know which draft is being targeted and don’t delete it by mistake. You obviously don’t want to delete the draft as that will break this action. I created a new action based on the built-in Email action that is modified to use [[body]] instead of [[draft]].

I created this workflow to schedule mail to distribute a workout to my after-school Fitness Club kids, so I further modified this custom email action to use TextExpander to auto-fill the email addresses, using Drafts’ support for TextExpander snippets. Drafts will expand <<;fmail>> (my snippet for my Fitness Club email list) into the full list of emails when the action is triggered.[1] I also pre-filled the subject line with “Fitness Club” followed by the day’s date, which is dynamically filled via a TextExpander snippet. You could pre-fill all of this manually, but TextExpander makes it much easier to update the information since all you have to do is enter it in one place and it will be automatically updated when you refresh your snippets in an app that supports TextExpander.

Get the UUID of the Scheduled Mail draft with a UUID import action (direct import link from the Drafts 4 Review Alex Guyot did on MacStories). This action will copy it directly to the clipboard so you can paste it at the appropriate point.

The first part of the URL is:

drafts4://x-callback-url/open?uuid=

Paste in the UUID of the Scheduled Mail draft here.

The UUID should be followed by

&action=Email

to use Draft’s built-in Email action,

&action=Message

to send an SMS or iMessage, or

&action=CustomActionName

for a custom action.

If you have a space in your action name, it must be percent encoded or the action will fail without warning and without any further actions being performed.

If you have elected not to pre-fill recipients, you can choose recipients from your Contacts when the action is triggered. You can make edits or changes before tapping “Send”.

Because of the limitations on background processes and inter-app communication in iOS, I don’t believe it’s possible to send an email without any user interaction. I could be wrong about this. If you know a better way to accomplish this, send me a message on Twitter or the site contact form.

Surprisingly, you have to resort to some similar kluges in OS X too. This is easiest guide I’ve found for using Automator and Calendar to do it. The problem is that you have to have your computer powered on and awake at the scheduled time, or the task won’t run. Since my iPhone is almost never off, but my MacBook is usually asleep unless I’m using it — and furthermore I’m almost always in transit exactly when I want this action to run — it’s much more convenient to have it run on my iPhone.

Sending Group Emails in iOS

The best method I’ve found for sending group mails in iOS is to use Drafts and TextExpander. You do have to manually update the TextExpander snippet, but it saves a huge amount of time if you’ve got more than a handful of people in the group you want to send mail to. The iOS Contacts app is terrible at dealing with groups.

Updating your group emails is best accomplished by using TextExpander for OS X and syncing changes across to the iOS version because of the aforementioned ass-tasticality shittiess lack of usability in Contacts that forces you to choose Each. Individual. Recipient. In a bloody group.

On your desktop, open TextExpander, go to Contacts, and control-click (right click) on a group name to bring up the contextual menu. Choose Send Email to "GroupName", which will create an email populated with the emails of all the recipients in that group. Select all of the recipients, copy, and paste to TextExpander. Set your shortcut for the group. TextExpander can automatically sync through Dropbox, so changes you make here should show up in iOS.

HINT: Mail on both iOS and OS X will recognize the Name <email>, plain-text format as valid input, if you want to manually create or maintain a list of emails independent of Contacts.

Next, set up an action in Drafts using its built-in support for messaging or email. In the To field, enter your TextExpander shortcut fenced by double chevrons like this:

<<;family>>[1]

so that Drafts recognizes it as a TextExpander snippet and not a bit of text. You can pre-fill a subject, leave it blank to fill in at runtime, take advantage of Drafts default behavior which uses the first line of the draft as the subject, or use other TextExpander snippets to fill in elements like dates and times dynamically.

After saving your new custom action, the last step you have to take is to go to options in Drafts and refresh TextExpander snippets. This is necessitated by Apple’s rules about inter-app communication, which were tightened up in iOS 7.

The next time you want to send a group mail, run this action and Drafts will bring up the system email pane with your list of recipients filled in. You can make edits if desired, and then tap “Send”. Done.

Once you’ve done the initial set up, it’s much easier to create new group email actions since you can simply copy your existing action and make tweaks. I’ve done this for my most-used Groups in Contacts. Using Drafts is so much easier than Contacts that the time spent setting this up feels well worth it. You can use TextExpander snippets on OS X to address emails since it isn’t subject to the same strict interaction limitations as iOS, so there’s also an ancillary benefit to creating the snippet.

The only small headache is that you do have to manually update the addresses. I’m sure even that could be automated somehow, but I’m not quite crazy enough to start into something that Rube Goldbergian.


  1. I started running into problems remembering snippet shortcuts. Taking a look at what others had done to solve the same problem, I found that one of the preeminent geeks uses a signal character, and makes a good case for why it’s a good idea. I agreed with most of his points, so I implemented it for a large number of my own, where it makes sense. So, you can type ;family instead of something like fmlymail, where you might have the internal dialog, “Did I drop vowels in the first part, or the second part. No, shit. That doesn’t work either. Damn. What was the abbreviation again? Well, hell, I guess TextExpander isn’t saving me keystrokes and clicks if I have to look it up every time.”

    I adopted * for special characters (*apple for ) and / for HTML snippets (/del for <del></del>, with the insertion point placed between the opening and closing wrapping.) I use ; for triggering code snippets, email addresses, and lists. I prefer having some distinctions between types of snippet, and I haven’t run into any problems with coding conflicts and these usages so far.  ↩

Open Voluntary vs. Minimum Mandatory

Mathias Meyer at Paperplanes: “From Open (Unlimited) to Minimum Vacation Policy”:

I was horrified reading this, and it dawned on me how wrong we’ve approached our internal vacation policy. This text sums up exactly what’s wrong with an open vacation policy. People take less time off, and it’s celebrated as a success of giving people more responsibility.

Uncertainty about how many days are okay to take time off can also stir inequality. It can turn into a privilege for some people who may be more aggressive in taking vacations compared to people who feel like their work and their appreciation at work would suffer from being away for too long.

From my experience living and working in Japan, this would be viewed as a feature — not a bug — in most Japanese workplaces. Quitting time and time off are both on an invisibly-adjusted sliding scale, modified by seniority and other opaque social cues. The result is that you are never sure about when you can go home from work. You are never sure about how much time you can take off. You explicitly have only a maximum amount of time you can take off. No one wants to violate social norms and be considered a selfish piece of shit, so no one ever, ever takes all of the time off they are theoretically entitled to.

I honestly would consider killing for a job where the people in charge of the company thought like this:

Starting in 2015, we’ve implemented a minimum vacation policy. Rather than giving no guideline on what’s a good number of days to take off, everyone now has a required minimum of 25 (paid) vacation days per year, no matter what country they live in. When people want to take time off beyond that, that’s good, and the minimum policy still allows for that. But it sets a lower barrier of days that we expect our employees to focus on their own well-being rather than work.

This policy is not just a guideline for our employees, it’s mandatory for everyone, including the people who originally founded the company. As leaders, we need to set examples of what constitutes a healthy balance between work and life rather than give an example that life is all about the hustle.

… instead of the normal Japanese model, where you are expected to show your dedication by working more than everyone else, taking less time off, working longer hours, and do all that extra work without demanding any overtime pay.

A Long Goodbye to File Systems

In response to Matt Gemmell’s “A farewell to the filesystem”

These days, I expect the machine to accept my query, and throw the relevant set of my stuff back at me. Browsing through directory windows seems anachronistic now, and - interestingly - it also feels artificial.

I wouldn’t have said that a few years ago. The file system was the only reality, and everything else was a fancy search interface, slicing and dicing my data from moment to moment with algorithmic sleight of hand.

While I share some of the same feelings, my experience is slightly different from Gemmell’s. Shortly after Spotlight came out in OS X Tiger, I quit using nested folders and instead started using Spotlight comments and its ability to look into the contents of files to find what I was looking for.

I wrote back in 2009:

As we accumulate more and more information on our computer systems, effective interfaces become even more necessary. Way back in the early days of the Internet, I realized that search was going to be a massive problem. And it was. The reason Google is now well on the way to becoming a tech behemoth is because sorting through the incredible amount of information on the Internet to find the few bits you’re looking for is the single most difficult and important task everyone needs to have done.

Our home systems will obviously never become as large as a worldwide network, but most users already are coming up against the limits of their capability or inclination to organize the information they do have. I reached my limit with self-organization years ago, which is why I had to find more effective ways of doing things. Creating better, more intuitive and effective tools for search and organization will continue to be a very important task for software engineers for a long time to come.

I tried out different launchers over the years, starting with Quicksilver, but nothing stuck particularly well. While all launchers allow you to do far more than just find files, most of the time that’s all I need to do: find it, open it, work on it. The vast majority of the other manipulations that utilities like Quicksilver, LaunchBar, and Alfred enable you to do are complicated overkill for me. I found that I spent far more time fiddling with learning how the tool worked than I did actually using it, and after a few days often forgot it was even installed and running.

I was a late convert to Hazel, but now I use it for creating a modicum of file hierarchies. In the rare case I can’t find something through Spotlight, I can fall back on looking for one of the shallowly-nested folders that I set up Hazel to automatically create and use as a sorting destination for various types of files and topics. Before system-level tagging was introduced in Mavericks, I started experimenting with OpenMeta tags, and tags within the files themselves in some cases. I detailed how I use these tools in writing and organization more extensively last year.

The thing both Gemmell and I agree on is that the traditional hierarchical file system is disappearing, and few users will miss it. While it may still be functioning behind the scenes, it will be at best a backup for search and other less linear systems.

Bandwidth Wants to Be Used

Along with “information wants to be free”, the phrase, “higher bandwidth wants to be used” should enter the popular lexicon. Over the last several years I’ve noticed an increasing prevalence of video and audio tutorials that would probably be much better and more succinct if they were text, with illustrations or pictures.

This growth is definitely not in my imagination. Dan Frommer published a chart that graphically demonstrates this shift, probably because it made other headlines around the same time. This was made possible by widespread access to broadband and the popularity of video services in North America[1].

I read normally for enjoyment at about 700 words a minute[2], but upwards of 1,000 wpm when I’m skimming to extract information. Complex text might slow me down to a bit under my pleasure-reading speed for some sections, but my overall average for informational reading is about the same as my normal reading speed since I speed up between those sections. I know I’m an outlier, but even an average reading speed of 250–300 wpm is faster than audio/visual presentation since it is not limited to linear access.

Narrative speech is about 150–160 wpm. Presentation-style speech is typically slower, about 100–130 wpm, to allow the audience to process denser material and parse any visually presented information. I listen to, at present, 20 different podcasts for both entertainment and informational purposes. Depending on the type of podcast and the speaker, I listen at 1.7 to 2x speed.

Speech is processed differently from written material. While I can read really quickly, I can’t comfortably listen to and comprehend speech faster than double-speed most of the time, which means that the fastest I can get information from audio is less than half of my “leisurely” normal reading speed, much less my fast reading speed.

I have become frustrated with learning many things online, since nearly any project seems to turn up a page of videos, and only a handful of written articles — and most of those are multi-page slideshows. I find it hard to believe that I’m the only person who would prefer to read than view a video, but I guess usage and popularity statistics prove me to be a vanishingly small minority.

I will admit that there are some things that video is much better suited for teaching. When I wanted to use some left-over leather, that I’d bought for a costume, in a more extensive project, I looked at videos by Ian Atkinson and Nigel Armitage to learn how to sew a saddle stitch by hand, and a few minutes of demonstration was more helpful than the several descriptions and handful of drawings I’d managed to find elsewhere.

The actual sewing demonstrations in those videos is only a few minutes of the total. While most of that extra time is not “wasted” — Atkinson talks about many other related topics and organizes them well, and Armitage talks about common problems while demonstrating proper technique — many amateur videographers are not so conscientious.

It’s now easy and cheap to record video, but it has always been much more difficult to edit, and even more difficult to edit well. In an age of more restricted bandwidth, or more expensive recording equipment and storage mediums, the extra effort was worth it even for an amateur, but now anyone can throw the whole video up on YouTube and put the burden of finding the best bits on the viewer.


  1. As this article in The Verge explains, streaming video isn’t a thing in Japan, so while nearly half of all bandwidth in the US is chewed up by YouTube and Netflix, internet video is barely getting started here, and may be acquired into an early death by hidebound incumbents.  ↩

  2. I don’t use speed-reading techniques; I’m a naturally fast reader. In fact, I audited a speed-reading presentation at university and found that some of what they were teaching actually slowed me down since I was thinking about the process instead of just getting a visual info-dump into my head, the way normal reading felt to me. I never thought I was “fast” as a kid because my grandmother read ridiculously fast, like Reid in Criminal Minds fast. When I asked her to proofread school assignments, she’d find mistakes at the bottom of the page seconds after I handed the paper to her.  ↩

How I Write, Updated

It’s been about a year since I posted How I Write, and my workflow has changed a bit. Some of the changes have been due to external forces, others are simply due to writing more often. I’ve posted over 130 entries in the last year, and while that’s not prolific by some standards, it was more than sufficient to make every rough spot apparent.

Tagging

Since I don’t use dedicated blogging software, I do everything through the Finder. I use tags in the content of text files to provide hooks for sorting, searching, and categorizing. Implemented this way, tags are bombproof; unless the file is corrupted to the point where it’s inaccessible, you can read the tags. It also makes it easy for Spotlight to find something even if you haven’t used OpenMeta tags or the new Mavericks tagging implementation. While I don’t use Windows at all, this would also have the benefit of working cross-platform.

I have made heavy use of Spotlight comments in the past, and later OpenMeta tags. It’s immensely easier to find information if I can type something like “kind:bookmark bone density” into Spotlight, or use a tag browser to home in on what I’m looking for than it would be to browse through dozens or hundreds of nested folders to find all of the files in various formats (bookmarks, PDFs, etc.) that I’ve saved on a subject.

Hazel

I use Hazel to move and sort files based on simple rules. When I publish a blog entry, for example, I enter a “published” tag at the bottom of the text file, Hazel grabs it from my Notes folder and files it under Blog > Published, and then further auto-organizes by year and month subfolders. This provides a very simple but robust organization as a backup to search. As I wrote about several years ago I’ve long since stopped spending a lot of time organizing my files, and instead rely almost exclusively on search.

Hazel is a way to automate the minimal remaining organizational structure I do want to implement. It works with OpenMeta or Mavericks metadata tags too, in addition to (or instead of) file contents. Like I said in that earlier piece, handling tedious repetitive tasks is what computers are meant to do. Hazel is the best tool I’ve found to date for automating filing and hierarchical systems, with minimal attention after setup.

Drafts

At first, I resisted using Drafts because it seemed too fiddly. When Merlin Mann talked about it on an episode of Back to Work and again on Mac Power Users. He introduced some interactions that sounded interesting, but possibly more trouble than they were worth. I installed Drafts just to check it out, but barely touched it for months afterward.

Two things made me switch to using Drafts almost exclusively. I started using TextExpander, both on my iPhone and on OS X. Simplenote relaunched their app in September 2013, and made some significant changes, one of which was suddenly eliminating support for TextExpander. I liked the cosmetic changes in Simplenote quite a bit. The Simperium syncing backend seemed to have been improved as well but — primarily because of the lack of TextExpander integration — I decided to take another look at alternatives.

Notesy was one possibility. I had already been using it in parallel with Simplenote for Markdown previews and was experimenting with using it for longer writing. One of the things I like about it is having feedback as to which files have been synced to Dropbox. While Simperium’s syncing generally just worked, there had been a few hiccups (detailed in last-year’s post) that made me leery of trusting it too much. There’s also no feedback; you either see the changes, or you don’t, and there’s no progress indication of any kind.

One thing I don’t like about Notesy is the need to generate a title before you can do anything else. Simplenote just grabs the first line of a note to use as the title, which fits very well with how I want to interact with a note-taking app. Notesy has that slight friction and interruption of my thoughts that made me take another look at Drafts.

Drafts, like Simplenote, uses the first line of a note as the file name. It launches in roughly half the time of Notesy, a couple of seconds faster than even Simplenote, and auto-creates a new note on launch. Both of the other apps require an interaction to create a new note. This is not necessarily a bad thing. Notesy and Simplenote have to balance note reading with note writing because they are general-use note-taking apps. Drafts is more streamlined because it is narrowly focused on capturing and processing text.

Of course Drafts supports TextExpander. When Apple brought down the boom on the slightly hacky way Smile had leveraged Reminders to make snippets available in iOS, Drafts was one of the first note-taking apps to update its integration, and in fact the developer has been consistently aggressive in updating and developing Drafts. Notesy took until 2.5.2, released just a few days ago, to restore TextExpander support. Notesy is still a great app, but development has slowed significantly.

(My fallback if Notesy stops working well is Byword, but Byword is more suited to longer-form writing and final drafts than note-taking. It is beautifully designed and well-suited to writing in Markdown, however. The way it deemphasizes the markup characters, which lets you focus more on your words, is especially nice. It also has continuing support for TextExpander.)

Besides TextExpander support, launch speed, and frictionless note creation, Drafts lets you perform a metric assload of actions with your text. This is what Merlin Mann was talking about, and why I initially thought it would have a huge learning curve. You can go way down the rabbit hole if you want to, but I use just a few regularly.

Anything you enter into a Draft can be sent to a number of other applications and/or manipulated. Notes I write in Drafts get sent to Notesy, if I’m going to be writing in Markdown, or Simplenote if it’s just a memo or thought. Drafts auto-generates a title for Notesy based on the first line of the note, which eliminates that friction.

The single action that I use the most often, besides sending a note to another app, is a modified “Prepend to Dropbox” action that I use for capturing links. I copy the URL, open Drafts, use a TextExpander snippet to paste it and wrap it with Markdown link formatting, type in a description of what the link is, and trigger the action. I based the action on the included Drafts action, and modified it to include a timestamp and divider so that when I view my Links file in a Markdown preview, I see a nice list of timestamped headings, tappable links with meaningful titles, whatever notes I made, and a divider line between entries.

TextExpander

My use of TextExpander has gradually expanded (no pun intended) over time. I’ve started using it for code snippets as well as tagging. The good and bad thing about using a macro program is that you quickly become dependent on it. While most of the things I use TextExpander for are short (like expanding “TE” into “TextExpander”) not having it available causes constant minor irritation since I have to peck out tags and other content in long form instead of using one of my short triggers. Lack of support of TextExpander in an iOS note-taking app has become a deal breaker for me.

Markdown

I use Markdown as the starting point for nearly everything I write now, including most of my work documents. I export to RTF or other formats as needed, usually using the newest version of Marked. If I have to lay out a document with more control, I copy text into Pages and do the formatting there, but notes and draft text start in nvALT. I could technically use CSS to do layout and formatting, but I haven’t learned enough CSS yet to do all of the things I want.

You can use HTML alongside Markdown. Gruber writes for the web almost exclusively, and so reserves underlines in his mind for links. He has no markup for underlines in Markdown. For work printed on dead tree carcasses, it’s occasionally necessary to use underlining, so I added a TextExpander snippet for underline formatting. I also started adding HTML comment blocks to hide tags in preview mode, which makes me contemplate switching my tag delimiter character back to # from @. Hashtags are used as one of the two methods of marking up header text in Markdown, which is why I switched characters initially.

Squarespace

This blog is hosted on Squarespace. On the whole, I like it better than my previous WordPress one, but there are some aggravations:

Poor Content Management

If I want to link to a past entry, I often do a site search instead of going through the content manager, but that doesn’t work for edits. In the posts view on Squarespace, you can only see 10 entries at a time. It takes forever to find a past article and update or change it. This is one place where WordPress’s uglier and clunkier interface is actually superior for most use cases.

No Offline Mode or Editor API

There is no integration with MarsEdit or other blogging software in Squarespace 6. When I started writing more, I realized the limitations and frustrations of having to do everything through a web interface, and started looking at editors. Squarespace 5 used to support MarsEdit and other offline editors through an API. Support for that API doesn’t appear to be secure even in Squarespace 5.

Squarespace’s editing interface is generally well-designed and stable, but not ideal. The current post editor doesn’t make links or formatting stand out well; it’s a lighter gray than the gray body text, which doesn’t provide nearly enough contrast to distinguish links from other content. Image blocks work better than they used to, though. It used to be more difficult to lay out a page with images smaller than full page-width in the older version, and you couldn’t do it in the editor view at all before.

Limited Markdown Support

Markdown is supported, but it’s plain standard Markdown. Features like footnotes, made possible and easy in MultiMarkdown, aren’t supported. Neither is SmartyPants. I’ve fallen back to copying the HTML source from nvALT’s preview instead of pasting Markdown text because I want proper typographical marks, and I’ve often found a need for footnotes as well.

Some Simple Things Are Difficult

This is probably more reflective of my shortcomings as a coder than of Squarespace itself, but two features that I would like to implement are pop-up footnotes, like those on Marco Arment’s site or Lukas Mathis’. Mathis also has details on his implementation method, but I haven’t been able to get it working on Squarespace. I’ve used a Safari plugin called Footnotify for years that presents footnotes in-place. I think it’s the way footnotes should be done, and since I’m an opinionated bastard, I want to do it right on my site. [Update 2014–03–19: I’ve since been able to get this working due to a post by Sid O’Neill. Many thanks, Sid!]

The other feature I would like to is to provide a permalink next to the post headline. Right now, I’ve got a permalink code block working in the post footer, but I’ve found no way to inject the necessary code to place it immediately after the heading link. This style is nearly universal for linklist-type posts on blogs, and I wonder why it’s not a standard option.

Finally (!)

I write these posts about my workflow to share some of the things I’ve found either useful or difficult. When I run into a problem, or want to know how to better utilize a new tool, I’ve found material like this very helpful.

When I was running into syncing problems in Simplenote, I found the lengthy posts of Michael Schechter and Shawn Blanc to be helpful for tweaks to my revised setup, and their thoughts provided reinforcement for my decisions. If like-minded borderline-obsessives agreed substantially with my assessments, then I must be doing something right.

Dr. Drang is about 1.22x109 times geekier than I am, so I can’t use everything I read in his posts, but they make interesting and informative reading. Brett Terpstra is similarly geekily useful. Because of his writing on tagging, I explored using Tags and Default Folder X again, both of which I had played with but not fully appreciated earlier. Yuvi Zalkow put together a video on Scrivener that, last year, helped me get a handle on more of the advanced features of Scrivener.

Some people find fellow paraphiliacs and enablers online. I’ve found other people who share my enthusiasm for finding the best, most efficient, and elegant ways of doing things, and who want to write about it. Hopefully something in this post has helped you in some way.

The Stimulation of Boredom

Boredom is good for generating ideas (including the idea that boredom is good for generating ideas). If I don’t have something to occupy my attention, my brain looks desperately for something to do. Give me a book or a project to work on, and I will appear to be a very quiet and calm, if intensely focused individual. Give me nothing to do, and I’m a raving lunatic on the inside, though I’ve cultivated enough self control over the years to not let my normal hyperactive impatience show.

When you’re proctoring tests, you can’t do much of anything else. I recently had to spend three sessions — representing a combined total of about 2.5 to 3 hours — proctoring tests. The only way I made it through the day with my sanity (mostly) intact was to occasionally write in a notebook.

I ended up with about 5 pages of compressed handwritten notes in my Moleskine that I later transcribed, slightly expanded, loosely organized, and titled Diary of a Madman. It only represents ideas that I thought were worth jotting down to remember later, during a time when I was also attempting to keep at least half my attention on the students. Just imagine what I excluded.

It contains:

  • 1 idea for a story or novel
  • 20 topics I have one or multiple questions about
  • 12 ideas I think I could turn into a decent blog post or article with a little research
  • 2 ideas for psychology/sociology experiments
  • 4 random thoughts

That volume of ideas is excessive even for me. You may be a more normal person, who doesn’t necessarily need an outlet like this to keep from going batshit, or bouncing off the walls like some kind of practical joke, but I think there’s a valuable concept here for anyone.

While ideas are most often stimulated by interaction with other people, we also need unstructured playtime to nurture our creativity. Lately, however, we’re constantly stimulated. I’d venture a guess that for the majority of those reading this, the prospect of being alone with your thoughts is only a button push and a swipe away from being banished.

Do yourself a favor; set aside 15–20 minutes for yourself every day. Turn off your phone. Don’t read a book. Don’t turn on the TV. Get out some paper and a pencil. Do some old-fashioned daydreaming. Doodle. Practice stream-of-consciousness writing. Or just be you, alone, with no narrative running in your head other than what you create.

During that time, tell yourself that you can do anything you want, as long as you’re isolated from outside stimulation. You’ll be surprised how many questions you have, how many ideas you’ve got bumping around inside that would have been lost in the noise of the information firehose you’ve connected yourself to.

Or, you could end up with a list of scribblings that look like the wall-writing of Charles Manson off his meds during a month in the hole.