Category: personal automation

Automating My Journal Entry Numbers in Obsidian with Keyboard Maestro

colorful toothed wheels
Photo by Digital Buggu on

Not long ago I wrote about how I went back to keeping my journal in Obsidian. I was going to try this experiment for all of 2022 to see how it worked out. I’ve flip-flopped on this over the last year or so, but you can check out the recent post as to why I made this decision.

Since I began this particular incarnation of my journal, back in 2017, I began giving each entry a unique entry number. I took this idea from Isaac Asimov, who used a similar method to simplify the indexing his of book Asimov’s Biographical Encyclopedia of Science and Technology. The journal spans multiple volumes (9 large Moleskine books and now, one file) and the entry numbers allow me to index the journal without worrying about which volume or page number the entry is on.

I am always looking for small efficiencies in workflow, and as I have been keeping my journal in Obsidian, I wondered if there was an easy way to automate entering the next entry number heading. It’s a small thing, but given that the journal is a text file, and each entry number a level 2 heading, it should be do-able. Here is how I managed to automate this:

Obtaining the next entry number

First, I wrote a command to search my journal file for all level 2 headings (that is, heading that begin with ## in Obsidian) and are followed by a numeric sequence. A typical heading entry looks like this:

## 2345

It took about five minutes of messing around with some Unix commands to do the trick. Here is what I came up with:

egrep "^##\s(\d+)" ~/Documents/DFC/Writing/Journal/2022\ | tail -1 | sed 's/## //'

Running this command returns the number part of the last level 2 header in the journal file. For instance, when I run it right now, it returns: 2155

Here is how it works:

  • egrep "^##\s(\d+)": searches for any lines in the file that begin with ## followed by a space and then a sequence of one or more digits. Since ## 2155 matches this pattern, any lines in this format will be returned.
  • ~/Documents/DFC/Writing/Journal/2022\ the name of the file to search. That is, my current journal file.
  • | tail -1: take the output of the egrep command about, which will be a list of all the heading level 2 entry numbers in the file (like ## 2155) and filter it through the tail -1 command, which returns the last item in the list.
  • | sed 's/## //': take the last heading that comes from the previous command and filter it through the sed command to strip out everything but the number itself. What I am left with after this is just the entry number.

Getting the entry number into Obsidian

I use Keyboard Maestro for a lot of text expansion and miscellaneous automation. I decided I could use it here to get the entry number into Obsidian. I created a Keyboard Maestro macro called “New Journal Entry” that is triggered whenever I type ;;dd. (Note, this doesn’t apply to just Obsidian, it will do it when I type that sequence of keys anywhere.) The following macro is run when I type that key combination:

Here is how it works:

  • first, it executes the Unix command discussed above to obtain the next entry number from the file, and stores the result in a variable called CurEntry. If I ran this right now, the value of CurEntry would be “2155”.
  • next, it increments the value of the CurEntry by 1, making it 2156.
  • finally, it prepends the number with ## and inserts the value at the position of the cursor in the document. Keyboard Maestro automatically handles replacing the triggering text (;;dd) with the inserted value.

Here is what it looks like in action:

This might seem like a lot of effort to type out a number, but keep in mind, it took less time for me to create the automation than it did to write this post. Also, I’ve already got more than 2,100 entries in my journal and each time, I find myself having to check the previous entry number before entering the new one, and occassionally, I make a mistake, which is a nuisance to correct. This little macro eliminates all of that.

Perhaps even more important, it is one less thing I have to think about. Instead of sitting down to journal and first having to figure out the entry number, now I can just start writing.

There are probably other tools that could be used to achieve the same results. I’ve just happened to be a Keyboard Mastro user for a long time and have a cache of automations that I’ve created over the years stored there, so it seemed the logical place for this one.

Written on February 13, 2022.

Did you enjoy this post?
If so, consider subscribing to the blog using the form below or clicking on the button below to follow the blog. And consider telling a friend about it. Already a reader or subscriber to the blog? Thanks for reading!

Follow Jamie Todd Rubin on

My Obsidian Daily Notes Automation Script is Now Available on GitHub

Since I am on vacation and happened to find myself with an empty hour this afternoon, I managed to clean up my code enough to where I was willing to put my Obsidian daily notes automation script on GitHub. This is the script that I use to automate the creation of my daily notes in Obsidian.

You can find the repo here.

As I say in the README:

I’m posting this software as-is. It works for me, and a number of folks have requested it and I’m happy to put it here to share it. But I have no time to support it. If I make improvements, I’ll try to post them, but there’s no guarantee there either. I realize that this may not work perfectly on non-Mac systems, but the whole point of posting the code is to let folks see it, fork it, and roll your own from it. Hopefully it works for you the first time. If not, the code’s there for you to mess with.

For those who choose to use it, keep in mind that I run my script on a Mac, and icalBuddy, which I use for pulling in my agenda, is designed for Apple’s calendar app. You may need to look for alternatives for other platforms.

I’m always eager for feedback and suggestions, but as I said, my schedule is such that I don’t have time to provide any kind of support for getting the script working for you.

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.

Read more

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:

Read more

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,

Read more

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.

Read more

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.