James Waples
Experienced Rust developer
Edinburgh, Scotland
Hi, I'm James, a Rust, electronics and CNC enthusiast. My work revolves around the wonderful Rust programming language, gladly using it both professionally, personally and in open source to write high quality code for web, Linux (embedded and desktop), microcontrollers and realtime systems.
I've been programming for about 20 years since I was 10, beginning with 8 bit assembler, Visual Basic and C. I started my professional career at 18 with PHP web development, then moved towards the JavaScript/Typescript ecosystem for a while. I discovered Rust about 5 years ago and am now working in it fulltime.
I'm motivated by engaging software problems, challenging optimisations, interesting performance debugging and making a polished product for people to use. I strongly believe we work best in a team, each of us adding to something greater than the sum of parts.
I also have a good interest in electronics. It was a quick discovery after computers and has become a long running hobby, most recently developing a Rust EtherCAT controller for microcontrollers.
Melding electronics and programming lead me to discover the expensive yet fascinating world of DIY CNC machines, myself having built at least 5 of improving capabilities (and heft) over time, with a parallel dream of building motion control software one day. Stepping into the garage to work on/with the machine with one's hands is a great escape from the keyboard.
Top skills
Professional
Used every day, strong knowledge
- Rust
- Github (reviews, PRs, etc)
- Linux (SSH, CLI, systemd, etc)
- Docker
Proficient
Used often, good knowledge
- CircleCI
- PostgreSQL
- Rust
no_std
development - EtherCAT
- KiCAD PCB design
Familiar
Used a little, reasonable knowledge
- CAN networking
- Battery management
- Bitbake
- Kubernetes
- Linux realtime tuning
Previous
Used a while ago but could be picked up again quickly
- AWS (ECS, RDS, EC2)
- Google Cloud Platform
- Typescript
- SASS
- Node.js
Open source projects
-
https://github.com/ethercrab-rs/ethercrab - EtherCrab is a pure-Rust EtherCAT master runtime born of the frustrations of working with existing C-based libraries. It is fully
async
and has a threadsafe design, which was a fun challenge to implement correctly, encapsulating unsafe code and providing a foolproof API. -
https://github.com/jamwaffles/linuxcnc-hal-rs - Rust FFI bindings and a high level API to allow writing Rust modules for the popular open source LinuxCNC motion controller, for example to control Granite Devices servo drives.
-
https://github.com/embedded-graphics/embedded-graphics - A graphics library for embedded devices using integer-only drawing algorithms and no dynamic allocation, with primitives, fonts and image support. I'm proud to say it has over 400,000 downloads and a vibrant community around it.
Work history
-
Freelance Rust and EtherCAT consultant
- Working with a client in Australia to migrate a Modbus TCP solution to EtherCAT with Rust for a newly developed industrial machine.
-
Creating a multithreaded solution to initialise the device network and begin cyclic
communication, then providing a non-
async
interface to retrieve current process data. - Reproducing, investigating and analysing a performance regression in the client's network hardware. This was a great learning experience in testing and validating assumptions, along with tuning a realtime Linux OS. This work resulted in the development of visual debugging tools to help provide the client with some good optimisation suggestions.
-
Senior Developer at Moixa Technology / Lunar Energy
- Maintaining and developing Rust software running on an embedded ARM Linux board to manage a home solar battery system, communicate with the cloud and drive various attached hardware devices over UART and CAN.
- Writing an AT-command-based Rust driver to configure and monitor a cellular modem using a pleasant high-level API.
- Creating a network monitor/failover service to ensure connectivity with the cloud in any given installation condition.
- Implementing and maintaining a factory API for use by the production line to run tests against the hardware in each produced unit.
- Working with fellow developers to improve an aging codebase over time by adding tests, documentation and refactors to reduce technical debt and developer cognitive load.
-
Full stack developer at Fluidic Analytics
- Worked with another developer to architect and implement the company's new cloud application from scratch using a Rust backend and Typescript/React frontend. Jira was used to gather and track requirements and progress.
- Ensured the application was compliance‐ready using an event sourcing paradigm to record the atomic history of actions against entities in the application. What PII and where it was stored was also taken into consideration to comply with GDPR regulations.
- Released the event sourcing machinery as an open source library for reuse in other applications and projects (https://github.com/jamwaffles/event-sauce/).
- Experimented with and implemented a granular but not too complex permission system for both the backend and frontend to ensure security but also clearly message to the user what they can and cannot do.
-
Senior/lead developer at Repositive Ltd
- Maintained and refactored a microservice‐based backend in Typescript for our main product as part of the development team.
- Handled development and maintenance of features for the company's React‐based commercial website, with a focus on speed and SEO.
- Maintained and developed a Typescript library to make using the event‐sourcing paradigm easier for the dev team, learning to carefully consider the API surfaces and changes when bumping semver versions.
- Evangelised Rust within the company, producing some data‐processing tools to work through large amounts of bioinformatics data safely and quickly using multithreaded code where possible.
- Scratch‐built a brand new platform after a pivot, using Rust with PostgreSQL as the backend API, and Typescript with React and Redux in the frontend.
- Worked closely with the product manager to wireframe, scope and design new features for the platform.
- Worked with recruiters to hire new developers into the team when funding allowed expansion.
-
Developer at Cambridge Intelligence
- Implement demos to help users work with the core KeyLines product.
- Help others use AWS to maintain infrastructure and perform day to day tasks and debugging.
- Lead development on an in‐house, Docker and ECS‐based tool to automatically host multiple in‐development branches so new features can be tested in reproducible, isolated environments. Responsibilities include writing and reviewing React frontend code, designing and maintaining AWS infrastructure.
- Reduce tech debt and make development faster and less painful for me and other developers on my team. This involved moving from LambCI to CircleCI, reducing build times and build system complexity and refactoring the codebase to use ES6 native modules instead of global variables.
-
Developer at Media Ingenuity / TotallyMoney
- Architected and lead frontend development of the TM Free Eligibility Report, involving a universally rendered React/Redux application with authentication which integrates with a .NET backend API.
- Architected and maintained the TM Loans frontend webapp, again written with NodeJS and React. It originally used Flux, however I refactored it to use Redux to reduce the levels of technical debt present in the codebase.
- Developed an internal monitoring and toolbox application involving fetching data from various AWS APIs and displaying charts of data using D3. It used websockets for realtime communication.
—