How I Created A Robot Researcher With Zapier, Evernote and DuckDuckGo

An idea I’ve been noodling for quite some time (going back several years to my junior year at TCU) is a tool that automatically researches topics in the background for you. One such tool existed for a brief period of time, Dunno, but the company now appears defunct.

Earlier today, I decided to take a stab at setting up a complex multi-step zap in Zapier that would tie into Evernote to pull the subject and post the result. I figured DuckDuckGo would have some sort of API to access their instant answers and found that they do indeed. Zapier’s Code action allows you to run Python code, but doesn’t allow you to import additional libraries. To work around this, I found Mashape (listed on DuckDuckGo’s API page) fully sufficient.

The implementation details are below:

#1: Create a trigger to watch for new notes in a specific Evernote notebook.

#2: [Optional] Create a filter to only proceed with notes bearing a specific tag. You can skip this if you want the zap to run with any new note added to a certain notebook.

#3: Create a code action to fetch the DuckDuckGo results as JSON. I used Python. Sample code below.

query = input_data[“note”].replace(” “,”+”)

request_url = “” + query + “&skip_disambig=1”

response = requests.get(request_url,
“X-Mashape-Key”: “YOUR_KEY”,
“Accept”: “application/json”

output = response.json()

#4: [Optional] Create a code action to compile a link to launch a DuckDuckGo search for your topic. I create this mostly for convenience; if I wanted to dig further into a topic, I could easily click the generated link. Sample code below.

query = input_data[“note”].replace(” “,”+”)compiled_link = “” + query

output = [{‘search_link’: compiled_link}]

#5: Create an action to append the results to your note (or create a new note with the results).


I have a long list of topics I am idly interested in. I created this automated researcher to help feed those curiosities. If, after reading the results, the topic continues to pull on my mind I am free to devote my time to researching it deeper. If not, I can just file it away with the result included in case I ever want to look it up again.

I’m aiming to create a similar task using the Email Parser trigger to let me email topics to my automated researcher and have it save its results to a new Evernote note.

Google Cloud Platform OAuth Redirect URI Error Resolution

While working on installing an Apps Script to a Google Sheet, one step in the instructions required me to add the script project’s redirect URI to the list of authorized OAuth URIs in the supporting GCP project. Despite being the owner of the project, GCP refused to save my update to the authorized redirect URIs list, presenting me instead with this super informative error message about not having permission to perform the action:

I scoured the internet for an answer and came up with nothing even close to helpful. At my wit’s end, I decided to give a shot to just creating credentials for a second web application within my GCP project, inputting the necessary redirect URI from my Apps Script project. Lo and behold, this worked and I was successfully able to complete my implementation of the aforementioned script.

The steps are straightforward, but if you do encounter an issue with saving an update to your list of authorized redirect URIs for a web application in GCP, here they are spelled out:

On the “Credentials” page for your GCP project, select Create credentialsOAuth client ID.

Fill out the form to create a new client ID, with “Web application” under Application type, some relevant name and the authorized redirect URI you need to use. Click Create and you will be given a client ID/client secret pair to use as needed.

I hope this post helps shorten your search for a solution if you ever encounter this permissions issue!

Producing A Video On iPad

Among several projects I’m kicking around is a YouTube channel sharing apps I like and other things relevant to computing platforms. Today, I published my first video on the channel.

It was very spur-of-the-moment. I was checking out watchOS 3—which I wasn't able to try as a public beta unlike iOS 10—and began composing a tweet about the app launch speed improvements in the update. I thought about attaching a video to the tweet, so I pulled up the camera on my iPad Pro that was propped up in front of me.

I took a few takes of me jumping around apps on my Apple Watch until I was satisfied with the composition. When I played back the video, I didn't like the background noise that had been picked up. So, I popped into iMovie and silenced the video. Flicking through the audio options, I picked a pleasant background score and edited it to fade out toward the end of the video.

As I exported the video to my camera roll, I thought I might as well upload it to the aforementioned channel. The result is here to watch.

The entire process took less than 30 minutes from start to finish. This speed and simplicity is one of the things I love about working on iOS.

Planet Money: The Podcast I Recommend Most

I’m considering publishing a Medium post about how NPR’s Planet Money deeply impacted my world-view. Whether you have a long list of podcast subscriptions or have never listened to one before, I recommend giving Planet Money a shot.

Simply put, each episode discusses some way money, trade and economics impact our world. If that sounds boring, trust me and give it a shot. Heck, scroll through their catalog of episodes and find the one that most piques your interest. The episodes are short—and absolutely fascinating and educational.

Planet Money taught me a lot. I think you might find it useful—or simply interesting—too.

P.S. If you own an iOS device, I recommend Overcast as a podcast client.

Website Updates on iOS

If you follow me on Twitter, you may have noticed a little tweetstorm I had earlier tonight as I made some updates to my website.

While the homepage at is a pretty basic and lightweight page, I have a tendency to go a little nuts over the details on it (have a look at the source and stylesheet). I’m therefore happy that I was able to complete every task for the edits to my satisfaction on my iPad.

To start, I saved the logos for each company/service to Photos and then pulled them up in Pixelmator to get the hex codes for their dominant colors using the color picker for the brush tool. I used these hex codes to give the links a sense of character and relevance to their destinations.

I used Drafts as a Slide Over app to drop notes, like the aforementioned hex codes.

I grabbed copies of my website assets from my cloud storage using Documents, sending them to Transmit for management and Coda editor access.

I did the bulk of my code editing in Coda (I made some minor tweaks in Transmit’s built-in barebones text editor). Coda has some great syntax highlighting and preview features, though it has frustrating backspace and cursor movement behaviors.

Finally, I uploaded my assets via FTP to my host using Transmit, whose drag-and-drop uploads and permissions management I absolutely love.

Check out the end result.

Markdown Tables in Ulysses on iOS

After hearing much about Ulysses from people whose opinions I trust, namely Federico Viticci, I decided to give it a try for a writing project. This post is a slight distraction aside in the midst of that project.

As I was writing, I figured it would be best to lay out some data in a table. Unfortunately, the Markdown variants supported by Ulysses don’t support a MultiMarkdown-like syntax for tables.

That’s where iOS comes in. More specifically, that’s where Workflow shines. I figured I could meet my needs using a combination of a Workflow action extension and Ulysses’ Markdown XL raw source syntax (~…~). The Workflow I created takes Markdown-formatted text, converts it to HTML and places it on my clipboard. While I aim to use it to create HTML tables, you could technically use this workflow in any instance where you need to convert Markdown to HTML via an action extension.

Here’s how it looks:

  1. I create a MultiMarkdown-formatted table.

    Screenshot of a sheet in Ulysses with a block of MultiMarkdown table-formatted text.
  2. I select the block of text and hit the share button.

    Screenshot of a sheet in Ulysses with a block of MultiMarkdown table-formatted text selected, displaying the iOS text action pop-up.
  3. I run the workflow.

    Screenshot of the Workflow action extension running my workflow to convert the MultiMarkdown-formatted text to HTML code.
  4. I paste and replace the text with the HTML code on my clipboard.

    Screenshot of a block of HTML table code, which was pasted from the clipboard to replace the MultiMarkdown-formatted table text.
  5. I wrap the HTML code with Ulysses’ raw source syntax (~…~)

    Screenshot of HTML table code wrapped in Ulysses’ syntax for raw source.
  6. Voilà.

    Screenshot of a formatted HTML preview of the Ulysses sheet, displaying the table code rendered appropriately.

Transferring files to and from Pythonista

Pythonista is a fantastic iOS app—one that really pushes the boundaries of what iPhones and iPads are capable of doing. However, due to Apple’s restrictions, developer Ole Zorn can’t include any kind of file syncing for scripts within the app nor can he add Pythonista to the system share sheet as a destination for files.

There is a work around, though: copy and paste this script by Ole into Pythonista, then run it. The script creates an FTP server that is accessible over your local network. You can then use Panic’s excellent Transmit to transfer files to and from Pythonista on the same iOS device.

Introducing Chronicles

Hello! Thanks for visiting Chronicles, a new blog I am launching to talk about personal projects I work on and share anything useful I find in their pursuit.

From the time I first began browsing the internet to the time I’m writing this blog, I’ve always loved finding resources that helped me learn interesting and useful new things. They did so because they were accessible—delivering their content in simple and direct language, and bearing designs that were easy to understand and navigate.

Getting this blog up and running was more than a little frustrating at times (a story for another time), but I’ve modified my WordPress installation to make accessing this blog fast and efficient out of the gate. As time moves forward, I expect to make more such modifications to improve different aspects of the user experience.

I make no promises about how frequently I will post here. The best way to keep up with me is to follow me on Twitter. That’s where you’ll see my blogs from Chronicles and other platforms pop-up too.

Thanks for your time and attention,