Sunday roundup: two posts, a fresh start
Two posts this week. The first two in what I hope becomes a daily habit. The week started quiet and ended with something that felt like momentum.
Friday: live speech to text from the terminal
I got tired of uploading audio files to test STT integrations and built a one-liner pipeline with rec and websocat. Pipe mic audio straight into a WebSocket STT endpoint and watch transcripts appear as you speak. The whole thing is a twelve-word shell command. It is the fastest way to answer “does my audio format work with this API” and it has already saved me more time than I spent writing the blog post about it.
Saturday: five WebSocket patterns for real-time audio
This one came from maintaining SDKs across multiple languages and watching the same bugs appear in every codebase. Reconnect with exponential backoff and jitter. Application-level heartbeats. Backpressure-aware buffering. Graceful shutdown with drain and finalise. Multi-signal health monitoring. None of these are in the API docs but every streaming integration needs all five.
The rest of the week
The bigger story this week happened outside this blog. On April 14, OpenAI released GPT-5.4-Cyber, a variant of GPT-5.4 fine-tuned for defensive cybersecurity work. It landed exactly one week after Anthropic announced Claude Mythos, the model that hit ASL-4 safety thresholds and found thousands of zero-day vulnerabilities. OpenAI took a different approach: broader access through identity verification rather than invite-only, with a tiered program called Trusted Access for Cyber that starts with individual defenders and scales to enterprise teams.
The contrast between the two release strategies was the thing I kept coming back to while working on SDK error messages and streaming edge cases. One lab locked its most capable model behind a defensive alliance. The other opened its cyber model to thousands of verified defenders on day one. Both claimed to be making the same trade-off between capability and safety. The difference in deployment philosophy could not have been starker.
Inside Deepgram the week was quieter. SDK work, mostly. Error message formatting, rate limit semantics, the kind of work that doesn’t make headlines but determines whether a developer sticks with the integration or bounces to the docs for the tenth time. I was thinking about how the streaming patterns from the Saturday post apply to the Flux model’s turn detection and how to surface them in the SDK examples.
What comes next
This was a trial weekend. Two posts, two formats, both short. The daily writing habit starts properly tomorrow. The Sunday roundup becomes the weekly anchor that ties everything together. Next Sunday I will have more to say.
FAQ
Where is the terminal STT post?
At https://lukeocodes.dev/friday-fun-live-speech-to-text-terminal. Covers the rec + websocat pipeline for live speech-to-text from the command line.
Where are the WebSocket audio patterns?
At https://lukeocodes.dev/five-websocket-patterns-real-time-audio-streaming. Five patterns covering reconnect, heartbeats, backpressure, graceful shutdown, and health monitoring.
What is GPT-5.4-Cyber?
OpenAI released GPT-5.4-Cyber on April 14, a variant of GPT-5.4 with reduced guardrails for defensive cybersecurity work. Available through the Trusted Access for Cyber program with tiered identity verification.
Why start daily writing in mid-April?
The monthly post cadence had run since 2019. The industry is moving faster than a monthly update can capture. Daily writing is an experiment in matching the pace of the field.