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 embedded Linux, 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 a PHP web development role and moved towards the JavaScript/Typescript ecosystem before moving into writing Rust 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, light knowledge
- CAN networking
- Battery management
- Bitbake
- Kubernetes
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's an interesting introduction to the world of industrial automation and German beaurocracy when applying for (and receiving) EtherCAT organisation membership.
-
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
-
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 Rust 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.
â