How to download and install builds of the latest iperf3 Windows versions

iperf3 is a very useful network throughput testing tool, however the most prominent versions available for Windows are either old, buggy or superceded by newer builds. It's always worth keeping up to date with the latest available build, but most people on Windows won't be able to compile from source due to lack of knowledge/lack of time.

The ESNet project maintains iperf3 but doesn't release compiled binaries for Windows. Sites like the high-visibility only host up to v3.1.3 which dates back to 2016 - six years old as of writing, and the operator of that site appears to have gone AWOL or has stopped updating it.

Fortunately, the wonderful user BudMan on the Neowin forums decided to do something about this, and has been steadily compiling the latest iperf3 builds for Windows and hosting them for download since 2014! Someone should buy BudMan a beer. Another Neowin user CryptAnalyst has also recently begun compiling for Windows and is publishing builds to their GitHub. Spoiled for choice! has the latest build linked directly, and you can download all previous releases from

For ease of use on the command line, don't forget to extract the zip to a 'persistent' location, then add that folder to your Windows PATH environment variable (it only takes a few seconds). Here's another guide on how to do it in Windows 10; the process is very similar for Windows 7 (see also

Of course, adding the iperf3 path to your Windows PATH variable is optional, but it's convenient. Once done, you can just invoke "iperf3" from a prompt like anything else. Happy throughput testing.

Compiling the HTTP Substitutions Filter module for NGINX on CentOS 7

I use NGINX for various things, including one niche case, where I rewrite and replace strings before presenting them to the user. I do this using the HTTP substitutions filter module. The readily-compiled module to accomplish this is included with the paid NGINX Plus, but is also available to DIY compile if you have the ability.

If you're just looking for precompiled .so files you can use with NGINX on CentOS 7 available from the repository, see the end of this post.

A while ago I took the time to work out how to compile this for updates; the CentOS box I run NGINX on uses yum packages for updates, but then the subs filter module stops working. So, after half an hour or so of tinkering, quiet swearing, obtaining of additional packages, tweaking commandlines etc... I have a working oneliner to make an NGINX build which will also compile a suitable file. 

To compile this dynamic module you generally need to build with the same switches used for the packaged build. So, first step was to find out how it was compiled:

See how to check your compile flags, and how to build from source

Scripted conversion of HyperDeck Studio ProRes videos to x264 with burned-in timecode

This article discusses how to loop through a folder of source files, manipulating the audio tracks, suitably encoding the video and burning text and timecode in the video.

Recently I worked on a project where the output of a vision and sound mixer was recorded to a HyperDeck for later review. The setup was referenced to master clock timecode from a Signal Pulse Generator (SPG), so the HyperDeck fortunately also embedded the timecode as a metadata track in its ProRes recordings.

I received a request to generate viewable files from the ProRes source, and burning the timecode on-screen (as you see with film rushes/dailies) was considered a good consistent reference for notetaking and discussion.

The requirement was to accomplish this without needing to use expensive NLE software or traipse into the office each night to use an edit suite. This session was in a hired facility miles from my usual workplace and I only had a Windows 10 laptop for company. But all we need is FFmpeg and FFprobe...

Click to read more and see my example script...

Postfix "unavailable. unsupported dictionary type 1111" on restart? Check your brackets!

I was recently modifying a Postfix config to do some debug logging of transactions for a specific IP addresses. To do this, I modified the smtp and smtps services in to get the most verbose logging possible. 

However, I'd failed to remember to encapsulate the IPv6 address with brackets. And so, I got this in the log after restarting Postfix:

Feb  5 18:28:29 l03 postfix/smtpd[21037]: warning: 1111:2222::7777:8888 is unavailable. unsupported dictionary type: 2a04
Feb  5 18:28:29 l03 postfix/smtpd[21037]: warning: 1111:2222::7777:8888: table lookup problem

(To confuse me, that address was also the one listed in a client_checks.cidr file I'd put together which was also part of my investigation).

And when that client was attempting to connect to send an email, I was seeing this:

Continue reading "Postfix "unavailable. unsupported dictionary type 1111" on restart? Check your brackets!"