RSSAmplifier

Blog

Thomas Burgess

thomasburgess.devRSS feed ↗12 posts

Latest posts

Resume

Thomas Burgess Email: me@thomasburgess.dev https://github.com/ThomasBurgess2000 https://www.linkedin.com/in/jthomasburgess Lead Software Engineer MeetKai, Jan 2025 - Present Single-handedly made the iOS and Android companion apps, the backend voice services, the marketing website , and customized the RTOS firmware for an upcoming AR glasses platform. Architecting a scalable API for our AI…

How to Use an Ultrasonic Sensor with RPi and C++

Follow this wiring diagram for the HC-SR04 ultrasonic sensor: I used 1KΩ and 2KΩ resistors instead of 330Ω and 470Ω (because it's what I had on hand). Here's what that looked like: Test the wiring with this simple Python script: from gpiozero import DistanceSensor from time import sleep ultrasonic = DistanceSensor(echo=17, trigger=4, max_distance=4) while True: print(f"{ultrasonic.distance *…

Tracking Camera with Head Animation

I wanted to make the player's head track with the camera. So first, I had to disconnect the animations from controlling the neck and overriding whatever rotations I was setting. Then I had to make the neck's rotation correspond to the rotation of the camera. Defining this behavior turned out to be quite difficult. Firstly, I could not merely match the rotation of the camera to the neck because…

LLMs are 800x Cheaper for Translation than DeepL

When looking at the cost of translation APIs, I was floored by the prices. Azure is $10 per million characters, Google is $20, and DeepL is $25. To come up with a rough estimate for a real-time translation use case, I assumed 150 WPM speaking speed, with each word being translated 3 times (since the text gets retranslated multiple times as the context lengthens). This resulted in the following…

Sending Images to Smart Glasses via Bluetooth

I recently tackled the challenge of figuring out how to send images to a pair of smart glasses we're developing. The significant hurdle was the lack of direct access to the firmware and extremely limited documentation on available commands or their formats. All I initially had was an outdated APK that no longer worked and some partial source code that only supported basic functionality. This…

Building Smart Glasses as a Solo Engineer

For the better part of the last year, I have been the principal engineer (and for most of the project, the only engineer) for an upcoming smart glasses product. I've had to customize the firmware, build the app for communicating with the glasses, and build the backend services. This is despite having no previous work experience in hardware, app development, or three of the six programming…

(Multiplayer) Provable Fairness Explainer

Goal: Create a long list of random numbers that we can prove: We have not tampered with since it was created. We did not generate a lot of random number lists and then cherry pick the list that was most skewed in our favor. Methodology: We generate a long chain of hashes from an initial seed that we keep private. function generateHash(input: string): string { return…

Handy Speech-to-Text to Tmux

I installed Handy , a local speech-to-text app, on Kubuntu. It uses ONNX models (parakeet-tdt) to transcribe speech locally. Getting it to work required fixing a couple of issues, and then I built a small watcher script to pipe transcriptions into a tmux session. Fixing the Crash Handy was crashing silently every time I pressed the shortcut to start recording. The log at…

Deploying Next.js Apps to Local Debian Server

To deploy my Next.js app to my local Debian server while still having my domain point to it, I had to first enable port forwarding on my router. I forwarded 80 to 80 and 443 to 443. Don't do what some guides say and do 80 to 3000, I can't remember why, but I think it had something to do with nginx. I had to enable some ports through my ufw firewall, I don't really remember which. I think one was…

Converting a Shader from Three.js to Babylon.js

In Search of the Perfect Tree There have been many, many attempts at creating a forest of performant trees in Babylon.js, to the point that there's a dedicated "Tree Generators" page in the official documentation. However, I was not impressed by the looks of the existing solutions, and went in search of a higher quality tree. I came across this blog post titled "Creating fluffy trees with…

The Underappreciated UX of the ChatGPT Mobile Scroll Behavior

The ChatGPT mobile app UX is severely underappreciated. Perhaps the best example of this is the scroll behavior. They've put a lot of thought into something so deceptively simple that most people don't notice how complex it really is. I didn't realize myself, until I tried implementing it from scratch. It's easy to forget that ChatGPT is not a typical text message UI. The introduction of streamed…

2 Weeks of Tesla FSD after 2 Years with Comma's OpenPilot

I've had the Comma 3 device installed in my 2019 Hyundai Santa Fe for over two years and nearly 11,000 miles. The self-driving software it runs is called "openpilot," and for most of that time, I've been using a fork called sunnypilot . Two weeks ago, I bought my wife a 2025 Tesla Model Y and subscribed to FSD (Supervised). Here are my first impressions comparing the two self-driving systems and…