Blog — page 11
568 posts on software development, newest first. Browse by topic:Rust, Go, Python, JavaScript & web, AI & data, DevOps & tooling, Mobile & Android, .NET & C#, C++ & systems, LaTeX, Investing, Everything else.
Concurrency in Go: goroutines, channels and selectStart goroutines, wait for them with sync.WaitGroup, pass data over channels, wait on several channels with select, and build a small concurrent request processor.
Reading and writing files in Go, and handling errorsRead and write files with the os package, stream large files, and handle Go errors: returning them, wrapping with %w, and checking with errors.Is.
Web development in Go: net/http routing and html/templateBuild a small web server with Go's standard library: register handlers, route by method and path wildcard, and render HTML safely with html/template.
Processing WAV audio in Go with go-audioRead a WAV file with go-audio/wav, apply gain and a low-pass filter, find the dominant frequency with a gonum FFT, and write the result back to WAV.
Using Rust's type system to catch bugs: newtypes, enums and traitsThree Rust type-system techniques that turn runtime bugs into compile errors: newtypes for units, enums for errors, and traits for shared behaviour.
Rust match expressions: destructuring, guards, ranges, @ bindings and or-patternsHow Rust's match works: exhaustiveness checking, destructuring enums, match guards, range patterns, @ bindings and or-patterns, with runnable examples.
Why Go: where it came from, what it's good at, and how to install itGo's origins at Google, the language features that matter day to day, the jobs it suits and doesn't, and installing it on Windows, macOS and Linux.
Transcribing and subtitling YouTube videos with Whisper, yt-dlp and GradioA Gradio app that downloads a YouTube video with yt-dlp, transcribes or translates it with OpenAI Whisper, writes an SRT file, and burns the subtitles in with ffmpeg.
JUnit basics: writing and running unit tests in JavaWrite and run JUnit Jupiter tests in Java, covering the Maven dependency, lifecycle annotations, assertions, parameterized tests and what changed in JUnit 6.
Building a custom WordPress theme: files, the Loop, and publishingNotes from building a rough Tailwind-styled WordPress theme, covering the theme files, a post-card Loop, its bugs, and where to publish it.
Six ChatGPT prompts I use for code review, commit messages and blog draftsCopy-paste ChatGPT prompts for rewriting code to a style guide, writing tests, explaining code, writing commit messages and test notes, and drafting blog posts.
An endless road animation for a car in React and CSSMake a car look like it is driving forever by scrolling dashed road markings with a CSS keyframe animation inside a small React component.
© 2026 David Li · Home · Blog · RSS ·Classic site · Built with Astro, Starlight and three.js · Logos:Font Awesome Free (CC BY 4.0)