doug.sh

Building things with keyboards and end mills. Rabbit holes included.

Recent Projects

erm ๐Ÿ”—

A local CLI that removes disfluencies from recordings of English speech. It handles the usual suspects: um, uh, er, erm, ah, hmm, mhm, mm, uh-huh, along with the elongations that do not transcribe cleanly as any of those.

Everything runs on your machine. It uses faster-whisper to find candidate fillers, a set of detectors that look at the audio directly rather than trusting the transcript, and ffmpeg to cut and crossfade the result. Nothing is uploaded anywhere.

Documentation ยท Source ยท How it works

gpu-rebar-layout ๐Ÿ”—

A Linux kernel module that gives selected GPUs their largest Resizable BAR at boot when the BIOS can’t, and pads the PCI bridge windows above them so the kernel can assign the space. I wrote it for four Radeon AI PRO R9700s behind a PCIe switch, where Linux 7.0 sized the switch’s window too small for four 32 GB BARs.

It runs from the initramfs before any GPU driver loads, and it refuses to touch anything that’s already in use. Once the upstream fix for the sizing bug is merged, the padding won’t be needed, but the resize and rescan still will.

Source ยท How it works

linuxcnc-grpc ๐Ÿ”—

A gRPC server for LinuxCNC, plus generated client libraries for Python, Go, Node, and Rust. LinuxCNC exposes its state and controls through a Python interface that assumes it is running on the machine. This wraps that in a protocol you can call across a network, from whichever language the rest of your tooling already uses.

The protobuf definitions are the single source of truth, so all four clients stay in step with the server.

Documentation ยท Source

m0601-rs ๐Ÿ”—

A Rust driver and CLI for the DFRobot M0601 hub motor, sold elsewhere as the Direct Drive Tech M0601C-111. It speaks the motor’s RS485 protocol, covers the parts of that protocol the datasheet documents unevenly, and can be used either as a library or from the command line.

Documentation ยท Source ยท docs.rs