I'm an Automated Test Engineer at Tait Communications, specializing in creating test systems and simulated P25 radio equipment. My focus is on developing robust CI/CD tests, analyzing log and test results, and ensuring radio systems meet TIA specifications through low-level packet encoder development.
I collaborate closely with developers to test and verify new features, maintain and upgrade software packages, and ensure our systems conform to evolving standards. My work often involves simulating complex radio networks and automating test processes to enhance product reliability.
- Python β Daily driver; expert in automation, test systems, and scripting
- Gherkin/Cucumber β Designing readable BDD-style test steps that bridge human-friendly procedures to backend automation, ensuring test clarity and direct code integration
- C++ β Code review, debugging, and minor development
- InfluxDB β Storing and querying test result datasets
- Grafana β Visualizing data from InfluxDB in custom dashboards
- Docker β Creating, managing, and deploying containerized environments
-
Custom Keyboard (southerly-split-keeb): Designed a split ergonomic keyboard from the ground up.
The layout was crafted using ErgoGen in JavaScript, enabling customized ergonomic positioning. The PCB was designed as a multi-layer board, featuring complex circuitry for tight component placement and integrated addressable RGB lighting. I developed 3D-printed case designs in CAD, emphasizing tight tolerances and compactness, and iterated on several prototypes for optimal fit. Firmware was built from scratch using QMK in C, allowing for advanced key mapping and lighting control.
See project README for further details on layout, PCB, case prototyping, and firmware. -
Solar Logger: Multi-stage IoT solution for logging and visualizing solar power data.
The system interfaces with an Outback solar controller, subscribing to an MQTT backend that streams real-time statistics such as battery status and input voltages. Incoming MQTT data, broadcast as raw byte streams, is deciphered into human-readable values before being converted into time series data points. These points are then inserted into an InfluxDB instance, enabling efficient storage, modeling, and querying of historical solar data.
The application architecture is multi-threaded: one thread listens and processes MQTT packets while another uploads parsed data to InfluxDB, with queues facilitating communication between them. This ensures reliable, concurrent handling of data streams and database updates. The stored data is visualized via a private Grafana dashboard, providing detailed graphs and analytics for monitoring and comparison.
See project README for architecture, hardware, and software insights. -
BitStructures (WIP): A Python library for defining structural codecs, making it easier to encode and decode packet designs at the bit level rather than byte level.
Always eager to dive into new technologies, automate complex systems, and turn data into actionable insights!
