đź‘‹ Hi, I’m Tom.

This is a personal blog where I (infrequently) write about technology and other topics of interest to me. I currently work at Royal Navy DNA. Before that I was a Lead Software Engineer at Simpplr, Inc.

socat and tc netem

Using socat, Linux traffic control (tc) and netem, we can emulate realistic satellite link network conditions. The great thing about this approach is that it’s completely portable - you can drop it in front of any service without modifying the target application. Overview Realistic Network Emulation: Simulate various satellite scenarios from LEO to GEO Real-time Monitoring: Expose metrics via Prometheus and visualize in Grafana Runtime Control: Change network conditions on the fly Portable Proxy Design: Drop-in containerized solution that works with any service Technical Implementation Here’s how to build a network emulator using common Linux tools and containers:...

February 25, 2025

LangChain and OpenAI

I built a conversational AI using LangChain and the OpenAI API that analyzes Facebook Messenger data. This enables you to have meaningful conversations with your historical chat data. Here’s a quick walkthrough of the process and some insights. Find the related source code here: https://github.com/m7kvqbe1/llm-messenger-history Obtaining Historical Chat Data Facebook allows you to download a copy of your data through the “Download Your Information” section in your account settings. After downloading, place your data in a ....

November 4, 2024

GitHub Action Move Issues

m7kvqbe1/github-action-move-issues is a GitHub Action that automates the movement of issues within GitHub Projects V2 based on specific labels. Find the related source code here: https://github.com/m7kvqbe1/github-action-move-issues Overview Automatic Issue Movement: Moves labeled issues to the specified column. Supports Multiple Labels: Triggers on multiple specified labels. Column Filtering: Configure columns to ignore or target. GitHub Projects V2 Integration: Works with the latest version of Projects. Example Workflow Here’s how you can configure this Action in your workflow:...

October 10, 2024

Go Packages and Cobra CLI

Cobra is a library for creating CLI applications in Go. It provides a simple interface for defining commands, flags, and subcommands. I’ve utilized Cobra to create a CLI tool and organized the code into multiple packages. Find the related source code here: https://github.com/m7kvqbe1/advent-of-code-2023 Init First we initialize the project as a new module: go mod init github.com/m7kvqbe1/advent-of-code-2023 This creates a go.mod file (there is also go.sum file which is essentially a lockfile)....

July 18, 2024

Automated Ticket Alerts

A small program in Go for polling and scraping ticket websites then sending SMS messages when resale tickets become available. This was a learning exercise in Go concurrency: goroutines, channels, wait groups etc. Find the related source code here: https://github.com/m7kvqbe1/go-ticket-polling Overview Polling and Scraping: Uses the colly web scraping library to poll a site and search for the availability of resale tickets. SMS Notification: When tickets are found, sends an SMS to the specified phone numbers using the Textbelt API....

May 9, 2024

Unix Sockets and Protobuf

Recently, I explored Unix Sockets and Protobuf with Go. Here’s a brief overview of some of the things I learned. Find the related source code here: https://github.com/m7kvqbe1/unix-sockets-protobuf-play Unix Sockets: Inter-Process Communication Unix Sockets offer a method for inter-process communication (IPC) on the same machine. It’s faster and leaner than leveraging a network protocol like TCP. They’re straightforward to set up in Go: listener, _ := net.Listen("unix", "/tmp/example.sock") conn, _ := net....

April 5, 2024