You can find all of my projects at GitHub. I work primarily on the Salesforce platform and in Python.


Amaxa is a multi-object ETL tool/data loader for Salesforce. It’s designed to extract and load whole networks of records, like a selected set of Accounts with all of their Contacts, Opportunities, Contact Roles, and Campaigns, in a single repeatable operation while preserving the relationships between those records.

Core use cases for Amaxa include sandbox seeding, data migration, and retrieving connected data sets.


CircleCI codecov

A SEPTA Regional Rail train tracker for Salesforce Lighting. Why? Because it’s an interesting test-bed for new development tools and techniques, including Salesforce DX, Apex support, and continuous integration with SFDX and CircleCI.


CircleCI codecov

Note and attachment importing support for Salesforce - add rich-text notes with the Data Loader. This package abstracts the complex content preparation required and helps to avoid unpredictable ContentNote exceptions.

CircleCI codecov

A tool to compare and deduplicate divergent file trees, especially with different organization or hierarchy levels.


A Python tool to convert 15-character Salesforce Ids in a CSV file to 18-character Ids.

SFDX CircleCI Examples

A repository of examples showing how to apply CircleCI and Salesforce DX in a continuous integration workflow for Salesforce, including demonstrations of testing against multiple org shapes, using PMD static analysis, and applying the Lightning Testing Service.

SFDX with simple_salesforce

A demonstration of using Salesforce DX to execute integration tests against Salesforce scratch orgs for a Salesforce API client written in Python.

Trapeza and Trapeza-Import

These Python-based tools are designed to facilitate the manipulation and combination of record data in tabular form - in particular, CSV files containing database output. Trapeza-Import is designed to streamline the importing of large amounts of records into a database by matching duplicates in user-configurable ways. Originally designed for use with Blackbaud Raiser’s Edge.

bouncingbots — a Ricochet Robots Solver

This C library implements a simulation and solver for the board game Ricochet Robots. Included are the library, a command-line tool and a rudimentary Mac OS X interface. Supply a board layout, in a fairly simple text format or using the GUI tool, and bouncingbots will offer a list of solutions.