September 5, 2019

As part of Truffle University's inaugural cohort, one of my recommended assignments was to submit a pull request for an open source project of my choosing. I decided to tackle a problem that I had encountered first-hand while building dApps on Drizzle: how to give a user feedback that they are on an Ethereum network that the dApp is not intended to support.

This blog post discusses two pull requests that I introduced to solve this problem by introducing a "network whitelist" configuration option.

June 28, 2019

I recently gave a presentation about decentralized exchanges (DEXs) to Truffle University's first cohort of (intermediate-level) Ethereum smart contract engineers. The 45-minute segment covers:

  • Why should we care about decentralized exchanges (as traders or as developers)?
  • What makes an exchange 'decentralized'?
  • How does Uniswap work under the hood?
  • A walkthrough of a simple code sample to use Uniswap's contract interfaces
  • A demo of my 'decentralized finance' tool: Vulcan Swap
June 6, 2017

On the final day of the Nomad Cruise (a 15-day floating conference on a cruise ship), I gave a presentation entitled “Academic Perspective on Mobility: Power, Capital, and Belonging.” The idea was to present an overview of my research topic on digital nomads, show how it fits within anthropology in general, and to get conference participants to think a bit about what “mobility” is, all without the jargon that usually renders academic discussions esoteric for outsiders.

The PowerPoint slides from the presentation are attached to the full post.

May 10, 2017

One of my clients recently came to me for help with curating content for an infinite scroll feature. The technical mechanics of how to serve content like this is pretty basic. The tough part is curating what to serve.

In this article, I explore a strategy of content recommendation called "collaborative filtering." I discuss the "cold start" problem inherent in this method, and introduce a Drupal module that I wrote to solve this in a relatively simple manner.

March 10, 2017

To understand users, we need to know how they consume content. With the rise of single-page applications and that of serving related content via infinite scroll rather than link navigation, the traditional “pageview" often doesn’t tell us enough about content consumption.

In this post, I explore an effective approach to Google Analytics infinite scroll tracking of pageviews.

March 2, 2017

We didn’t expect to buy horses when we arrived to the Mongolian capitol city of Ulaanbatar, and we certainly weren’t equipped to travel with them unguided. That didn't stop us from buying horses, rounding up gear, learning to tie a variety of knots, and guiding ourselves with maps drawn at a hilariously insufficient scale. That was all 7 years ago now.

In this post, I briefly reflect on our journey and what being a digital nomad means for dependence on "the grid."

August 25, 2016

When clients ask me about a basic analytics dashboard, the option that we usually end up going with is Geckoboard because of the simplicity and range of pre-built integrations with services like Salesforce, Shopify, Mixpanel, and Google Analytics. The trade-off is a presentation that is stylistically very basic and widgets that are limited in scope. 

August 11, 2016

I’ve recently had the chance to spend three weeks in a continuous loop of surf-eat-work in Canggu, Bali, and I can ­say with certainty that this place is poised to become a digital nomad hub. The opening of Dojo Bali co-working space is one of the primary reasons.

In this post, I explain the various roles of a properly executed co-working space as a local, physical gathering point for a digital nomad community.

August 4, 2016

When my web development partner and I realized the domain "" was available for our travel microblogging platform, we jumped at it. Unfortunately, we didn’t consider two important facts about TLDs (‘top-level domains,’ e.g., .com, .co, .me) that would end up handicapping us in the long run.

In this first post of the "Dumb Startup Mistakes" series, I talk about the importance of choosing the right TLD (top-level domain) for your business and of understanding which ccTLDs (country code TLDs) are treated by Google as gTLDs (generic TLDs).