TECHNOLOGY NOTES

Find Me

Search

Buy TapCellar on the App Store

Latest articles from Technology Notes

Nerds on Draft 022 - J.A.W.N and the Joy of Home Ownership

This winter has been cold here in Pennsylvania but lacked the snow from last year. Gabe Weatherhead over at Macdrifter, and my partner over at Nerds On Draft, has had a terrible winter in Boston and it has made dealing with owning a house quite a challenge.

That contrast is why we had a fun time recording this week’s Nerds on Draft where we talked about the challenges and joys of owning a house. The conversation ranged far and wide but we anchored our discussion with the bitter twang of Neshaminy Creek Brewing’s J.A.W.N.

Hope you have as much fun listening to it as we had recording it.

Using your Shopping List in TapCellar

Buying beer is luckily something I get to do pretty often. Ever since starting the designs of TapCellar 1, having a useful workflow for beer shopping and cellar management were top priorities.

Since the app released last October, I have been using the app daily to manage my cellar and add beers to a shopping list to get ready for the inevitable trip to a bottle shop. This became even more important when Gabe and I started recording our podcast Nerds on Draft since he would often call and ask me to look for a beer to discuss on the show.

I thought I would write up the sequence of events for the “word-of-mouth/shopping list/cellar inventory count” workflow because it is pretty darn useful and maybe not obvious to everyone using TapCellar.

FIND A BEER

First, type the name of the beer in the search box. In this case, we are looking for Bikini Beer by Evil Twin Brewing. Searching for either “Evil Twin” or “Bikini” will narrow the search quickly enough to find the target.

ADD TO THE SHOPPING LIST

While you can access the shopping list button in the beer’s detail screen, it is quicker to swipe from right to left on the beer in the List view and tap the shopping cart button.

This adds the beer to your Shopping List which you can access at any time via the side menu (accessed by swiping left to right on the screen)

CELLAR TIME!

So you get to the bottle shop and get a bunch of the beers on your Shopping list (which you obviously check obsessively while stalking the aisles). When you get home, you go through your goodies and swipe from right to left on each of the beers your bought and use the “+/-” on the right of the quick menu to add bottles to your cellar inventory.

Once you have incremented the beer to add it to your cellar, you can toggle the shopping cart icon off, removing that beer from your shopping list.

At this point, you are all set. Every time you head down to your beer cellar, you can see what is waiting for you down there. You can also use the cellar inventory screen to mark beers off as your drink them (using the same controls you used to add the beer to your cellar in the first place) and remember to order beers when the supplies get low.


  1. For those of you who read this site and don’t know, Gabe Weatherhead and I designed and released TapCellar ourselves as Gravity Well Group. Go buy it. 

Nerds on Draft Episode 021 — White Oak and the Dilemma of Simple Living

I moved out to what is considered “horse country” last winter. I’ve posted about it here and there on this blog and my wife has a site we call “The Windhorse Way” that talks about things we 1 are doing now that we have moved here.

Everything we do in life involves choices whether we make them consciously or not. If you buy eggs from a big factory farm or if you don’t know what “GMO” stands for, it doesn’t mean you aren’t making a choice. You are making the choice that you don’t care about those things. That said, being “informed” isn’t easy either and not all choices are easy to identify as the “right” one. As with judging beer, there is a lot of gray area.

In the latest episode of Nerds on Draft, Gabe asks a ton of questions about my choices to move out Chester County among the farms, tractors and gun nuts. We dig into what was harder than I thought it would be, what was easier, and what choices lived up to the expectations I had of them. A lot of what he asked made me think and, honestly, some of it I didn’t feel like I had a good answer for. That’s not a bad thing. We have to keep asking ourselves if we are doing the right thing every day because one thing is certain — the only constant is change.

To add to the complexity2, we drank a beer called “White Oak” by The Bruery which was an incredible beer worthy of the high price tag and high opinions on the internet.


  1. (OK… mostly she is doing!) 

  2. Maybe I was the only one that thought it was complex. It certainly made me think, that’s for sure. 

A Taskpaper Today Perspective

One of the best things about OmniFocus is Perspectives. It is something I relied heavily upon during the time when I was using it and, after moving to a text-based method of tracking tasks and projects, it was one of the few things I missed.

It is pretty easy to make do with not having a Perspective like this on the Mac. You can run some Sublime Text commands like “Fold with Regex” or “Find with Regex” to track down and filter the things you need to do. On iOS, however, the need is a bit more tailored. If you want to see your tasks across multiple taskpaper files, you need to open Editorial and check each one, filtering as you go. It was not ideal but since the overall need was being met, I didn’t mind that much.

A few weeks ago, I started thinking about a way to skim through all of my taskpaper files, adding target tasks to a single file which would be a static form of my OmniFocus Today perspective. This way, I would only need to focus on one file in Editorial to see what I had to do on a given day. I wasn’t editing the files in Editorial for the most part anyway. It was just a window into the taskpaper files that were tracking everything.

I’m not really a guy who writes code anymore. I used to write it like it was my job1 but as I moved to more managerial positions, the opportunities to write code grew less and less frequent. That is a preamble to the presumably-awful code stored in this gist:

Python Today Tasks Perspective

Here’s what it does:

  • Open up whatever taskpaper files you want to add to your daily “Today perspective” file, called “tpToday.taskpaper”.
  • Start building the text for a new file.
  • First add a timestamp. This helps you know the file was generated recently in Editorial. It is more for debugging than anything.
  • Loop through your taskpaper files and look at each line.
  • If it is a project, remember it.
  • If it is a task and matches a target regex (see below), check to see if it is a different project from the last one
  • If so, add the current project name (from the last step) and then append the task otherwise just add the task to the file.
  • After all files are read, stream the new contents to the tpToday.taskpaper file.

The way I am determining if a task makes it into the file or not is via this regex line. It is built up via trial and error and some feedback from a reader (thanks, Thomas!)

"((@+\\bcritical*)|(@+\\btoday*)|(@+\\bhigh)|(@+\\bdue\(" + today + "\)))(?!.*@done)"

Eventually, I will add some code to look at the dates and find all overdue tasks with dates prior to today’s date too. Baby steps.

The result is a list of tasks organized by file, then organized by project. You can skim through them easily and quickly. The addition of the file and project names keeps you anchored and oriented in a way that a simple line-filtering routine from within Editorial wouldn’t accomplish easily.

Now that the script was working, I created a job on my Mini using Lingon that triggers when my taskpaper files change.

So far, this has has been working for a few weeks and it has been really helpful. Once the date math is added, I’ll have the exact view of my tasks and projects that I had in OmniFocus. It went against my “stop fiddling” mantra but it is actually saving me a lot of time going back and forth between files so it was worth the effort.

I was reticent about using an automated task to handle this – checking for file changes every x minutes seemed like a lot of needless overhead. Thankfully the Lingon option to fire a task when a file changes is a perfect compromise.


  1. It was.