Hi! I'm Nathan and I bring smart products to life.
About
I have a passion for building highly robust and reliable smart produts, covering a wide range of applications. I have designed, built, and deployed software for down-hole tools, IoT Edge computing, satellite payloads, and switchgear monitoring solutions, to name a few.
I have over 15 years of experience in designing and delivering dependable software and systems that work the way users expect.
Skills
Programming
- Modern C++
- Modern C
- Python
- TDD
- BDD
- Git
- Go
- pytest
- gtest
- gmock
- cgreen
- ginkgo
Embedded
- Embedded Linux
- Yocto
- Buildroot
- NXP iMX
- ARM Cortex-M
- STM32
- FreeRTOS
- Hardware-in-Loop Testing
DevOps
- Ansible
- Terraform
- Linux
- CI/CD
- Docker
- Bash
- AWS
- Gitlab Pipelines
- GitHub Actions
Networks & Comms
- HTTP
- MQTT
- Ethernet
- Wireless
- Bluetooth
- SSL / TLS
- DHCP
- IPv6
- Protobuf
- Space Packet Protocol
- Cube Sat Protocol
Career Highlights
I've worked with many amazing people over my career and have made some great products along the way. Here are some of the more interesting projects that I've worked on in the past.
Fleet Space's SPIDER
Designed to monitor sub-surface seismic activity occuring on the moon, the SPIDER firmware had to be extremly robust and reliable as it would be a little difficult to send a technician to replace or restart it.
The bootloader was custom developed in C and designed to work on the space certified ARM Cortex-M processor, storing a number of versioned firmware images. These images were checked for corruption and failures prior to loading. If all images failed, the bootloader would configure itself to receive a new image from the lander module.
Additionally, a protocol was required to transfer images from the lander to the SPIDER, which was throughly documented and sent to Firefly. Python based tooling was also implemented to allow developers to load firmware into test units.
This project was interesting as it required thinking about all the different ways the application and bootloader could fail and implementing countermeasures. These cases were all checked with unit tests.
SwitchDin's Droplet
The Droplet was a IoT Edge node for the monitoring and control of solar inverters and battery systems in Distributed Energy Resource environments. The initial task required getting up to speed with Yocto and its ecosystem very quickly, upgrading over several release versions including major syntax changes.
Additional hardware support was added for systems such as the NXP based Compulab IOT-GATE-IMX8PLUS (pictured) and several Broadcom based devices.
The build system was containerised in Docker and integrated into the Bitbucket pipeline for automatic builds and deployment.
The most challenging aspect of the project was integrating the in-house python application build process into the Yocto system, which required some custom compilation steps.
Powell's BriteSpot Plus
Designed from the ground up, written in C++11 and based on FreeRTOS, the BriteSpot Plus was a challenging project. It encompassed MODBUS clients and servers, a HTTP REST API, configurable alarms and switched contacts, support for DHCP and NTP, as well as a variety of hardware configurations.
The HMI was designed and built in Embedded Wizard. It allowed a user to monitor the current and previous temperatures of the switchgear, displaying the previous week, month, and year's values. The unit could be fully configured through either the front panel HMI, or the inbuilt web interface.
The most challenging aspects of the BriteSpot Plus project was coordinating the data needed by the various systems. The bootloader with custom USB stack for serial port emulation was tricky to implement in the space allocated (8kB). Finally, wrapping my head around how to unit test all the code was a fun learning experince and it was worthwhile when two modules worked together without issue.
Recommendations
Recommendations are available on my LinkedIn profile.