Software: Python, SQLite
Description: A Python tool for making incremental, offsite, offline backups using intermediary hard drives. Created for backing up large datasets that are too big to transfer over the network. It performs hash verification and persistently tracks data transfer progress, allowing you to incrementally move data from one location to another with minimal user input. See this blog post for a detailed explanation.


Maskymxyz gif Software: Javascript [Turf.js, OpenLayers, Shapefile-JS], Nginx, Debian
Description: A browser-based tool for anonymizing sensitive point data using geographic masks. It’s easy to use and entirely client side, and also works as an excellent educational tool for learning about spatial data anonymization and web GIS.


street masking algorithm Software: Python [Geopandas, OSMnx, Shapely, Networkx, Multiprocessing]
Description: A Python package for performing geographic masking. While it supports donut geomasking, it’s signature method is Street Masking, a method I designed that leverages Open Street Map data to make strong spatial data anonymization easier than ever. MaskMyPy also includes various functions for measuring privacy protection and information loss.

Strava O-Auth Server & Website

Runnerstudy website Software: Python [Flask, Requests, Psycopg2, Twilio, gevent], PostGIS, Nginx, HTML/CSS, Ubuntu
Description: As part of a research project into the route preferences of trail runners on Strava, I developed and deployed a server using Flask, Python, PostGIS, and Nginx that retrieves, processes, and updates geospatial user data from study participants’ Strava profiles via OAuth. I also added an SMS API so that project collaborators could easily check recruitment progress.

VANDIX Calculator

vandix gif Software: Python [Geopandas, Pandas], Docker
Description: The Vancouver Area Neighborhood Deprivation Index (VANDIX) is a census-based measure of socioeconomic deprivation that has been used in academic studies across Canada. However, as a measure of relative deprivation, my colleagues and I found ourselves spending far too much time recalculating it for various geographies across Canada. To save time for everyone, I wrote a and Dockerized an interactive Python script such that anyone can quickly recalculate the VANDIX regardless of their preferred platform or development stack.