One Reminder/Task Manager To Rule Them All

Spoiler / tl;dr: it doesn’t exist.

Damn this is a frustrating topic for me.  Technology is supposed to make our lives easier.  For the most part, of course it does.  But a key part of this for many of us is dealing with reminders and managing tasks.  And most of us carry a device, in my case an iPhone, in our pockets all the time, making them the perfect command center for this.  But this is where it all falls down.

In my case, I have three key apps in this process: OmniFocus, Fantastical, and Checkmark.  They each excel at at least one function, and where each excels, the others are kind of crap.  There are tons of task managers out there, but OmniFocus always worked best for me. OmniFocus for iPhone is a really good app, but it pretty much sucks for entering time and location reminders.  Time-based reminders (and general calendaring) is where Fantastical excels, with its natural language parser.  I can add todos very quickly and efficiently.  These todos also sync with the iOS Reminders, as well as OmniFocus if you enable it.  So they’ll get into OmniFocus by way of Fantastical anyway.  Both OmniFocus and Fantastical suck for location-based reminders.  OmniFocus is decent at it, but it’s extremely limited.  This is where Checkmark comes in.  Checkmark is absolutely fantastic at location-based reminders, but not efficient at time-based.  In Checkmark, you double-tap on one of your pre-set up your locations, and tell it whether you want to be reminded when arriving or leaving, as well as a choice of delays.  So I can have it remind me of something 15 minutes after I get home.  This is brilliant.  OmniFocus requires separate contexts for arriving at home and leaving home.  And no time delays.  And Checkmark is self-contained.

So, there’s a lot of friction when it comes to entering tasks/reminders.  I have to stop and think about which of three apps is best suited to the particular item.  This is bad.

  • Time-based reminders: Fantastical
  • Location-based reminders: Checkmark
  • Project-based tasks/reminders: OmniFocus

I really wish there were one app that could do all of these things well.

Nerds on Draft

My friends Gabe and Jeff have a new podcast: Nerds on Draft.  The two main subjects are near and dear to me, and the two things I usually talk about here: beer and technology.  I really enjoyed the first episode and look forward to more.  And fortunately all of us being from the Northeast, I can get most of the beers they’ll be talking about.

Paulaner NYC

I went last night to the recently-opened Paulaner NYC.  It was excellent.  They serve both Paulaner beer and Bavarian cuisine.  All I had was the beer, but will definitely come back for both food and more beer. Though as a vegetarian, I rarely get excited over German food.  Bacon wrapped in bacon with a side of bacon just doesn’t appeal to me.

Besides being set up beautifully, the four beers they offer on tap are brewed right at the establishment.  Besides being super fresh, this also means that they use some local ingredients.  For example, the Munich Pale Ale was brewed like an IPA, including American-grown Amarillo hops.  And it was delicious.  The Hefeweizen tasted better than ever, probably because it was so fresh. 

All in all a great experience and highly recommended.  Beer, service, and atmosphere were all excellent.  And if you get there before 6pm for the 2-for-1 beer special, the prices are as well.  I will be back.

Spiegelau / Dogfish Head / Sierra Nevada IPA Glass

For my recent birthday, my wife bought me a set of the Spiegelau IPA glasses.  Yes, they’re a little weird-looking with their ribbed-for-someone’s-pleasure base, but I can definitely say these glasses are a total winner for IPAs.  Where you might not notice much of a difference at first, where they really shine is that they keep the IPA’s “IPA-ness” throughout the entire beer.  Where I’ve noticed that sometimes the flavors and texture of IPAs in standard pint glasses can get kind of weak and watery by the end, everything that you love about an IPA really persists through the end.  I can only guess that the ribbed base sort of aerates the beer to keep the hop flavors and aromas alive.  And the glass also turns out to be quite comfortable to hold, partly because of the shape and partly because the glass is actually thinner and lighter overall, yet Spiegelau claims they’re quite strong.  Total win in every respect. Highly recommend and wife-approved.

Beer Log into Day One

I recently started using Day One on a daily basis. I’d had it for quite a while, but never found much personal use for it. What changed that was realizing that Day One could set the time stamp and location of an entry to that of a photo’s that you add. Giving context to random photos I have in my camera roll is brilliant. I now use Day One for various things. When I first saw Brett Terpstra’s slogger, it made me realize that I wanted to put the beers I drink into Day One. Easier said than done. Someone created a script for Untappd for slogger, but it never worked for me. The only way I could do it was using slogger’s RSS script along with my unique Untappd RSS feed. It worked, but there was so much extra crap in each entry (excess wording, URL, etc.) that the entries were just too ugly to use for this purpose. So though I really wanted this functionality, I put it on the back burner until I could find a better way.

Enter Craig Eley’s Sifttter. Sifttter, like slogger, will get information into Day One, but as you might guess from the name, it works off of IFTTT and Dropbox. This gave me a new angle on my goal, partly because Sifttter uses text files in Dropbox as a sort of middleman. What this means is that if I could get my Untappd RSS feed into a text file before importing into Day One, I could clean up the entries to how I want before they showed up in Day One. And it works great.

Here’s how I do it. Your mileage may vary, especially since I’m using this for a single case; only Untappd checkins.  Plus, as a unix sysadmin, some of the tools, such as sed and crontab, make most sense to me. I do admit that some of this may seem like a Rube Goldberg way of doing things, but in the end I got what I wanted.

Tools

Untappd

IFTTT

Dropbox

sed

crontab

Sifttter

Day One

Method

First thing is to get my beers out of Untappd.  Fortunately, Untappd gives you a private RSS feed for all of your checkins.  This allows me to feed it into IFTTT and output it to a flat file in Dropbox. The Feed URL in the screenshot below is shortened; you would get your own Untappd Feed URL from your Beer History page.

Screen Shot 2014 01 10 at 15 23 22

The checkins arrive in relative real-time to the Dropbox file. At the very end of the day I have crontab run a couple of scripts to act on the file.  I know that crontab is not recommended for OS X, but since I’m very familiar with it, I much prefer to use that over something like launchd with silly XML files.

57 23 * * * /usr/local/bin/sifttter.sh

sifttter.sh is a shell script to run some sedcommands to modify the RSS output to how I want it to look in Day One, then run the actual sifttter.rb script to import into Day One.

sed -i '' -E -e 's/Ken\ W\.\ is\ drinking\ (a|an)\ //g'
 /Users/your_username/Dropbox/Apps/IFTTT/sifttter/*.txt
sed -i '' -e 's/\*//g' /Users/your_username/Dropbox/Apps/IFTTT/sifttter/*.txt
sed -i '' -e 's/PM\ \-\ /PM\ \-\ \*\*/g'
 /Users/your_username/Dropbox/Apps/IFTTT/sifttter/*.txt
sed -i '' -e 's/\ by/\*\*\ by/g'
 /Users/your_username/Dropbox/Apps/IFTTT/sifttter/*.txt
sed -i '' -e 's/\ at/\ \@/2'
 /Users/your_username/Dropbox/Apps/IFTTT/sifttter/*.txt
mv /Users/your_username/Dropbox/Apps/IFTTT/sifttter/beer.txt
 /Users/your_username/Dropbox/Apps/IFTTT/sifttter/Today\'s\ Beer.txt
sleep 10
/usr/local/bin/sifttter.rb
sleep 10
mv /Users/your_username/Dropbox/Apps/IFTTT/sifttter/Today\'s\ Beer.txt
 /Users/your_username/Dropbox/Apps/IFTTT/sifttter/beer.txt

(Any lines beginning with a space are continued from the line above it.  If I didn’t do this for this post, it would look pretty bad.)

The first bunch of commands is to add some nice formatting for Day One.  What I want is simply the beer name, brewery, and location, if any, I drank it at.  The RSS entries from Untappd will prefix these with, “Ken W. is drinking a “.  For my own personal journal, I of course don’t want this.  I know who I am.  So I strip that out.  I then just bold the beer name and change the “at” before the location  to “@“, for better readability.

The rest of the sed silliness is because Day One does not yet parse markdown in the list of entries, and the way file names get changed from IFTTT to Dropbox.  “Today’s Beer” looks nice and easy to pick out in the list view of Day One, so I went out of my way to get that working for the file name.  It would get changed to “today_s_beer” in Dropbox, which would look terrible.  So I let IFTTT and Dropbox use “beer.txt” and use sed to rename it for the Day One import, then back to beer.txt.

The changes I made to sifttter.rb were to change the ‘entrytext’ value (line 83) to ‘ “” ’ (that’s simply two double quotes), to eliminate the title line since I’m only using this for my beer(s) of the day. The other change I made was to the Tag value on line 43 to ‘Beer’, since I tag any beer-related entries in Day One with a ‘Beer’ tag.

For those familiar with the GNU version of sed, the extra ‘-e’ part is because OS X’s BSD version doesn’t allow inline editing like the GNU version does. All of this will perfectly trim every checkin line to how I want it.

Then ‘sifttter.rb’ imports those entries into Day One.

Here’s my end result.  I think it’s worth it.

Day One entry

If anyone finds this interesting enough to try and runs into any problems, please feel free to contact me in any of the ways in the Contact section at the top right and I will help as much as I can.