I am a former academic, turned software engineer, who thrives when tackling challenging problems and learning new technologies. I’ve demonstrated effectiveness in a broad range of software domains, including back-end web development, building hardware SDKs, and creating UX prototypes. In my previous life, my research explored ways of improving the developer experience of creating the cross-device interactions envisioned by Ubiquitous Computing.
Back End: GraphQL, RESTful API, Redis, memcached, MySQL, MongoDB, Firebase
Front End: React, Unity, Android, D3.js, QT, OpenGL
Recent Highlights
Worked on a web infrastructure team for the core Shopify web app (Typescript, React, GraphQL, Ruby on Rails).
Maintained and contributed to the build infrastructure and common libraries used by all developers working on the Shopify web app.
Maintained and expanded a C++ library that connects to prototype hardware sensors (e.g., BendShape Sensor) and provides an API for interacting with them.
Lead the development of an internal messaging library used to standardize data transmission between applications (Python, C++, C#) and across devices.
Built interactive demos and analysis tools for hardware sensors (Unity, QT, and OpenGL).
Supporting Cross-Device Resource Sharing by Encoding Relationships Between Applications
The Broker Graph project was the primary focus of my graduate work at the University of Toronto.
A description of the concepts and architecture can be found on the Broker-Graph GitHub page.
Summary
There are many options for sharing digital resources (i.e., pictures, articles, etc.) between internet connected devices. The digital location (URL) of a digital resource can be saved on shared storage services (e.g., Dropbox, OneDrive), sent via a messaging application (e.g., email, SMS), transmitted using an application that harnesses a device’s sensor-based capabilities (e.g., AirDrop, NFC), or communicated using a seemingly endless selection of other techniques.
While users have many resource sharing options to choose from, choosing between sharing techniques is difficult. There exists no one-size-fits-all approach to sharing digital resources across devices. Each technique provides a particular user experience, which may or may not be suitable for a given scenario. User’s must consider constraints such as device capabilities, which applications the devices are running, which user accounts are setup and available on each device, and which “walled garden” each relevant device, application, and file inhabits.
The goal of the Broker Graph is to improve sharing by helping users understand the patchwork of communication channels that exist between the devices in their environment, while minimizing added developer costs. This is achieved by creating a unified standard for flexibly describing the communication channels between applications and the resources (i.e., URLs) shared between them. The result is a graph data structure that encodes the relationships between and within software and hardware ecosystems. The Broker Graph was inspired by social networking platforms (e.g., Facebook, Twitter) that capture complex networks of social relationships and interactions in a machine-readable format. These platforms analyze users’ explicitly specified relationships (e.g., friends, follows) to curate massive amounts of digital content. Similarly, the Broker Graph encodes the communication channels between application instances and allows any internet connected application to share resources, register connections to other applications, and query the collection of resources shared by connected applications. Notably, this approach scales as the complexity of the web of digital relationships increases.
Conductor
Enabling and Understanding Cross-Device Interaction
Conductor is a prototype framework that supports the creation and evaluation of cross-device applications. The project was completed during my graduate work at the University of Toronto. The work resulted in a paper published in the proceedings of the SIGCHI Conference on Human Factors in Computing Systems (2014).
Highlights
Designed and implemented a set of interactions for passing digital resources between applications running on multiple devices.
Created an ecosystem of Android applications (e.g., email, maps, notepad, etc.) that demonstrated the use cases that Conductor’s cross-device interactions made possible.
Conducted a user study where participants performed a ~2 hour sense-making task using 10 tablets running Conductor applications.
PhenoBlocks
Phenotype Comparison Visualizations
PhenoBlocks is a project I worked on with Mike Glueck during my graduate work at the University of Toronto. The work resulted in a paper published in IEEE Transactions on Visualization and Computer Graphics (2015).
Highlights
PhenoBlocks is powered by a backend service that compares phenotypes (i.e., observable characteristics) from the Human Phenotype Ontology against a large dataset of patients with hereditary disorders.
PhenoBlocks provides a web interface that provides an interface for inputting phenotypes and visualizes how they compare to patients in the dataset.