Software
This is a showcase for some of my personal software projects. You can find out more about my professional accomplishments on LinkedIn.
- Magic GPX Editor
- Storage Performance
- MiniAASM
- Alpaca Desktop
- Forward Proxy
- React Instagram Feed
- Gomem
- Cloudformation Cheapest NAT
- Gohack
- Call Graph
- Lisp
- Nebula
- Scorched Earth
- Garmin Connect Import
Magic GPX Editor

After volunteering for New Zealand Land Search & Rescue for a time - I had to maintain lots of maps. I built this to manage tracks, and points of interest for my devices. I’ve put it on the Apple app store for people to use. It launched at #1 paid app for the travel category on the New Zealand store.
Storage Performance

After wasting time trying to get external storage drives to perform at the advertised speed, I built Storage Performance to encompass my debugging workflow. It lists a device tree to inform users of the USB speeds reported by MacOS and runs benchmarks and reports against the theoretical limits. I’ve put it on the Apple app store for people to use for free. It launched at #8 paid app for the utility category on the New Zealand store.
MiniAASM
aasm do
state :transmitting, initial: true
state :waiting_confirmation
state :terminated
event :work_succeeded do
transitions from: :waiting_confirmation, to: :transmitting
transitions from: :transmitting, to: :waiting_confirmation, guard: %i[hold?]
# ...
A Finite-state machine library intended to be compatible with lightweight implementations of the Ruby language using 100LOC and only standard libraries. Inspired by Heroku Postgres State Machines.
Alpaca Desktop
Experimental OSX menu bar widget for Alpaca (a local proxy supporting NTLM authentication for command line tools). Built to reduce toil involved in installation and configuration for several hundred engineers.
Forward Proxy
$ forward-proxy --binding 0.0.0.0 --port 3182 --threads 2
[2021-01-14 19:37:47 +1100] INFO Listening 0.0.0.0:3182
[2021-01-14 19:38:24 +1100] INFO CONNECT raw.githubusercontent.com:443 HTTP/1.1
Minimal forward proxy in 150LOC and using only standard libraries. Useful for development, testing, and teaching. Automated tests simulate a range of destination scenarios including slow network, stream responses, and X509 certificates.
React Instagram Feed
Simple React component to render a Instagram feed. Used an unofficial client-side integration method to avoid having to use a server-side access token. Archived as a result of Instagram fixing their Cross-Origin-Request policies. I used this to learn Reach and ironically it was then used by educational institutions to teach React before being archived.
Gomem
import "github.com/jamesmoriarty/gomem"
// Open process with handle.
process, err := gomem.GetOpenProcessFromName("example.exe")
// Read from process memory.
valuePtr, err := process.ReadUInt32(offsetPtr)
// Write to process memory.
process.WriteByte(valuePtr, value)
A Go library to manipulate Windows processes. Useful for developing process memory based security exploits. Automated tests manipulate and verify its own process memory via Windows APIs.
Cloudformation Cheapest NAT
Cloudformation for a NAT auto-healing instance running on Spot. Featured in Last Week In AWS.
Gohack
Experimental Go language CSGO computer game exploit. Automated tests use stubbed external processes to avoid needing binary compatibility.
Call Graph
A Ruby library to capture execution and create call graphs. Useful for illustrating Law of Demeter violations.
Lisp
$ lisp-repl
ctrl-c to exit
> (begin
(> (define incf
((> (lambda (x)
(((> (set! x (+ x 1))))
(> (define one 1)
(> (incf one))
2
>
Minimal Lisp interpreter in 75LOC in Ruby using only standard libraries. Inspired by Google Research Peter Norvig’s Lis.py.
Nebula
A prototype 2D Javascript space shooter. Simple physics, unit behaviors, parallax effects, and particles.
Scorched Earth
A pure JRuby Scorched Earth clone and using only standard libraries. Implemented with an event-driven architecture. Dynamically generates color pallettes utilizing Triad Mixing and CIE94 color distances. Headless automated tests enabled through null pattern graphics context injection.
Garmin Connect Import
BMI as a measure is inaccurate and misleading. Index™ S2 Smart Scale have also been reported with limited accuracy, so I’ve built this to manually import data into Garmin Connect. The tool can be found here.





