HACK / MAKE

When You Think You’re Done

I was reading Natalie Goldberg’s Writing Down the Bones this afternoon and came across a part that matched an idea that came out of me a few weeks ago.

Here’s what I wrote in Tips on Writing And How They’re Really Just Tips on Life:

Write past the first logical close. I’ve been trying to push myself to go deeper in the things I write. If I have a clear idea, it often can be straightforward to lay that idea out and wrap it up. But I try to not just end there. I don’t let myself stop where it at first feels comfortable because I know—with a little more of the clackity noise—some bigger, greater ideas may just fall out onto the page. Sometimes they don’t and I just delete the extra crap that came out, but more often than not, what I end up with is much better.

And this is what Natalie Goldberg had to say, originally written in 1986, which I read today:

Push yourself beyond when you think you are done with what you have to say. Go a little further. Sometimes when you think you are done, it’s just the edge of beginning. Probably that’s why we decide we’re done. It’s getting too scary. We are touching down onto something real. It is beyond the point when you think you are done that often something strong comes out.

I’m sharing this not as a way to validate my idea, which obviously now wasn’t original, but to tell you there’s something inside of you that is connected to a universal truth. There are insanely great moments and creations inside of you that you need to dig to find. When you find them, you will recognize that they are a part something bigger and wonder where they came from. Your job is not to answer that question of their origin but to discover those truths and then share them.

Writing Tools and Workflow

Read on as long as you promise to write something when you’re done.

I’ve been posting a lot about tips, style, and the creative pursuits of writing so I figured I’d share my writing tools and workflows as well.

Writing Buckets and Apps

There have been five main types of things I write along with one new one I’m trying to do. They are: notes, code, blog posts, journaling, field notes, and the new one, writing for the sake of writing.

Notes: I use nvALT on Mac and Notesy on iPhone and iPad synced in a single folder at ~/Dropbox/Documents/Notes. I used to really like the idea of keeping notes in Evernote and did for a couple years, but like nvALT for it’s ease of capture. The tradeoff I’ve chosen to make with my notes system is that I’ll sacrifice the long-term organization that Evernote could give me with tags and notebooks for the simplicity of getting stuff inputed. Because that’s the point, right? If there’s enough friction that I don’t just easily create a note what’s the concern about long term search-ability? There won’t be any notes to look for. Launch Center Pro makes it easy to quickly add new notes to Notesy.

My naming convention is something like Headphones I Like — listx shopx which uses a tweak to Merlin Mann’s xtag convention, or A Balanced Man — mex — 2012-11-03 14:25:51 where I add a date/timestamp when it’s relevant. That note is some thoughts as to what I think a balanced man should act like and be like and uses the mex tag like all of my “personal improvement” notes do. The title goes first because I’ll always have that, the tags go next because they’re usually but not always there, and the date stamp is last since I only add it if I think it’s relevant. That all makes for a clean notes list in nvALT.

Here are some random examples of notes I have in nvALT so you get a general idea of how you could use a system like this: a note tracking payed days I’ve taken off of work, a cornbread recipe I looked up for my cast iron pan, a list of words I’ve come across while reading that I really like, notes I took while reading an article about typefaces, the number, amount, and reason for cheques—checks, for the Americans—that I write, the phonic alphabet just because, the body of select emails I might want to look up for reference, a list of decently priced cigars I found online for whenever I feel like buying a box of cigars, the numbers for my health insurance so they’re easy to pull up, and the list of variables for TextExpander that I can use as reference for when I’m making snippets on iOS. For all of that random stuff that I want to store, it makes it really important to quickly add it and quickly find it when I need.

Scratchpads kind of live in this notes area. I use a handy script that I love and use all the time to manage my scratchpads. They live in the same Notes folder but open in BBEdit where I have a little more control over the editing of a note since I can use things like clippings, text filters, and language scripting.

Code: When I started getting into code I had to make the epic decision of choosing my text editor. Threads on forums, endless blog posts, and hours of podcasts have argued over what the best text editor is. For me, BBEdit was the clear choice. At the time, Textmate 2 was still a dream and SublimeText 2 didn’t feel right. BBEdit fit in the middle of being solid for code and great for plain-text writing. Writers like John Gruber and hardcore geeks like Dr. Drang use BBEdit, which shows you how flexible it is at supporting any type of text related use case. It’s well supported for scripting, with an extensive Applescript dictionary and the ability to use languages like perl, python, and ruby for text filters. Clippings make it really easy to extend BBEdit for custom Markdown wrapping without any knowledge of code. Longevity matters to me. BBEdit has been around for 20 years and will probably continue in development for as long as text editors exist. I use a slightly modified version of solarized light for my color scheme and have removed a lot of the default window chrome to make a document look simple.

Blogging: This happens almost exclusively in Byword on iPad. I collect ideas in a running note or sometimes a draft outline in nvALT but usually it starts and ends in Byword. Since I’m using Second Crack I don’t need to move any text around, all I need to do is add a specific header to a post in my Drafts folder and it’ll publish.

For link posts, I have a script that I’m continuously running on my server to make creating drafts from links really easy. I use Reeder and Twitter basically as an article inbox and nearly everything I want to read gets sent to Instapaper. From Instapaper, when I find something I want to link to I select the pull quote, tap share, and Post to Pinboard. I fill out the fields with the post title I want, the post body, and the specific tag my script checks for to create a draft. It usually ends up looking like this. The script will parse the info from Pinboard and within a second, create a properly formatted Markdown file in my Drafts folder. Right away, I can switch out of Instapaper to Byword and my new draft syncs down from Dropbox and looks something like this. I really love this flow and it feels like magic every time I do it. The added benefit is that everything I link to is permanently archived in Pinboard.

Journaling: I really like Day One. I think my favorite part is that it takes any organization hassle out of the process. I just have to hit the + on any device any time I have something to say and it takes care of the rest. Adding support for photos has been a really nice thing since a lot of important memories happen without the chance for me to type out how I’m feeling at the time. Sometimes I’ll add a photo to Day One in the moment, then go back later and add a caption with some more about what was going on in my head at the time.

Field Notes: I love these things. There’s just something that they represent for me that means a lot. The passion that Draplin Designs and Coudal Partners put into making them beautiful and useful shows. I used to be a little concerned about just filling it with crap but then I realized that’s what they’re for. They’re cheap at three bucks a piece and are supposed to be something that takes what you have to throw at it whether it be dirty hands jotting notes about this season’s crops or me filling it with useless, messy drivel that couldn’t be less poetic. Carry one along with a Fisher space pen wherever you go and fill it up with your life. You’ll feel better when you do.

Tip: Stick a few index cards in the back just in case you need to write something down and give it to somebody, like directions or your contact information if you don’t carry business cards.

Writing for Writing’s Sake: Natalie Goldberg’s Writing Down the Bones has taught me that I should just write for the sake of writing—to get all the junk out so I can dig down to the good stuff. I don’t really want to be doing this in any of the other buckets. It could make finding notes harder, doesn’t make sense along side my drafts, and shouldn’t really be in my journal since I’ll want to go back there and read about important moments not a shitty poem that hurt to write. Field Notes aren’t great for long form stuff because it’s a bit cramped. While reading about Natalie’s writing situation, it made me feel a little nostalgic—I’m not sure if that’s the right word since I don’t know what it’s like in the first place—to use a typewriter to just write. I liked the idea of putting in a fresh piece of paper and punching out words without having to think about naming the text file or where it’s going to live on my hard drive. The typewriter puts out a piece of paper and you can throw it in a stack or throw it in the trash.

I wanted to make a separate part in my flow for this kind of writing. I wanted something that was easy to start, meant no ongoing management, and didn’t clutter up my other writing buckets. Since I do all of my writing on iPad, I installed WriteRoom. I chose it for a few reasons: it allows fullscreen mode without the status bar, syncs to specified Dropbox folder that’s different than my notes, and allows me to pick a font that I don’t hate. I’ve set it up to be as simple as possible and to get out of my way. Things like spelling and autocorrect that are helpful when writing an article to be published aren’t necessary when just making words. No one’s going to be reading this stuff unless I chose to publish it later so spelling and grammar mistakes don’t matter. This kind of “distraction-free writing environment” can be a gimmick unless you don’t let it be. For me, it means that in WriteRoom, it’s just me and words. When I need to write just for the sake of writing, I open up the app, create a new date/timestamped file with TextExpander and go.

Input and Setup

I’ve been writing on my iPad for a while so I’m used to the onscreen keyboard but I also wanted to set up a place where I was comfortable and that was effective for writing. I wanted a good hardware keyboard to be a part of that. I’ve set up a standing desk at my apartment with just enough space for a keyboard, iPad, and a cup of coffee.

After debating the cost for a while, I ended up buying two of those loud mechanical keyboards that are annoying in the background of podcasts. I went with the Filco Majestouch Tenkeyless with MX Cherry Blues. I love it and couldn’t recommend it enough. It really is just that much better than whatever cheap keyboard you were using before. For me it was a great investment since what I do is create things on computers and the keyboard is the input of the things you create. Using great things and things you love can improve your work and life and having great boards at work and at home has done that for me.

Connecting a mechanical keyboard to your iPad is a little hacky but works. What you need is Apple’s camera connection kit which is basically a 30-pin to USB dongle. Don’t worry that the dock connector is being phased out because Apple makes a Lightning to 30-pin cable. Since messy cables drive me crazy, I connected the board’s USB to the Camera Connection Kit, connected that to this CableJive dockStubz dongle which allows me to pass through power into the iPad, and then connected that into a 30-pin extension cable so I can hide that cable/connector rats nest behind my desk and just run the extension to my iPad. It’s working decently for me so far. Even though it’s plugged into power, the draw from the keyboard takes enough out of the line that the iPad doesn’t charge. That kind of sucks but it seems to at least provide enough power to the setup to supplement the power from the keyboard so the iPad doesn’t drain nearly as fast. I get a warning when plugging it in that the keyboard isn’t compatible but it works fine.

Conflicts

With all of these writing buckets, I struggle a little with where some things should go. Sometimes when I’m in a coffee shop, I’ll just start writing a quick thought in my Field Notes and it’ll turn into a thing I want in my journal. I’m a little concerned that things I write in WriteRoom should maybe end up in Day One, but at least I can copy and paste over there easily.

The problem with systems like this is that they’re never going to be perfect. There will always be gotchas that process geeks like us quiver and try and fix. If you can find a fix for it that’s great but remember that the point of these systems is to improve your output. I have different buckets because it makes my writing in each one easier and more meaningful. If you’re playing the long game, it doesn’t really matter that much where exactly your ideas are put but that you’re writing and that they’re captured. If it’s a big idea and it’s down somewhere you trust, you’ll find it no matter how hard you have to search in whatever wrong bucket you put it in. Don’t be too worried about that happening.

Get a system set up that covers most of what you think you need and then focus on turning the things that are in your head into bits in a text file or scribbles on a piece of paper. You’ll tweak your system along the way but remember that to make great things you need more of the clackity noise not a better workflow.

Dark Sky Alfred Extension

Before New York City went dark last week because of Hurricane Sandy, I was hunkered down prepared for the worst. Dark Sky was open on my phone constantly to see how the weather would be unfolding for me. The combination of the impending storm and being on lock down had me curious of ways to keep busy while I was stuck inside.

That’s when I started playing with the Dark Sky API.

Often on grey days, as I go out for lunch I’ll check Dark Sky to see whether I’ll need a rain coat or not. I wanted the great information from Dark Sky in an easy to check way on my Mac. Alfred is perfect for that.

This extension checks Dark Sky for the weather with the command now, providing you with the current temperature, conditions, and what to expect for the next hour. Using the command today or tomorrow will give you the outlook for the next 24 hours.

Since I think that it’s important for computers to communicate with us in human ways, I spent a lot of time molding the information that the API returns into full grammatical sentences. 1

This is what the weather looks like now as a good ole Nor’easter is rolling in:

It’s 40 degrees and possible light sleet. Expect sleet in 2 minutes.

To configure the extension for your area, look up the coordinates for your address and enter them as LAT and LON in the extension settings. Alfred displays the weather using Notification Center. If out of the box, it’s not showing you anything when you submit the command, check that your Alfred settings have Extension Output selected.

Update [2013-03-23]: I’ve updated this for basic Alfred 2.0 functionality. I hope to update again sometime soon to integrate new workflow features.

Download the Dark Sky Alfred Extension or see it on Github


  1. Please let me know if you see anything wrong with the wording of how the forecast is returned. 

Scripts and Hacks Grab Bag

The origin of the term “Life hacks” was all about engineers who would build tools to help them in their daily life. As I’ve gotten more familiar with languages like Applescript, PHP, and Python, I’ve been creating more of these hacks to help out with things I do on my Mac.

Here’s a grab bag of some of those I’ve created recently. They are all in different states of stability but I use most of them so they’re at least not completely broken.

OmniFocus

Set Start Day for Selected Tasks: OmniFocus has great support for entering dates with quick shortcuts like Mon and 2w. But they don’t have a quick way to get to the start date field from the keyboard.

I’ll often have a series of tasks that have to push back for some reason. The way I work is often based on days, like “I can’t do this now but I should have a chance on Thursday.” This applescript prompts for you to pick from a list of days. You can type in th and hit enter and the selected tasks will be scheduled for a Thursday start date.

This does all the date math on its own, where it will always choose the following occurrence of that day. I’m writing this on Saturday and if I choose Saturday from the list it will set the start day for next Saturday.

It’s a fast and logical way to schedule tasks so you don’t have to think about them until the time comes.

Download Set Start Day Applescript

Using an Applescript .app to trigger tasks from a recurring OmniFocus action: I have repeating tasks in OmniFocus to create things like weekly log files or emails for status reports that I want to automate as much as possible. Automating it is not only faster but maintains consistant naming schemes if you’re particular about that like I am.

It’s simple to create something in applescript to make a file:

set today to do shell script "date +%Y-%m-%d"
set filepath to "/Users/nickwynja/Desktop/"
set filename to "Test " & today & ".txt"

do shell script "touch " & (quoted form of (filepath & filename))
do shell script "open -a BBEdit " & (quoted form of (filepath & filename))

That will create and open a file named Test 2012-11-10.txt on my desktop in the app I specified in the open -a command. Most of that is actually shell because it’s easier to do one-liners and often more compatible between different apps.

If you save this as an application in Applescript Editor, you’ll be able to attach the .app to a OmniFocus task, and with one click, it will create and open the file you need.

Keyboard Controls

Media Control Keys with Rdio and iTunes: Most of the time I use iTunes set today to do shell script “date +%Y-%m-%d” which is well bound to to the Since getting a [clicky keyboard](http://wwstandard Previous, Play/Pause, set filepath to “/Users/nickwynja/Desktop/” If yoript Editor, you’ll be able to attach the .app to a set filename to “Test ” & today & set filename to “Test ” & today & “.txt”That will create and open a file named Test 2012-11-10.txt on my desktop in the app I specified in the open -a command. Most of that is actually shell because it’s easier to do one-liners and often more do shell script “touch "” & filepath & filename & “"”compatible between different apps.”.txt”OmniFocus task, and with one click, it will create and open the file you need.Next controls on a Mac. Keyboard Maestro’s built in macros for these controls behave the same way as a do shell script “open -a BBEdit "” & filepath & filename & “"”standard Apple keyboard. Sometimes when I’m feeling frisky, I’ll open Rdio to listen to some new tunes. This means I have both Rdio and iTunes open and all of a sudden these media controls become a mess. I needed something that would Play/Pause the right app when it was playing.

Since I only sometimes have Rdio open, this script would check for that first. If Rdio is running, the script sends the specified control to Rdio, or else it sends it to iTunes. This logic only fails when I have Rdio open but not playing and iTunes (which is always open) playing a song. So I just get in the habit of quitting Rdio when I’m not listening to it. This will probably work with other apps too as long as it has a similar Applescript dictionary.

This is such a great solution and has gotten my using Rdio way more. Before I’d have both open and instinctively hit the Play/Pause key and then iTunes would start. It would be a train wreck of two songs playing over each other. Connect these scripts to Keyboard Maestro and enjoy seamless control over your audio apps.

Download Rdio/iTunes Media Control Applescripts

Open and Clear Notification Center: Notification Center is a really nice way to get an overview of what you need to know so you can process it or get back to work. Apple gives a way to open Notification Center using the keyboard by setting a shortcut in System Preferences > Keyboard > Keyboard Shortcuts > Mission Control. The most often action I have in Notification Center is to open it, check the preview of new emails that have come in, and then clear out the notifications so I can ignore and come back to them later. There’s no keyboard binding for this but you can set something up in Keyboard Maestro to imitate clicking on the little x. The “Move or Click Mouse” macro is perfect and gives you options to click at a certain location on the screen and then restore the mouse location to where it was. This is what my macro command looks like.

I have F12 set up to open up Notification Center, glance at what’s in there, then hit control+F12. This imitates a click for the topmost x button. If there’s notifications from different apps, you’ll have to clear a few times. When I’ve sufficiently ignored everything, I hit F12 again to close it.

That’s efficient first-level processing without ever leaving my keyboard.

BBEdit

BBEdit is so wonderfully scriptable and that makes me happy inside.

Autosave Scratchpad Files: I love my scratchpads. I dump random strings of text in there, list to-dos, and leave notes to myself. I’ve always wanted to be able to pipe text into it from scripts and Alfred extensions but the problem was the file wouldn’t autosave like it would if I was using nvALT. If I would try to append text to the scratchpad and it wasn’t saved I would have conflicts.

I found this gist that ties into a hook when you switch focus away from BBEdit and saves open documents. I didn’t want it to save all open documents though, just my scratchpad.

All I needed to do was change this line which gets all open documents:

set docList to every text document in theApp

To this which matches the document name of my open scratchpad:

set docList to every text document in theApp where name of it contains "Scratchpad_"

Follow the documentation in the script to set it up. If you bought BBEdit in the Mac App Store, you’ll also have to install a script to get around sandboxing and authenticate this save for you. You can find instructions to do that here.

Now I can assume that in most use cases my scratchpad is saved and I can append text without conflicts. I use F2 as a keyboard shortcut triggering the script that opens my scratchpad and now have ⌘-F2 to append my clipboard to the end of the saved scratchpad using a hacky keyboard maestro macro.

Text Filters: I’ve discovered that you can run scripts on text selections and if you only intend to do that action inside of BBEdit, it runs faster than using Services.

I previously created a service that would mark may plain-text todos as completed. This worked but wasn’t as fast as Text Filters are. The service was written in python so all I had to do was take it and add it into /Text Filters in BBEdit’s Application Support directory. All it is is a simple find-and-replace for the [ ] Task string I use for a to-do and replace it with [X] Task. But this helped me figure out that I could manipulate other strings with more powerful scripts.

I haven’t gotten too deep in this yet but one that I did write helps me format markdown headers. Often I’ll just write and then go back and format. BBEdit’s clippings can work well for markdown formatting but you can’t put much logic in them.

What I wanted to do was select a string and wrap it with a # to make a heading like this:

# Heading 1 #

The problem with clippings is that since I wanted the spaces, wrapping a selection with a clipping and then repeating would add extra spaces in between the # like this:

# # Heading 2 # #

That’s neither attractive or valid markdown. This python script (which probably could be simplified) does the job perfectly and works for multiple lines too.

import sys
import re

for a in sys.stdin:
  b = re.sub(r'^(.*?)$', r'# \1 #', a)
  c = b.strip("\n")
  d = c.replace('# #', '##')
  print d 

With this, I can select a heading or several lines of headings and it will wrap them in #s. Tap the keystroke again and it will add another one before and after without the space. It’s the little things that make me happy.

Download Markdown Heading Text Filter

Copy Slug to Clipboard: The way Second Crack (the blogging engine I use) works is it takes the file name of the post as the URL slug. I usually have the title of the post decided and written at the top before actually saving the file. This service which Brett Terpstra original shared with me will take the selected text—in this case my title—and turn it into a slug-ready string on your clipboard.

I’ll copy my title “Scripts and Hacks Grab Bag” and run the service on it. Hit Save and the save prompt will open then paste and in goes the slug scripts-and-hacks-grab-bag. Boom. Off it syncs with Dropbox and is ready to publish.

Download Copy Slug to Clipboard Service


That’s it for now but I’ll probably do another one of these grab bags when I’ve built up a bunch more interesting hacks to share. I hope that these are useful or at least inspire you to find ways to improve the efficiency of your work.

Update: Cleaned up the Applescript to make and open a file. Thanks to reader Jan-Yves for the quoted form of tip.