Open Source
Here's a selection of my contributions back to the community.
![GLAuth: a lightweight LDAP server for development, home use, or CI.](/static/3be043cdaf6b9354e89b83dfef786b2c/6addd/glauth.png)
As the original author of GLAuth, it has been a real treat to see it grow into a thriving community project with 2.2k stars.
![Picolytics: privacy-friendly web analytics for DevOps.](/static/8c6b47ff3a6bcb2e1b928db917d8615d/6addd/picolytics.png)
Lightweight in terms of backend and JS, privacy-friendly across the board, and easy to self-host with Docker or Kubernetes. Picolytics is the perfect web analytics solution for DevOps.
![cloudprober_external_playwright: a probe to run playwright tests.](/static/a063371cc94b65d89a61cf8383680815/6addd/cloudprober_external_playwright.png)
Go beyond simple HTTP status code checks by re-using your e2e tests in production.
![formbricks-helm: a community helm chart for Formbricks.](/static/998c5e98cc562eb7c0bb814b0b9ad1cb/6addd/formbricks.png)
Bringing the power of Formbricks' COSS survey platform to Kubernetes.
![clickhouse-backup: ClickHouse backups using object storage.](/static/dfa6a0a92e5f6f513a97e50c8731650d/6addd/clickhouse-backup.png)
I didn't write this excellent tool, but I added the 'server mode' REST API so backups can be managed over the network.
![raspberian-firstboot: first boot customization for Raspberry Pi.](/static/136d1e891d361c7496c36b14c877fc76/6addd/raspberian-firstboot.png)
Provisioning solution for fleets of Raspberry Pis. The goal is for this project to go away once the default OS supports cloud-init.
![neddns: authoritative DNS server backed by S3.](/static/f307b1ed0fddb8a26318650e6a9dddbc/6addd/neddns.png)
Distributed systems at its finest: highly-reliable, eventually-consistent, horizontally scalable DNS with some extra bells and whistles.
![remotemarkdown-panel: Grafana panel to render remote markdown.](/static/a2f0624aaa58208059b129b4a0c2fa71/6addd/remote-markdown-panel.png)
A custom Grafana panel to display remote markdown (like READMEs) on a dashboard. One step closer to a Service Catalog in Grafana.
![etcfw: centrally manage linux iptables with etcd.](/static/b773fdeea89ac7cfd431c5a431f4f187/6addd/etcfw.png)
Proof-of-concept for managing IPtables using etcd. Obsoleted by the explosion of mesh networking solutions.
![go-ldap: an RFC-compliant LDAP client/server library for Go.](/static/2285b5ba219ceff695631ccf9dffa180/6addd/go-ldap.png)
I wrote the server components of this library based on the LDAP RFCs. https://github.com/mmitton wrote the client side. I think this was the first LDAP server library for Go.
![edge-netdog: emergency remediation for edge devices.](/static/2641a33ba1874bc342f4c570c56eb7be/6addd/edge-netdog.png)
Watchdog service of last-resort for edge devices that lose newtork connectivity. I have so many IoT devices that I wish used this approach.
![nanostill: limited clone of raspistill for Jetson Nano.](/static/3c00dce9073571506792048fde44bfaa/6addd/nanostill.png)
The Jetson Nano doesn't have a simple image capture tool like raspistill. nanostill wraps a complex gstreamer pipeline in a command-line tool.
![lambda-ses-forwarder: custom email forwarding with Lambda.](/static/00dfe86fe9500955177ca7d594bd9ebf/6addd/aws-lambda-forwarder-for-ses.png)
Accept incoming email with AWS SES, then use this AWS Lambda function to forward it somewhere else.
![FreshPow: Slack alerts with ski resort lift and trail openings.](/static/3bd83081337462ecff8f57c024a475a1/6addd/freshpow.png)
For some of us, fresh powder is more valuable than concert tickets. This tool lets me know when new terrain is opened.
![nightwatchjs_exporter: run e2e and expose the results to prometheus.](/static/ce183b338086d2360fc8146178998cb9/6addd/nightwatchjs_exporter.png)
cloudprober_external_playwright is a better choice these days, but it's all part of my thread of using e2e tests in production.
![mytotp: TOTP for the CLI - like Google Authenticator on your laptop.](/static/861652706e2f9db0b21fa47691e08269/6addd/mytotp.png)
Generate TOTP codes from your command line. The security implications of this are challenging, and these days you're probably better served by a tool like 1Password.
![darknetd: run darknet as a service, with a REST API.](/static/edf2dcb43eca2bc35df7a1dda1083471/6addd/darknetd.png)
An early solution for running ML models on edge devices, before model serving was commonplace.
![notion-offliner: a CLI tool to create offline backups Notion.so spaces.](/static/1617eb5be848b12384a6b61784cff153/6addd/notion-offliner.png)
The only Notion offline backup tool available before the official API was launched.
![roadcrew: run Sysdig and upload to S3 continuously.](/static/415b85d8282082d61af700f4860a23e0/6addd/roadcrew.png)
This was a thing before Sysdig Cloud came around.
![prom_pi_temp.py: expose Raspberry Pi temperatures to Prometheus.](/static/8646a9d13ab775ffe740783a7fdb5ba5/6addd/prom_pi_temp.png)
Graph and alert temperatures measured by your Raspberry Pi. This is obsolete as it's now supported by our friend, node_exporter.
![sweet: network device configuration backups and change alerts.](/static/089893dc6b4285d4308197761454c13e/6addd/sweet.png)
In its time, the best non-commercial solution for backing up routers and other newtork devices.
![Traildash: a simple, yet powerful, dashboard for AWS CloudTrail logs.](/static/27616e6d73470298cd6a877b304bb063/6addd/traildash_screenshot.png)
For a while, Traildash was the only open source way to analyize your CloudWatch logs. Happy those days are behind us.
![check_asa_l2lvpn: monitor Cisco ASA site-to-site VPNs with Nagios.](/static/c14a5f7d0497e5029b952d35c366c2db/6addd/check_asa_l2lvpn.png)
I can't say I miss Nagios, but it was the best ride at the time. Cisco IOS will always have a place in my heart.
![do_route53_backup: backup AWS Route53 zones with Nagios/Icinga.](/static/31974db6c0269fd98592a672aaf4ed69/6addd/do_route53_backup.png)
Abusing the Nagios check system to perform scheduled IaaS backups.