Category Archives: personal automation

Maintaining My Reading List as a GitHub Repo Using Atom 1.0

At the end of this year, my reading list will be twenty-years old. The list has evolved over time from simple, to complex, and back to simple. But over the course of the last two decades, it has always been available online in one form or another. When I started keeping the list, it was a simple HTML page. It evolved into a sophisticated relational database. When social media sprouted, it moved into places like GoodReads and LibraryThing. But eventually, I found that I had the most flexibility, and easiest maintenance, if I just kept the list as a plain text file on Dropbox.

While I was playing around with Atom1.0 , GitHub’s open source text editor, it occurred to me that I might be able to squeeze out even more functionality from my plain-text reading list. So I created a new repository on GitHub, my reading-list repo, and checked in my plain text file. To what end?

Commenting on the books I read

I’ve often wanted to write brief comments on the books that I read, but I’ve never been happy with the interfaces of places like GoodReads or Amazon reviews. I’m not interested so much in writing a review of the book, or giving it starts. I just want to capture some thoughts.

But my list is a plain text file, and capturing thoughts about a book, given the format of the list, would make it awkward at best. It occurred to me, however, that if I had my reading list in a GitHub repository, then each time I added a book to the list, I’d have the ability to add a commit comment when I checked in the list. That commit comment could give me the opportunity to include my thoughts about the book, without messing up the integrity of the list itself.

So that is my plan. Beginning with book #609 (Colonel Roosevelt by Edmund Morris, which I am reading now), I will add my thoughts about the book as a commit comment, when I check-in the list. To see my thoughts about a book, one needs only go to the commits page for the master branch, which looks something like this at present:

Reading List Commits

One huge advantage to all of this is that I can do it all from a single place–namely, my text editor. I was playing around with Atom this morning, and after installing the git-plus package, I discovered that I never have to leave the text editor to make, comment on, and commit changes to my reading list.

Using Atom to update and comment on my reading list

It works something like this:

First, I open my reading list in Atom. I have a command line alias to do this. Just type


at the command line and hit enter. The current file opens up in Atom. I go to the end of the file, and add the book I just finished reading. (I’ll use Colonel Roosevelt as an example, even though I haven’t finished it yet.) I can easily see which files in the repo have changed and which lines have been updated or changed in the file.

Reading list in Atom

When I am ready to checking and commit the file to GitHub–and thereby add my thoughts on the book I just added–I can do it directly from the editor:

Add, commit, and push

After selecting “Add All Commit and Push” I get another editor window that prompts me for my commit comment. This is where I’d add my thoughts about the book:

Commit thoughts

As soon as I save this, the file is committed to the GitHub repo and pushed to the master branch. Anyone who wants can see it in the list of commits:

Commits list

Now I have a nice tidy way of adding thoughts about the books I read without messing up the integrity of the list, and without every having to leave my text editor. But wait, there’s more!

Subscriptions and discussions

Because the list is checked into a GitHub repository, it comes with all of the features and functions of a GitHub repo. Other GitHub users can subscribe to the repository, and get notifications when it is updated–that is, when I comment on the book I just read.

Moreover, anyone can click on a commit, and see my thoughts, and, if they so choose, add comments of their own:

Commit comments

I understand that some of this stuff is beyond what the average person might do, but I have been fascinated by the potential of GitHub for uses beyond just that of maintaining code. And when there is seamless integration, like that built into Atom, it makes it a no-brainer solution for maintaining my reading list.

More Updates to the Google Docs Writing Tracker

I recently pushed a new branch called “project-tracking” out to the Google Docs Writing Tracker on GitHub. This branch includes code for project-tracking that I wrote about a week ago. The changes have been working fine for me over the last 10 days or so. The one thing I haven’t done yet is update the template spreadsheet. The new code requires 2 new tabs in the spreadsheet, along with some additional settings. I’ll get to that eventually.

Meanwhile, I have been trying to figure out a way to simplify what happens each night the scripts do their processing. Right now, the scripts perform a comparison between the current working document, and a previous snapshot of the document in another folder. That snapshot mechanism takes up a lot of code, and is relatively inefficient. Over the last few weeks, I’ve been thinking about an alternative, and today, I tested that alternative out with positive results.

Every Google Document keeps a revision history of the changes to that document. Here is the revision history for a story that I worked on back in February:

Revision history

It turns out, that using the advanced Google Drive API, I can access the revisions through the API. Today I performed a test, which essentially compared the current document to the last revision of the previous day. That is essentially what the snapshot method that the script current uses does. But it does without needing to maintain two files. I can get all of the information I need from the previous revision. Ultimately, that simplifies the code for the scripts. It also simplifies setup.

There is a tradeoff, however.

You can only access the advanced Google Drive API via OAUTH2 authentication. That means configuring the scripts to be able to handle that authentication. It turned out to be a pretty straight-forward one-time setup for me, but I do this kind of thing for a living. For someone who isn’t technical, it may be a little tricker.

It will likely be a while before this major architectural change is available. There are several reasons for this:

  1. My priority each day is on getting my writing in. I do this scripting only if the writing is done, and I have time.
  2. If I were doing this just for me, it would be easy. The code I wrote today checks for the last revision from “yesterday” and compares that to the current document. Simple, right? But not everyone who uses these scripts writes every day. What happens if you skip some days. Then there is no revision from “yesterday” so the script has to know to look for the previous revision regardless of date. There are a few other uses cases that need to be considered as well.
  3. Once I have the code written, I like to test it for a few weeks before pushing it out, just so that I can work out any kinks.

That said, once this feature is in place, I think it will make for an enormous improvement. Since everything, including the revisions, is contained in the one document, there will no longer be a need to manage a snapshot folder at all, and all of that code can go away.

It also opens up the possibilities for analytics on the evolution of a document over time, which would be pretty cool, too.

A Peek Inside My TextExpander Snippets

When I talk about how I use TextExpander to increase my productivity, I sometimes get questions about what TextExpander actually does. Although the name is pretty clear, if you’ve never used the tool, it might not be obvious how it can help speed up your day. So I thought I’d give folks a peek into my TextExpander snippets so you can see what I am talking about.

TextExpander is a Mac-only tool. On my Windows machine, I use a tool called PhraseExpress, which does the same thing–and it can even use my TextExpander settings files, which I keep on Dropbox for this very purpose.

My Golden Rule of productivity

For context: if I have to do something more than once, I try to automate the process. I am sitting at a keyboard all day, and there are many things I find myself typing over and over again. Email addresses, phone numbers, and common replies are just a few examples. TextExpander allows me to create shortcut phrases for these common things so that I don’t have to type the whole text every time. I type the shortcut and it automatically expands into the full text.

My snippets

TextExpander Snippets

Above you can see a list of some of my more common TextExpander snippets. The shortcut for each appears in the gray oval to the right. I preface my shortcuts with two semi-colons to avoid a conflict with the word itself.

For example, when I type ;;paperless, it automatically expands into I don’t have to type the entire URL and there is the added benefit of eliminating the risk that I might make a typo if I do type it manually.

You can see other examples in the list. TextExpander makes it easy to take a short phrase and expand it into something longer.

Continue reading A Peek Inside My TextExpander Snippets

Major Code Update to the Google Docs Writing Tracker

I made a major update to the Google Docs Writing Tracker today. Although the update does not introduce any new features, it does bring the code up to the current standards for Google App Scripts. Back in December, Google deprecated a big portion of its Google DocsList code in favor of the DriveApp code.

DocsList Service

The Google Docs Writing Tracker referenced the old code in dozens of places. Today, I replaced those old references with references to the newer DriveApp object model. This means that if you are using the new code, you should no longer see any messages about deprecated code in the execution logs.

The only significant change, from a user-perspective, is how folders are handled in the Config tab of the spreadsheet. For now, I did the simplest possible implementation. The values for the Sandbox and Snapshot folders should refer directly to the folder name and not include the path. So if you used to do something like this:

Old Folder Model

You should change it to do this instead:

New Folder

This looks for the idea of the folders named above, and uses their ID instead of their name throughout the scripts. It does mean it will cause problems if you have more than one folder with the same name, but it is good enough for now.

One small bug fix

Included in this refactor is a minor bug fix. Some people have reported no data all of a sudden, after the code has been working for a long time. The problem, it turned out, was happening with people using the RescueTime integration. If, for some reason, RescueTime could not by reached by the API call, the JSON file returned was empty. This wasn’t handled properly by the scripts.

Now, it is.

So if you use RescueTime integration and the API call fails for some reason, it won’t break the rest of the script from running. You just won’t have RescueTime data for that day.

Getting the new version

To avoid confusion in the short term. I have checked the new code into a separate branch in the GitHub project. If you want the new code, pull the google-drive-refactor branch. If you want to see how much of the code actually changed, check out the differences.

I’ve done some testing on my own machine and it seems to work okay. When I feel that enough general testing has been done, I’ll merge this code into the master. If you find any problems, open up an issue.

More coming soon

I’m also working on a new feature that I’ve wanted for a while now: Project Tracking. This allows you to assign arbitrary project names to documents. The words counts are tracked daily by project on a separate sheet in the workbook, allowing you to track words and time by project, as well as by day. Especially useful if you work on multiple projects in a day (as I sometimes do) or have multiple documents in a project (as I do when I work on novels).

And as always, if you have suggestions, let me hear about them. Or better yet, fork the code and try to implement them yourself.

Joys of a Text-Based Reading List

January will mark the 20th year I have maintained the list of books that I read each year. I started my list back in January 1, 1996, when notions of self-tracking in the digital age hadn’t yet risen to their current ubiquitous levels. Over those two decades, I have read 590 books (I’m in the middle of my 591st as I write this) and my list has been maintained in (so it seems) nearly as many formats.

In the early days, I kept my list in a Microsoft Access database. I did this because it seemed to me to the be most efficient way to store the data, and I was very big into efficiency back in those days. Eventually, this format was migrated into MySQL. But I found over time that the queries I would make against the data were not nearly as sophisticated as those I imagined I would make. Modeling the data and maintaining it took more time than it was worth.

Eventually, the list moved into a page in this WordPress blog. And for many years, that page was manually maintained. About a year ago, I took the final step at simplifying my list, making it into a simple, plain-text file stored on Dropbox, and writing a simple plug-in for WordPress to read and render the text file as a web page.

This is an example I think is pretty typical: design starts out overly complex because the practical use cases are difficult to imagine. Over time, the design is simplified to focus on just those use cases that are important and meaningful. While my reading list started out as a highly normalized database, today it is a simple text file, and I can do more with it in less time than I’ve ever been able to do before. Today, I can ask all sorts of questions about my reading list simply by knowing a few basic commands at the command line.

My reading list as a text file

Reading list text file

I use Sublime Text as my default text editor in both Windows and Mac, and Sublime Text has a few features that help simplify the maintenance of my list. The biggest win is that I don’t need to record the number for each book the way I used to. I simply add a new line to the file with the title and when I look at that title in Sublime Text, I can easily see what number that book is (in the order for which I’ve read it). For instance, I can see that Revival by Stephen King is the 589th book I have read since January 1, 1996.

What I track about my reading

I used to capture all kinds of information about what I read, but I found that I almost never used it. I used to categorize and classify the books, and break them into fiction and nonfiction, and the gender of the author. But I never used it. So I simplified things in the text file. Today, I capture just a few pieces of information:

  • Title
  • Author
  • Date completed

I have a few symbols I use after the title which indicate information useful to me:

  • * = a book I really liked, and would recommend.
  • @ = audiobook
  • + = e-book
  • ^ = a repeated reading (that is, I have read the book more than once).

This turns out to be enough information, and to satisfy most of the questions I have about my reading list and reading habits.

Querying my reading list

One “secret” of my productivity is that I am a big command-line junkie. I have been since I first started playing around with Linux in the mid-1990s. I realize that not everyone uses the command line, and not everyone is comfortable with it, but for many things, I am much faster at the command line than with an app and a mouse.

I always have at least one command window open, whether on a Mac, or Windows (where I use Cygwin). That saves me the step of having to open one when I want to query my reading list. I also have some aliases that speed things up. For instance, if I want to edit my reading list in Sublime Text, I simply type “reading” at the command line, which opens the file in Sublime Text.

But what about querying the list? Well that is pretty easy, too. Here are some examples:

Continue reading Joys of a Text-Based Reading List

How I Used RescueTime to Baseline My Activity in 2014 and Set Goals for 2015

Since early in the year, I have been using Rescue Time on all of my computers to track how much time I spend in various applications, websites, and documents. Rescue Time is great because you install it, and it runs in the background, without ever needing me to take any action. Like a FitBit device, it just collects data as I go about my day. Rescue Time has a nice reporting interface, but it also has a very useful API that allows me to pull specific data and look at it interesting ways.

Tracking the time I spend writing

For instance, I’ve always wanted to get a good measurement of the time I spend writing each day. That said, I didn’t want to have to remember to “clock-in” or “clock-out.” It seemed to me that Rescue Time could help with this because it is constantly tracking my activity, and Rescue Time should therefore be able to tell me how much time I spend writing. After some exploration of the API, I found out how to pull the information I needed from Rescue Time, and now, I have scripts that can automatically produce a chart of the time I spend writing each day. Here’s an example of the last 60 days of my writing:

Time Spend Writing

The top 10 tools I’ve used in 2014

As part of my effort to simplify the tools and technology I use, and to automate as much as I can, a baseline of what exactly I use would be a helpful starting point. Fortunately, RescueTime captures all of this data and has some canned reports that show just where I’ve spent my time in front of they keyboard. I started using RescueTime in January, so this data covers a period of January to the present, nearly a full year. Here, then, are the top 10 tools I’ve used on all computers during that time.

RescueTime - All Activities
Click to enlarge

Twitter is number one on the list, and while that surprised me at first, I quickly realized that I am constantly jumping in and out of Twitter, in an effort to keep up with those friends and colleagues that I follow. (I rarely post from Twitter. I use Buffer for that.) Still, 221 hours for the better of the year is quite a bit of time spent in Twitter. Red items are those that Rescue Time considers “unproductive.” Twitter can certainly be a distraction, but I wouldn’t consider all of it unproductive.

Next on the list at 219 hours, much to my dismay, is Microsoft Outlook. This is what I use at the day job, and it is among the worst email programs I’ve encountered. The thing is, I’ve also been using it since it first existed, and there’s no way of getting away from it. What it tells me is that a great deal of my job–too much, I think–is spent dealing with email messages, and calendar appointments.

Google Docs is next on the list at 205 hours. The vast majority of this time–probably 90% or more–is spent writing. Ideally, I’d like to see this move up to number one over the next year.

Gmail follows at 169 hours. It’s still a lot of time to be spending reading and writing email messages, but that number is almost certainly down from what it would have been the previous year, thanks to a great deal of automation I’m able to do with Gmail using tools like Boomerang, for instance.

From there, things begin to drop off pretty rapidly. Facebook shows up in 7th place, but even that seems like too much to me.

Using the RescueTime baseline to find more time to write

With actual numbers in hand based on my behavior, I can begin to change my behavior and measure that change over time. First and foremost on the list is a tradeoff: more writing time for less social media time.

My Twitter and Facebook time totaled 310 hours in 2014 to-date. My writing time totaled under 200 hours. I could easily get more time for writing by cutting back on social media. Cutting back doesn’t necessarily mean no participating. Tools like Buffer have allowed me to schedule tweets and Facebook posts head of time. Whenever I post to my blog, it gets automatically posted to various social media outlets. What I think I need to do is make better use of the time I spend reading my social media feeds.

Right now, I read stuff throughout the day in a very fragmented fashion. I only follow people on Twitter that I am interested in keeping up with. I know that conventional wisdom is that if you want more followers, you follow everyone. But I honestly don’t know how people with 17,000 followers and who follow 19,000 people can keep up with it all. Probably they don’t even try to. Yes, there are lists that I could build, but that takes time to create and manage, and I’m looking to spend less time here, not more.

It seems to me that a fair number would be to spend half of the time in social media that I spend on writing. This year, the hours for both categories gives me a total of about 500 hours. So if I have 500 hours to spend between social media and writing, and I want to spend double the time writing than on social media, then let’s assume w represents the time I want to spend writing:

0.5w + w = 500

This simplifies to:

1.5w = 500

And solving for w, we find that,

Continue reading How I Used RescueTime to Baseline My Activity in 2014 and Set Goals for 2015

How I Use ThinkUp for a Better Quantified Social Self

Something about social media metrics makes me antsy. How many followers do you have on Twitter? How many friends on Facebook? How many likes did you get for that post? How many times was that clever tweet retweeted? Perhaps these are useful measurements for a brand or business, but for the average person–me for instance–they aren’t particularly meaningful.

Of course, I like the data. It’s the approach that makes me uncomfortable. To better understand my quantified social self, I use a service called ThinkUp. ThinkUp is the brainchild of Gina Trapani and Anil Dash and touts itself as “analytics for humans.” It takes the bland numbers out of social media metrics and provides fun, useful insights that help to tell a story about my social media behavior. I’ve been using ThinkUp ever since it first appeared, and based on my experience so far, the insights ThinkUp provides fall into four categories.

1. Personal insights

A perfect example of a personal insight is one I received one morning back in August, when ThinkUp let me know it was my 6th Twitter birthday:

ThinkUp Twitter Birthday

ThinkUp also looks at how frequently people interact with your tweets and posts, and provides interesting metrics on the ones that do particularly well:

ThinkUp Twitter Favorites

These insights are personal. Unlike some services which compare you to others, this is simply comparing me to myself. In this same way, ThinkUp will provide you with a summary of your week:

ThinkUp Week

2. Fun insights

ThinkUp has a growing collection of fun insights that pop up from time-to-time. I recently encountered this one:

ThinkUp Exclaim

Trust me when I say that seeing that insight made me more sensitive to the frequency with which I use! exclamation! marks! in my tweets. I have also seen insights for how frequently I’ve used the term “LOL” in a tweet or Facebook post.

3. Paying it forward

Social media often seems like a race to the highest number of followers–or likes, or retweets–as possible. The number is the end as opposed to the content. One of my favorite parts of ThinkUp is what I call its “pay-it-forward” insights which take those numbers and puts them to good use. Here is one example:

ThinkUp Thank You

Seeing this insight encourages me to thank people more often, because it’s nice to be nice. Then, too, while I don’t have an audience as large as Neil Gaiman or John Scalzi, I do my best to signal boost things that I find interesting besides my own stuff. ThinkUp acknowledges these kinds of activities as well:

ThinkUp Boost

I like this because it emphasizes that the number of followers you have is not just about how popular you are, but expresses the degree to which you can help boost the signal on other people’s messages.

4. Improving my social media behavior

For me, the most useful insights that ThinkUp provides are those that help me be a better person on social media. Here is one example where ThinkUp finds plenty of room for improvement in my behavior:

ThinkUp Me

While worded in a perfectly friendly manner, the message is clear: I talk about myself quite a bit, as opposed to pointing folks to other interesting people and thinks. Some of this comes from the fact that I write articles from my perspective, but the insight is still telling. And while my behavior hasn’t changed overnight, I use this insight as a benchmark for my behavior, and have been gradually trying to reduce the percentage–with mixed success so far.

Being efficient with tweets and posts is also important. You can reach more people if you know when more people are listening, and ThinkUp helps with that by looking at when your friends and followers are posting, and suggesting those times as ideal for posting and tweeting yourself:

ThinkUp Time

As ThinkUp is providing new insights every day, the times may vary and can be adjusted accordingly. Using a tool like Buffer, I can schedule my most important tweets and posts during the suggested time window.

Finally, ThinkUp will occasionally remind me how long it has been since I last updated my profile on Facebook or Twitter. Things change fast on the Internet, and I often forget to update my profile when something new comes along. Now, ThinkUp helps remind me of this:

ThinkUp Profile

ThinkUp currently provides insights for Twitter and Facebook. It is an evolving service with new insights being introduced all the time. You can elect to receive a daily email message summarizing your insights for the previous day. I like this feature. I can review the insights in the morning, and immediately make adjustment that day based on what I find. If I’m talking about myself too much again, I’ll dedicate the day to focus on others.

It is also worth noting ThinkUp’s data philosophy. As they say upfront on their home page, they don’t have ads and they don’t sell your data. They have a clear, simple, and refreshing values page that goes into more detail into the overall philosophy behind the service.

I was an early-bird user of ThinkUp. The service costs $60/year (that’s $5 month, and remember, no ads!), but a 14-day free trial is available for folks who want to see what the service is like. ThinkUp recently introduced an option for $5/month, for those who want to go month-to-month. Finally, ThinkUp is also available on GitHub for those who want to run the service on their own, or contribute to its open source development.

Since I started using ThinkUp, it has become my primary tool for gauging my social media behavior, benchmarking that behavior, and using the insights to improve my behavior. I find the unique insights an invaluable way to more closely examine my quantified social self.

My New Obsession: Simplicity and Automation in Technology

I have spent the past two and a half years going paperless. During that time, I wrote more than 120 posts about my process and the tools I used. I knew I was approaching the end of those posts when I began to find it difficult to come up with new topics to write about. I’d written about everything I had done, and I hesitated to write about those things that I had no direct experience with.

But my urge to write about technology hasn’t waned. Indeed, it has grown over time. And so, you can expect more from me on technology subject, centering around what is my new obsession: simplicity and automation in technology. While I’ll have much more to say on the subject, my basic thinking goes something like this:

There are tons of tools out there that are supposed to make us more productive. In my experience, however, the tools accumulate and the accumulation of tools lends itself to a decrease in production because we’re stymied by the question: which tool do I use for this job?

Consider the word processor/text editor. There are countless varieties of these beasts that all do about the same basic task: they allows to write and store our writing. But which one is the best tool for the job? That will vary by person, but there are probably some elements that you could look at to narrow the scope. Part of it involves what that job is. Are you writing code, or a novel? Email or poetry? There is a balance between functionality and simplicity. You don’t want to have to learn more tools than you need to do the job, but each tool you use needs to be simple enough, but broad enough to do that job effectively.

Then there is the complexity of the tool. A tool like Microsoft Word can do a heck of a lot, but it also can be cumbersome to use, maintain, and because it isn’t focused on a specific task, it can be awkward for some things. On the hand, a basic text editor, like Notepad or TextEdit may be too barebones. Where is the balance?

Automation is another consideration. On a computer, at least, it should be possible to automate any repeatable task. But operating systems tend to muddy the waters. They abstract the interfaces to the point where automation can become difficult, or require intermediary tools that complicate the process. For the best possible automation, it seems to me that the simplest possible tools are required.

I’ve been thinking about these things quite a bit lately, in part because I am trying to simply and automate as much as I can. Automation has the benefit of freeing up time to pursue passions, time that might otherwise be occupied by drudgery, and repeated tasks. Going paperless allows for some automation that I would not have otherwise had. But I think there is more than can be done.

So, I’ll be writing more here about my pursuit at technological simplicity and increased automation, two things that might seem mutually exclusive, but which I think can lead to less time spent in drudgery and more time spent doing the things I really enjoy. Like any experiment, I may end up proving myself wrong. But knowing what I know today, I don’t think so. So if you’re interested in this type of thing, stick around. I’ll be writing more. I don’t have a set schedule right now because I’m still coming up with a framework of how simplicity and automation might work for me. But as I try things out, as I experiment, I’ll write about it, and I encourage and look forward to discussion on what works and what doesn’t.

My Requirements for a To-Do List App

For most of the year, I have been trying out different to-do list apps to see if there is any that fits me well. So far, the search has been a little disheartening. The closest match is still Gina Trapani’s Todo.txt, but even there, I’ve modified my behavior somewhat in order to meet my own quirk requirements for a to-do list app. Meanwhile, I have tried just about every other to-do list application out there, from Todoist, to Remember the Milk, to Toodledo, to Clear, and everything in between. Nothing quite fits. My problem with most of these applications is that do a few too many things and those extra things impede my ability to manage my to-do lists.

Since I may not be the only one experiencing these issues, I figured I’d list out my requirements for a to-do list application, and then describe how I’ve modified my current system to support these requirements.

My requirements

1. The list be stored in an open format. Todo.txt uses a plain text file, which is stored on Dropbox. That is about as open a format as you can get. Many apps have APIs and I’d count that as an open format, but even APIs require additional time to write the code needed to extract data. Plain text is plain text.

2. Priority is by list order.  A lot of apps allow you to add a priority to a to-do item. Adding these has always seemed like an extra step to me, and a difficult one because you can’t always see everything on your list when setting priority. It also doesn’t work nearly as well for reactive work. As some of what I do is reactive and some is proactive, my priority system is simple: The thing at the top of the list is the the highest priority, and as you go down the list, you get to lower and lower priority. Changing priority should be as easy as changing the order of the list.

3. One list to rule them all. Many to-do apps allow you to manage multiple lists, perhaps one for home and one for work. Or one for each project. This works against me. My time is one continuous flow that is not broken into projects. The very next thing I will be working on may be in a completely different project or context for what I am working on now. I only one list and I want everything to show up on that list. Having to change lists when I change projects just slows me down.

4. Easy archiving. When I finish something, I want it to drop off my list, but I also want it stored somewhere so that I can see everything I’ve completed. That “done” list can be pretty helpful at time.

5. Accessible anywhere. I need to be able to access my to-do list from anywhere.

Continue reading My Requirements for a To-Do List App

6 Tips and Tricks for How I Stay at Inbox Zero

Recently, I’ve gotten pretty good about keeping my inbox down to zero. I found that, for me, it takes a pinch of discipline and a couple of good tools. I figured I’d share my tips in case anyone else found them handy.

2 minute rule with Boomerang/Mailbox

For almost 2 years now, I’ve used the Boomerang plugin for Gmail and that plugin has been a game-changer. Boomerang does 3 things that I find really useful:

  • It allows you to “boomerang” a message until later. That it, it moves the message out of your inbox and returns it there at a designated time, tomorrow morning, two days from now, on the weekend, next week, or whenever you specific.
  • It allows you to send a message, and then boomerangs your message back into your inbox if you haven’t gotten a response after a certain time interval. So I don’t have remember to follow up with someone.
  • It allows me to schedule email messages.

I use Boomerang in conjunction with the “2-minute” rule. When an email comes in, if I can answer it in less than 2 minutes, I do it right away. If it will take longer, I’ll boomerang the message to a later time, either later in the evening, the next day, or the weekend, depending on the urgency.

To aid in this, Boomerang has an intelligent feature that looks for dates in the message. So if the message says, “RSVP by 10/15/2014” Boomerang will automatically suggest that (or a week before that date) to return the message to my inbox, which saves me a step.

When I’m working on my iPhone, I manage my email using an app called Mailbox, which has much of the same functionality as Boomerang, but is conveniently available on the phone, so I can manage my inbox the same way there.

Gmail canned responses

I’ve been able to reply to a lot more message in under 2 minutes by taking advantage of Gmail’s “Canned Response” feature. This feature allows you to write canned responses that you can quickly insert into email messages. I’d say that about 10% of the email I send are canned responses. By far the two most common are inquiries for people wanting to do guest posts on my blog, or advertise on my blog.

For these, all I have to do is select the appropriate canned response template in Gmail and click send.

Canned Responses

TextExpander expansions

I am a big fan of TextExpander and I use it all over the place. (On Windows, I use a similar tool called Phrase Express.) TextExpander allows you to create shortcuts to text snippets and other things. This can be formatted text, and can include some cool functionality like inserting dates, and other things.

For email, I tend to you TextExpander to speed up replies, and to prevent myself from having to lookup information. For instance, if I am referring someone to a common link on my website (say, my Going Paperless posts), rather than having to remember the link and type it in (and worry about making a typo) all I do is type


which automatically turns into

I can never remember my home phone number, so if I’m sending that via email I have a shortcut for that. I have shortcuts for all kinds of common information like my address, or website, or bibliography page. I usually create a shortcut that links to the most recent article I’ve published.

All of these speed up the process of replying to email, and help make it possible to respond in under 2 minutes.

Turn off social media notifications

One thing I did that helped a lot was to turn off all social media email notifications. Rather than have that information pushed to me via email, I pull it when I need it by checking Twitter or Facebook periodically. This eliminated a ton of email from my inbox, and for each message, eliminated the step of having to delete the email.

Filter receipts and confirmations

I make heavy use to Gmail’s filtering to deal with a lot of email. Regular bill notification and automatic payment notifications are automatically filtered without ever going into my inbox.

Receipts and confirmation emails are also filtered without ever seeing my inbox. For these, I go one step further and have them sent to my Evernote email account so that I have the receipt and confirmations in Evernote. This is automated, so not only do these messages not clutter my email inbox, but they also get into Evernote automatically.


I’ve become a big unsubscriber lately, and while it took a while for me to see the overall result, I can see now that it prevents a lot of email that would go unread or get deleted from ever coming into my inbox.

Do you tips for how you stay at inbox zero? Leave them in the comments.

Practical Statistical Modeling: The Dreaded After-School Carpool Pickup

The Little Man started kindergarten this week. It meant a new school, and the new school has one of these well-organized systems of picking up your kids at the end of the day. But it can be a bit intimidating the first time. Basically, it works like this:

You arrive at the school and pull around to a side parking area. Four lanes are set up. Each lane holds about 10 cars, and the lanes are filled in order, first lane first, then the second, and so on. When all lanes are filled, the area is closed. Cars that don’t make the first round, line up in the upper parking areas for the second round. The students are released, the go to their cars. When all students are in the cars, the lanes are released in order. This is then repeated for the second round.

It’s very organized and efficient, but there if you want to be in that first round, or that first lane, you have to get there pretty early. As someone who doesn’t really want to sit in the car for half an hour, I decided I’d get there early on the first two days to capture data about when cars arrive, and build a statistical model based on that. Which is exactly what I did. I arrived early, getting into the first half of the first lane, and then noted the arrival times, and lane positions of the other cars in the first round. I did this for two days, and then built my model.

Constructing the model

The  model was fairly simple. I used a negative number to represent the number of minutes before dismissal (a kind of t-minus 10 minutes) that a car arrived. With that number, I gave the number of the car. So at t-21 minutes, car 16 and 17 arrived. Since each lanes holds 10 cars, it’s pretty easy to determine which lane (and which slot in a lane) the car is in. I ran a correlation on my data and got a very strong correlation: 0.951. The r-squared came to 0.905. I then plotted the data in a scatterplot, and annotated it to better illustrate the lanes. Here is what the results look like:

Carpool Model
Click to enlarge

As you can see, the data makes it clear that in order to make the first round, I’d need to arrive no later than 7 minutes before dismissal. If I want to be in the first lane, I need to arrive no later than 24 minutes before dismissal.

Adding practicality

Of course, it would be a little more practical if the model told me when to leave the house. I hadn’t thought to note the time I left the house and arrived at the school each day, but it didn’t matter. I grabbed the data from my Automatic Link device, and was able to determine that it took, on average, 6 minutes to drive from the house to the school. To be safe, I added 1 minute to this number, and then came up with the following table:

Departure Times

So now, I know that if I want to be in that first round of pickups, I need to leave the house no later than 14 minutes before the students are dismissed. That information could end up saving quite a bit of time over the course of the year. I tend to like to get places early, but I have to balance that against other things I need to get done. Knowing that I don’t have to leave the house half an hour early buys me an extra 15 minutes/day. That doesn’t sound like much, but, I can write a page and a half in 15 minutes. So it’s something.

How Much Time I Spend Writing, Automated and Revisited

About a month ago, I automated the process of capturing how much time I spend writing each day, and incorporated that data into my Google Doc Writing Scripts. Here is how this work:

  • I use RescueTime on all of my computers, home and work.
  • RescueTime tracks how much time I spend in various applications, including specific documents.
  • Using the RescueTime API, I wrote a script that captures how much time I spend in Google Docs each day.
  • That number gets recorded in my writing spreadsheet automatically each night.

This means I no longer have to “clock in” or “clock out” to track my writing time. I just start writing, stop writing, continue later, etc. and all of it captured automatically by my script. With almost a month of this type of data on the books, it’s interesting to look at how my guesses match reality.

Generally, when I’m firing on all cylinders, I can write 6 pages (1,500 word) per hour. Put another way that is about a page every ten minutes. Of course, I don’t always reach this apogee of output. It turns out (with about 30 days worth of data to go on) that the correlation between the time I spend writing and how much I write is pretty strong (0.59). I took the data and ran a scatter plot, with a trendline using that correlation, and here is the results:

Writing Time

It is clear that the more time I spend, the more I write, but it’s not as strong a correlation as you might think. Part of the reason is that sometimes, it takes a while to get things out of my head. Here is what that same set of data looks like plotted individually over time. First the word counts…

30 Days Words

and then the time spent…

30 Days Time

These two charts illustrate that while the correlation is pretty strong, there are times when I clearly get bogged down. August 5 is a good example. I wrote just about 1,200 words, but it took me 79 minutes. And yet on August 7, I wrote 1,600 words and it took me under an hour. This variability is caused by two things:

  1. Concentration. Sometimes, in difficult scenes, I slow way down to think things through and work them out. Remember, I generally don’t plot ahead, so especially in first draft, I’m working out things on the fly.
  2. Interruptions. I’ve talked about how in order to write every day, I’ve had to learn to write with distraction. Sometimes, the kids will need me for something, I’ll step away for 5 or 10 minutes with no progress on the document, and then return and write more. That clearly shows up as slower.

But that red trendline in the first chart is pretty accurate, and comes close to my intuitive guesses. I have said that I wrote about 500 words in 20 minutes. That’s 1,000 words in 40 minutes. If you look at the 1,000 word-mark on that first chart, and then go up to where the red trendline crosses the 1,000 word-mark, it’s right about the 40-45 minute mark. My intuition is pretty accurate! You’ll also note that 1,500 words crosses at right about the 60 minute mark.

I have less than 30 days of the time data, but as this volume of data increases, I expect the trendline to become more accurate. One thing that is particularly useful about a chart like this is that it can tell you for a given amount of time you have available, how much you can accomplish. Or, flipping it around, if you want to write 1,000 words, how much time will you need to set aside?

Entirely automated

I wanted to call this out one more time. All of the data above is generated automatically. I don’t spend a single instant of my time collecting it. That is perhaps the biggest value. Once I wrote the scripts (which I did spent time on) I get the data without any effort, and this can be used to help me make adjustments down the road.

You can see my realtime data, including how much writing I’ve done at various intervals (my ongoing writing streak, for example) and how much time I’ve spent writing. Head on over to to check it out.