In my last post I wrote about how I use Siri, Reminders, and an app called AnyList to manage grocery lists. I feel that this works extremely well for adding a few individual grocery list items on the fly.

However, I find it to be a cumbersome process when I'm trying to add more than a few grocery list items at once. For example, when I have a recipe for tonight's meal and I need to pick up most of the ingredients, using Siri to add each item to my list is a bit time consuming. In this case I'd rather type each ingredient into AnyList (they have a nice autocomplete feature, and it remembers your favorites), but it's still a little slow for my taste.

After getting our first iPhones, my wife and I had managed recipes in Evernote. It satisfied our needs well. If we found a recipe on the web we'd just use the web clipper and import it into Evernote. If we liked grandma's potato dish at thanksgiving we'd just use the camera to take a picture of her recipe and it would be saved for posterity. And, since we share an Evernote account we'd both have access to whatever was in there, whether we were at home cooking or at the grocery store buying the building blocks for our culinary masterpieces. 

So, Evernote was working just fine. But, I can never leave well enough alone, so when I read about The best recipe manager for iPhone on I decided I'd give Paprika a try.  And I liked it.

Since that article summarizes Paprika so well I won't do that here, but I will point out some of my favorite features:

  • Importing recipes from websites extremely easy. It's nearly automatic if you're browsing a popular food site (eg, allrecipes, foodnetwork, epicurious, etc), and with minimal effort you can import recipes from more obscure sites.
  • All recipes are formatted with the same way. That consistency is kinda nice.
  • Everything is synced between our phones, iPads, and desktops (this does require buying mobile and desktop versions of the app).
  • And, coming to the point of this post, it's really helpful for grocery lists.

As I said in my last post, I like to use Siri and an app called AnyList to manage my grocery lists. Paprika works well with my system by letting me export ingredients from a recipe into a Reminder list, which then gets automatically sent to AnyList. To make this work you first need to go to Paprika's settings, select the Reminders Export Options, and set your list name to the one you use in the Reminders app (in my case it's named "Grocery").


Then, when you're looking at a recipe, click the shopping cart icon.

This will bring up a list of ingredients from the recipe. Leave the ones you need checked, and uncheck the ones you already have. Then click the "add" button. This will maintain a grocery list in Paprika (which actually could be enough for a lot of people's needs).


To work with my Reminders / AnyList system, I next go to the grocery list part of Paprika, hit the export icon in the lower right hand side of the screen, and choose the "Export to Reminders" option.







This will send the list to my grocery list in Reminders, and it'll ultimately end up in AnyList (see my previous post for more about that).

One thing to note - exporting your grocery list to Reminders won't affect the list in Paprika. As a consequence, the next time you add a recipe's ingredients to your list the old ingredients will still be there, which you probably won't want if you've already bought those items and made that meal. To avoid this, I'd recommend clearing the grocery list after your export (this can be going through the same steps above but choosing the "Clear Grocery List" option).

As I type this out step by step I feel that it sounds really complicated. It really isn't, as this video will hopefully demonstrate.


So, whaddaya think? How go you manage recipes and grocery lists?

AuthorTodd Zarwell
10 CommentsPost a comment

I like Siri. It's far, far from perfect, and I think people hold it to a very high standard (it's easy to do when your basis for comparison is human intelligence). But there is a limited set of things that it does do well, and I find those things extremely helpful.


Set a timer for 10 minutes (so I can kick the kids off my iPad).

Remind me to bring Drew's snowpants to school on Monday morning at 6:30.

Remind to place that order when I get to work.

Basically, it supplements my brain and helps me remember things I'm almost certain to forget.

Perhaps my biggest use of Siri, however, is managing grocery lists. This helps me in innumerable ways, which I will now outline. In a numbered list.

  1. I never forget to add something to a list. I use the last of the peanut butter, I pull out my iPhone, hold down the home button, and say "add peanut butter to my grocery list". Bam. Not gonna forget the PB.
  2. I always know what I need when I'm at the grocery store. I never have that nagging feeling that I'm forgetting something, and I never get home and kick myself for neglecting to pick something up. And my six year old never has to reprimand me for forgetting to pick up his apples.
  3. I always know what my wife needs at the grocery store, and she knows what I need. I might just stop in to buy donuts on a Sunday morning, but a quick look at my phone let's me know that Lisa just used the last of the garlic powder and I might as well grab that too.

Now, there's a few things that make this easier.

First of all, I have a list that's named "grocery". To do this, open the reminders and hit the "+" button to make a new list. If you open the reminders app and don't see the "+" button you might need to tap the area at the bottom of the screen that looks like a bunch of stacked index cards.

If you're looking at a list, click the bottom of the screen to see all your lists - and get the option to create more lists.

If you're looking at a list, click the bottom of the screen to see all your lists - and get the option to create more lists.


To share with your spouse, go into your newly created grocery list and click the edit button. Then click the Sharing opinion, then Add person.., and find the person upon whom you'll bestow your list sharing privileges.





This all works very well, but we decided to take it to another level with a third party app called AnyList.  AnyList has a number of nice features, including:

  1. It separates your grocery list into groups such as "produce" or "meat" or "dairy". That way, when you walk through the grocery store, you can get everything you need in each section without having to repeatedly zigzag  back and forth throughout the whole store.
  2. It also has the option to share with a spouse and sync with desktop and browser apps.
  3. And, for my favorite, it can import lists from the built in Reminders app. In my case, from my Grocery list. This has the awesome result of letting you use Siri to populate your AnyList list. To import from Reminders, go to AnyList's settings and turn the "Reminder's Import" option on. Just make sure the name of your list in AnyList matches the name in Reminders (in my case they're both named "Grocery")


By the way, the things I'm describing here don't have to be limited to groceries. I've followed this exact same process to make a Target list, a Home Depot list, and a Costco list.  

Here's a short video on how I use the lists. The one thing that I don't include is perhaps the most useful feature of all: The fact that all these additions are almost immediately present on my wife's phone as well.


In my next post I'd like to talk about something very closely related to groceries: recipes. Stay tuned.

AuthorTodd Zarwell
9 CommentsPost a comment

I decided I wanted a quick easy way to keep track of my EyeDock business expenses. I don't have a lot of expenses, it's mostly just software utilities to help me work more efficiently. Accounting software can do this of course, or I could just keep a spreadsheet. However, I wanted something that would be even faster to add entries and reference, even from my phone.

I decided to just maintain a text folder in Dropbox listing my expenses. The text file could be viewed or appended to in any number of iOS text editors such as Elements or Byword

However, to make things even easier, I once again made use of the Drafts app.  Drafts allows you to quickly enter some text and append it to a Dropbox document, which will work well for our needs today.  I wrote more about the Drafts app a while back so I won't dwell on its other features here.

To make a Dropbox action, click open the app and hit the settings icon (the gear). Scroll down to and click Dropbox Actions, then click the plus sign at the top to create a new action.



Give the action a name (I called mine EyeDock expenses), tell it the path to your text file. I have an EyeDock folder in Dropbox, and I decided to nest a 2013 folder in there so I can separate my expenses each year. The actual file name is expenses, and it's a text (.txt) file.

Setting up a Dropbox action in Drafts

Now, I can open up Drafts, type the date, the payee, the expense type, and the amount. When I'm through I click the EyeDock expense action I created and my text is appended to the expenses.txt file in Dropbox.

Entering text in Drafts and selecting the EyeDock expense action 

However, this is still too much work for me (I'm lazy). I don't want to have to enter the date - my phone already knows the date, why can't it do it? I only need a few categories, and I don't want to have to type them in. This sounds like the perfect place for Textexpander. If you're unfamiliar with Textexpander, it essentially allows you to create system-wide text macros. So, if you're sick of typing in your address, you can assign a text trigger, such as ".address", and every time you type that it'll insert your address. The macros you make on the Mac can sync (via Dropbox) with your iOS device, which can come in very handy.

Textexpander got even more useful a while back when they added fill-in snippets. They describe fill in snippets like this:

You can add fill-in fields to a snippet to make it easy to create customized boilerplate text at the time you expand an abbreviation.

I made a fill in snippet to automatically enter today's date, a blank field to enter a payee, a list of expense types (software, advertising, hardware), and a blank to enter an amount. I set the trigger to be ".exp", for "expense".

It looks like this, if you're interested:

 %m/%d/%y, %filltext:name=payee%, %fillpopup:name=type:default=software:advertising:hardware: %, $%filltext:name=amount%

So, I open Drafts, type ".exp", and it immediately takes me to the Textexpander fill-in. The date is already there, I type in my payee, select the type, and enter in an amount. I hit Done and return to Drafts. I hit the EyeDock Expense Dropbox action and I'm done.

Using a fill-in form in Textexpander

The output of the Textexpander fill-in snippet in Drafts

Opening the expenses.txt file in Dropbox I can see that the text was appended to the end of my document appropriately. 

The text appended to the expenses.txt file in Dropbox

In this case I'm basically creating a no-frills ledger. I like working with a simple text file because it's easy to open, read, and append to. However, the file is essentially a comma separated volume, which means that I can at any time change the extension to .csv and open it up in a spreadsheet. This might be helpful at the end of the year if I want to quickly SUM the expenses column.


Next I'll show you how I enter expenses while using my laptop.



AuthorTodd Zarwell

As I've mentioned in previous posts I've really been trying adopt a paperless lifestyle. My Fujitsu Scansnap scanner and software like Hazel are sure making that easier.

I feel I've become very efficient at dealing with the paper that comes into my house, and whenever I get an email receipt I print to PDF and file it away. 

Many of my financial institutions have asked my if I want to be paperless. I've always said yes and, when I select that option, the stop sending me paper statements. I feel good about saving the trees, but there is a downfall: I don't have copies of these statements for myself. Sure, they're available online, but I've found I'm too lazy to undergo this process:

  1. Go to my bank's Web site
  2. Type in my username and password
  3. Navigate to the "documents" page
  4. Download the statement
  5. Repeat steps 1-4 for every IRA, student loan, college savings plan, mortgage, and car loan

In the end, just the process of logging in to all these sites was a chore, and I was finding myself wishing they just came in the mail so I could stick them in the scanner and be done with it.

I wanted to find some way to automate this process, at least simplify the whole ordeal of logging into 6-7 websites. I thought this might be a good job for Keyboard Maestro

keyboard maestro icon

Keyboard Maestro is something I'd been aware of for quite a while, but I never had a good understanding of what it actually did. In my limited understanding it was a way to create keyboard shortcuts. While I like keyboard shortcuts, I have a really tough time remembering most of them and the idea of adding more didn't sound very appealing. 

What I didn't understand is that Keyboard Maestro is a tool to create macros. Typing, clicking, opening programs and files, appending text, etc etc. You can string together multiple combinations of these things makes it a very powerful tool to automate repetitive tasks.

1Password logo

Of course, it wouldn't be a good idea to display all of my passwords to my financial institutions in a program like Keyboard Maestro, so I thought it would be helpful to add 1Password to the recipe. I've mentioned 1Password before, but, if you're not familiar with it, this is a great utility for managing your passwords. It allows you to use secure passwords (such as yas^hjr$@ds7) and access them with a master password. 

Alfred icon

The last ingredient is Alfred. Alfred is a program launcher and so much more. I feel an app like this, or something comparable (like Launchbar or Quicksilver), is indispensable. 

The cool thing is, Alfred and 1Password work very well together. If you're logged into 1Password you can do things like this:

  1. Click the keyboard shortcut to open Alfred - in my case, command-space
  2. Start typing the name of a website, eg) wellsfargo
  3. Select the search result for 1Password: Wells Fargo - the one you want is usually the first result and you simply have to hit enter to select it.
  4. Sit back while Alfred and 1Password open your browser window, navigate to the website, enter your username and password, and log into the site.

So, putting these things together, I created a Keyboard Maestro workflow that looks like this:

To initiate it, I first make sure I'm logged into 1Password and then I like to open a clean browser window. Then I press the trigger hot key I assigned to this macro, control-option-command-B (B is for bank).

Keyboard Maestro starts with the first step, which is typing the control-space keys. This is my keyboard trigger to open up Alfred. On step two the text "wellsfargo" is pasted into Alfred. It is assumed that the top result will be the 1Password "open up and log into" action, so the macro will press the enter key to select it. Then, as described above, 1Password will log me into the 

This may seem like a lot of work to log into a website, but the fact that it scales well becomes very helpful. By simply copy-and-pasting these four steps 6-7 times I can change the text in step two to all of my other financial institutions: "wells fargo dealership services", "", "ING Direct", "student loan servicing center", etc., etc,.

I created a little pause in step 4 to give give Alfred / 1Password time to log in. The macro doesn't wait for a page to load before moving on to the next step, so I wanted to make sure it had time to load the site, enter login credentials, and hit "submit" before proceeding.

So, now I set up a monthly reminder to download my bank statements. When it pops up, I log into 1Password and hit my keyboard trigger, then sit back and watch while I'm logged into six or seven websites. When It's done I click each tab, manually download my statement, and let hazel sort them into their appropriate folders by kind and date.

Is it perfect? No, sometimes a page doesn't load fast enough and I don't get logged in. However, in this case, all I need to do is click the 1Password extension in my browser and it logs me in.

Could this be better? Maybe. I originally created a much more involved macro that was customized for each site. It would search the page for the text, right-click it, choose "save as", navigate the finder to the appropriate folder, etc. It required a lot of precision and it also required the sites to not change their layouts. It was kind of like tumbling dominoes: Everything had to be perfect, and if one thing went wrong everything from that point onward wouldn't work. 

Some might still argue that this is too much work for what you get out of it. However, it's keeping me from putting off the task of downloading bank statements like it used to. Plus, it's nerdy, which is always a good thing.

AuthorTodd Zarwell

I've had a big first world problem over the last few years.  I work within a big clinic system and, like many large companies, our computer environment is locked down by our IT department. For me, this means I can't install or upgrade programs, use browser add-ons, or even visit certain websites (although there's no rhyme or reason to this - some seemingly innocuous sites are inexplicably banned while others, like FaceBook, are OK.  And no, I haven't even tried visiting the, er, red light district of the web from my work computers). Worst of all, I have no choice over my platform or browser. This means I live in a Windows XP / Internet Explorer 8 purgatory. 

The thing is, I'm not even asking for much.  When I'm at work I expect to work.  I'm not looking to play Farmville while my patients wait for me.  I just want to do the some normal day-to-day things that I dont feel are unreasonable, such as checking my Gmail account or creating spreadsheets or documents in Google Docs. However, activities like these result in so many freezes, crashes, and lost emails and documents that I've found myself avoiding doing anything productive when I do get a chunk of free time.

Then I had a revelation - I can't install another browser, say Chrome, on my work computer, but could there be another way to run it on that computer?  I recalled hearing about the existence of mobile versions of Chrome and Firefox, and I decided to give it a try. First, I downloaded the portable version of Chrome from to a USB flash drive..  Then, I unpackaged it, which turned to to be a little tricky because my work PC doesn't allow for the installation of applications, and my home Mac won't open a Windows application.  Fortunately I had a really old Windows laptop in my basement - I pulled it out, fired it up, and unpackaged the application on my portable drive (all the time wondering how on Earth I ever built my website on that thing!).

The next day I went to work, plugged in my USB stick, double-clicked the browser, and . . . it worked perfectly!  To be honest, I didn't expect it to. I thought my work computer would block the application from even opening. But it didn't, and I can't tell you how happy I've been. It runs like butter and hasn't crashed or even slowed down once.  Even more exciting, it syncs with my home browser so all my bookmarks (and bookmarklets) are present, and I'm even able to use some of my favorite browser extensions.  Furthermore, every time I boot up Chrome it opens up the tabs that I had open the last time I used it. I feel like I've been driving a work truck that wasn't allowed to go over 40mph and I was just upgraded to a, uh, really fast car.  I no longer have to use the Internet like an animal.

Look - A flash drive shaped like a key!

Look - A flash drive shaped like a key!

Since I work from multiple locations I put my flash drive on my keychain - that way 1) I'll never forget to bring it and 2) I won't accidentally leave it in a work computer when I leave.

Now that I had a little taste of browser bliss, I wanted more. When I'm at home I've become very accustomed to using 1Password.  Using the browser extensions it let's me easily (but securely) use strong passwords to access all my websites. Without having that on my work browser I've had to:

  1. pull out my iPhone an open open it
  2. open up the 1Password app (it syncs with my laptop via Dropbox)
  3. enter my 1Password password (and sometimes a second password)
  4. look up the password I want
  5. manually type it into the form on my computer (and we're talking about long passwords here)

And then, I discovered 1PasswordAnywhere, which is the perfect solution if you use Dropbox syncing with 1Password. Simply

  1. Log into the Dropbox website from the portable Chrome browser
  2. Open the 1Password.agilekeychain folder and then 1Password.html

. . . and you effectively get a 1Password app right there in your browser window! By entering your password you can view all of your logins and whatever secure information you've stored there. it's easy to copy a password and then paste it into a logging form in another tab.

In the end, I still miss the workflows, the shortcuts, the utilities and software that I have on my powerful home computer. However, being able to choose and customize my browser sure has made me a happy guy.

AuthorTodd Zarwell

I've written a couple posts about using online services to automate tasks like creating RSS feeds from a site that doesn't provide them and using IFTTT to keep a journal.  Another popular tool for web automation is Yahoo Pipes.  From the Pipe's homepage:

Pipes is a powerful composition tool to aggregate, manipulate, and mashup content from around the web.

It may be an over-simplification, but Yahoo Pipes essentially grabs content from the web, usually in the form of RSS, and manipulates it in ways that you tell it to.

The problem to solve

I want to find out when new iPhone apps come into the iTunes store that might be of interest to me as an optometrist.  I sometimes read about new ones in my journals or, more likely, on my social networks.  However, maybe I want to be the FIRST person to hear about the latest and greatest eye care app.

A solution

Apple has a page on their site that allows you to create RSS feeds to alert you when new media becomes available in iTunes.  It lets you do some customization, so I created an RSS feed that would be populated with new IOS apps.  I customized it like so:

I decided to find apps in all genres.  An optometry app might be listed as medical, but when I submitted my apps I also considered listing them as reference or utility.  

Clicking the Generate button will give you an RSS feed URL:

Copy this to your clipboard.

However, there was some pretty severe limitations on how much we were able to customize this feed.  If you plug it into you favorite RSS reader (like Google Reader) you'll get probably get 250 listings for fart apps.  So, how can we customize this further?  Why, Yahoo Pipes, of course!

Go to Yahoo Pipes, log into your Yahoo account, and "Create a new pipe".  On the Pipes Editor page, drag the Fetch Feed resource from the left hand column into the workspace. Note:  If you're not seeing this column click the arrow button on the left hand side of the page (see circled item below).

Paste the iTunes RSS URL into the text box in the Fetch Feed window.  To test the feed, click on the top of this window (it'll turn gold as it is in the image above) and the content of the feed will show up in the pane at the bottom of the page.  It's working, but there's a lot of apps unrelated to eye care!  We need to filter these results.

So, we go back to the tools in the left hand column and find filters - it's under the operators heading. Drag this tool under your Fetch Feed window.  We need to conned everything, so drag a  from the circle on the bottom of the Fetch Feed window to the circle on the top of the filters window - this will create a "pipe" connecting the two.  Do the same thing from the filters window to the pipe output window.  

Now, let's add some filters. We'll have better results if we try permitting things that are eye care related than if we try to block all the things that are not eye care related, so we'll choose the permit option.  Make sure you choose the any option  - if you make a lot of rules it's unlikely that any of the feeds will meet all of them, and consequently nothing will pass through your filter. For my first rule I decided to permit items where the description contains the word optometry.  By clicking the (+) button I added similar filters for the words optometrist, ophthalmology, and ophthalmologist.

By clicking on the Pipe Output title you can see the results of your filter.  I did this and . . . got nothing.  Well, that's not totally unexpected - what are the odds that an app was released today with one of those keywords?  I decided to add a few more and came up with this:

I clicked the Pipe Output again and . . . got a hit!  The App For Learning Optics app passed through my filter.  Not only did something get through, it's fairly relevant!  Note: your results may vary depending on what is coming through the RSS feed when you test it.

Google Reader button

Google Reader button

So, what should we do with this?  Give it a title (Optometry Apps RSS), hit the save button, then click the run pipe link.  This will take you to another page that shows the results of your pipe. It also gives you the ability to get the filtered data in multiple ways, including as an RSS feed.  I chose the Google Reader button and added it to, er, Google Reader.  When I go to Google Reader I see my Optometry Apps RSS feed complete with the result that made it through my filters.   Even better, it shows up in Flipboard on my iPad since I've connected that to my Google Reader account.

If you don't want to repeat this whole process, feel free to use the feed that I've created.

This was really meant to be an exercise in using Google Pipes and RSS (i'm not really desperate to immediately find out about new optometry apps).   But, is this practical or useful?  Only time will tell.   I'm not sure if my filters will catch the  IOS apps that I want it to.  It really depends on how well I set up my filters, which I'll probably have to experiment with for a while.  

Oh, for extra credit: If you really, really want to be the first person to find out about new IOS eye care apps, you could take this RSS feed and use IFTTT to alert yourself with a text message when a new app pops up in your feed. Or, get really creative and have a light turn on in your house.

AuthorTodd Zarwell

About a month ago I wrote a post about how I was using IFTTT to keep a journal about cute things my kids say and do. A couple weeks later one of my favorite podcasts, Mac Power Users tweeted that they were looking for interesting IFTTT recipes for an upcoming show.

I wrote David Sparks a short email about how I'm using IFTTT web automation to keep my journal. Lo and behold, they actually mentioned it on their show - It's at about minute 55. David even calls me a "smart guy" at the end. That's kinda the nerd equivalent of having Aaron Rodgers say "nice arm" after watching you toss a piece of paper into a wastebasket.

So, I'm kinda famous.

AuthorTodd Zarwell

I've posted a few times regarding how I enjoy finding ways to automate little tasks. However, this can have a downside. David Sparks recently relayed an example of this on his MacSparky blog.

I have a similar story. A long while back I decided to divert all the email from my EyeDock website into my Gmail account. I liked the idea of only opening one email account, and I liked Gmail's tools much better than the web panel my hosting site gave me for managing email. I simply grab the email via POP3 and filter it to skip the inbox and apply an "EyeDock" label.

However, I initially got a little label crazy and created about 6 different EyeDock labels (EyeDock, EyeDock:subscriptions, EyeDock:companies, etc.). I decided I was making making my life more complicated than it had to be. After all, when I want to find an email I rarely use the labels anyway because Gmail is just so searchable. So, I eliminated some of my extraneous labels and simplified my life.

As the next month went by something seemed a little off, but I couldn't figure out what. And it seemed different in a good way: I had more time in my evenings to work on the things I wanted to. However, I eventually received a couple messages from people stating that I hadn't responded to their emails (which is odd because I've prided myself on making great efforts to reply to my EyeDock users). When I searched Gmail for their previous emails I found them, but they were not in my inbox and they didn't have any labels.

I realized that I'd made a mistake. I originally was filtering all emails that were originally directed a specific EyeDock address into a specific Gmail label. It was working well ... until I deleted that label. I guess I assumed that, if the label didn't exist, the emails would show up in a parent folder or at least in the inbox. Nope. Instead they were just sent to the magical land of "archive".

So, I searched for all the messages that were sent to that email address and found about 60 of them. These were questions and concerns that were directed to my business and I'd never replied = really horrible customer service.

I went through the missed emails, one by one, tried to address their concerns, and profusely apologized (I made a TextExpander snippet to help with that).

I learned my lesson: Automation is great, but you really need to be careful. It always does what it's told, but you need to make sure it's doing what you intended. If not, you might negate all the time you saved - and then some.

AuthorTodd Zarwell