My name is Zac Walker: father of 3, software maker and pragmatist.
This site is about my digital side — the desktop apps, web tools,
and research software I build. Everything from photo management and
emulators to financial research and AI experiments.
Everything here is open source on GitHub. Mostly C++, mostly Windows, mostly built to
answer a question I could not stop thinking about. Most of it builds with dd, my own build
system, and several of the desktop apps share platform-h, so it is less of a random
pile than it looks.
01/07
Photos
Diffractor, and the app it grew out of. Twenty-odd years of trying to get my photos in order.
Lightweight photo and video management for Windows. Optimised with
Direct3D/HLSL and SIMD. I have been working on it for 20 years, and I am still not sure my photos are
organised. It used to be called ImageWalker. These days it reads RAW, puts photos on a map from their
GPS, searches on metadata, finds duplicates that have been resized or re-encoded, and ships in 14
languages.
Before Diffractor there was ImageWalker, the image browser I wrote between 1998
and 2006, which started life as ArtMate. The old releases are preserved here as 64-bit apps that build
and run on current Windows, each keeping its original look, right down to the dark 2006 theme in the
screenshot. There is a brand-new ImageWalker 3.0 alongside them. All of them are free: no
registration, no nag screen, no feature limit.
For a while I was a compiler engineer, and I always had this idea: if you could
just compile an LLM to run on the CPU, then Jensen Huang would be out of business. NNC is my attempt —
an LLM compiler and JIT with no ML frameworks in sight. It emits shape-specialised AVX2 gemv kernels
straight into executable pages, and runs Gemma 3 1B at about 28 tokens a second on my PC; even Gemma
4's 26B mixture of experts manages about 9 with 4-bit weights. Jensen is safe for now, but I am
excited about FP8 landing in CPU SIMD. Inference is mostly limited by memory bandwidth, so FP8 would
let the model run a lot more efficiently. Intel has already committed to FP8 vector instructions in
AVX10.2, and hopefully AMD follows with FP8 SIMD in Zen 6 or 7. Once that lands, a CPU-only LLM stack
starts to look a lot more interesting.
Fashion-MNIST is a dataset of pictures of clothes, used as a machine learning
challenge: train a model to tell the items apart. As a learning exercise, I wrote my own multi-layer
perceptron to see how deep learning actually works under the hood. It gets about 89.9% on the test
set, which is about as well as any other multi-layer perceptron. I tuned it for modern SIMD hardware,
so it is fast — for a CPU. It has since grown into libcmlp, a small dependency-free C library that can
train a DQN as well. If you ever need to tell a sock from a shirt, this is the program!
Around 2015 I built low-ban as a hackathon project at Microsoft, while I was
working on Skype. The idea was a video call that could run on a 2G network, at around 10 kbps. At that
speed all you can send is a blurry mess, so instead I tracked facial landmarks and sent just the
coordinates of someone's expression. That way you could at least see whether they were smiling. There
was some interest — I even demoed it to the head of design for Skype, who wore all black and really
looked the part. In the end nothing came of it, and now we all have plenty of bandwidth for
high-resolution video. I still poke at it: it now runs a classic DCT codec and a learned patch
autoencoder side by side on the same webcam frame.
C++17
Video codec
Face landmarks
github.com/ZacWalk/low-ban
03/07
Markets & money
Tools for poking at markets: one hunts for an edge, the other fetches the data it hunts through. Mostly they taught me how hard markets are to beat.
A research bench for one question: can an agent learn from crypto futures data alone
when to be long and when to be short, and keep the edge after costs? After 2,404 days of one-minute
bars, exactly one effect survives every control I could throw at it — and it is not tradeable at
retail fees. The reinforcement learner finds more signal and keeps none of it: it trades eight times
as often as a three-line rule and pays it all away. Chosen honestly, the best setting is the one that
trades nothing.
The boring but essential bit: a C11 library that fetches financial data — SEC filings
turned into Markdown, FRED, Yahoo, Alpaca, CFTC, FINRA and Binance — and hands back records without
deciding how you store them. It keeps track of when something was published, not just when it
happened, so a backtest cannot quietly peek at the future.
C11
Windows & Linux
Market data
github.com/ZacWalk/libcfindata
04/07
Speed & systems
Databases, benchmarks and servers: the places where nanoseconds matter more than they should.
A time-series database built for financial market data. I use it in my trading
experiments and in Alpha Galactica. Its one trick is very fast in-order iteration of market data —
around 80 million records a second on a warm cache — handy if you ever need that sort of thing. One
writer, many reader processes, every page checksummed. It is not fully crash-safe yet, though — pull
the plug at exactly the wrong moment and you may be re-downloading from the exchange.
This started life as an internal SIMD course at Microsoft. It races a plain
scalar loop against hand-written SIMD: AVX2 does a 64-byte distance in 0.6 ns, about 34 times faster
than the loop, and the CPU's CRC instruction beats a tuned lookup table by about 13 times. The
interesting part is the auto-vectorisers — MSVC spots the instruction that makes the kernel fast,
while GCC turns the same loop into hundreds of instructions. There is a sorting shoot-out too, where
radix sort beats std::sort by about 5 times.
A few years ago I started using Rust at Microsoft to improve performance for
some of the services that make Office work. They serve hundreds of millions of people, so making them
faster adds up to a lot of money saved. One of my first tasks was to prototype this wrapper for
http.sys, the Windows kernel-mode web server. I was quite proud of it — until one of our Rust experts
told me it looked like a C++ developer trying to write Rust. Fair enough: I am a C++ guy trying to
write Rust :) It has since grown into a proper async server with a benchmark against axum. It holds
about 96,000 requests a second where axum starts to drop off, and uses a third of the CPU on big
uploads — though axum still wins on idle latency and raw upload speed.
Measures the cost of sending messages across Electron's communication paths. I
wrote it to improve performance while I was working on Microsoft Teams. Teams does not use Electron any
more, but if you do, this might help. The punchline: latency barely separates the transports, but
main-process CPU differs by more than 20x — the number everyone quotes is not the number that
matters.
JavaScript
Electron
IPC benchmarks
github.com/ZacWalk/electron-bench
05/07
Foundations
The plumbing that most of the other projects on this page build on.
A very simple package manager and build system for my C and C++ projects —
really just a PowerShell script, but it makes my life a lot easier. dd init scaffolds a
GUI app, a CLI or a library, dd toolchain installs whatever compiler bits are missing,
and dd build does the rest, on Windows and Linux. Most of the projects on this page build
with it.
A small C++20 platform layer that my desktop apps sit on. One OS-free header
covers windows, drawing, fonts, menus, input, files, HTTP, audio, threads and child processes, all
behind pf::, so application code never sees an HWND. There is only a Win32
backend so far, but the rule is strict: if a declaration could not be implemented somewhere other than
Windows, it does not go in the header. The editor, the browser and Stunt Car Racer below all share
it.
C++20
Win32
UI toolkit
github.com/ZacWalk/platform-h
06/07
Windows desktop
Small, fast Win32 apps with no frameworks, mostly because I enjoy it.
A simple Windows text editor for programmers and normal people, previously
called noterad. I am not sure why I wrote it — apparently writing your own editor is some weird rite
of passage for every software engineer. Point it at a folder and it will search everything in it, then
show what it finds as text, Markdown, a CSV table or hex, whichever suits. It has grown a coding agent
too: GitHub Copilot sits in a side panel, and the conversation is just a session.md file
in the folder, so you can edit it or delete the turn that went wrong. Plain GDI on my own platform
layer, nothing third-party, starts instantly and uses a few megabytes.
Back in the 2000s I moved off C++ to work on a web project for a while. I
wanted to learn CSS, and decided the best way was to write my own web browser in C++. Here is the
result — probably the worst web browser in the world. About 24,000 lines of C++20 with no third-party
HTML or CSS library, GDI rendering, a fair bit of CSS — flex and tables included — and absolutely no
JavaScript. I try to keep it working well enough to show Wikipedia. Right now it is broken because
Wikipedia keeps adopting more modern CSS. It still works on Wikipedia from 2015 — so very handy if you
ever travel back in time.
Way back around 2000, the company I worked for still supported Windows 95 and
98 for the desktop app we sold. I usually volunteered to test on those old platforms, and I had written
my own task-manager-style program. The Windows 95 task manager was very basic, and I decided I could
do better. Every five years or so I get it building again and make a few tweaks. It started life as
sys-mate and is now called, more generically, system-stuff. These days it charts CPU, memory, disk,
network and GPU, and uses about a tenth of the memory Task Manager does, which still makes me
happy.
Back in the late 90s my London neighbour, a Swedish furniture designer, came up
with the idea for Ergo Active over beers. The premise was simple: remind you to take a break when you
have been at the computer too long. We had so much fun making it, and filled it with advice that all
started with “experts recommend…” Once it was finished we had no idea what to do with it — there was
no app store back then. Luckily it is preserved here, now with a proper dashboard and the 20-20-20 eye
rule, sitting in the tray on about 2 MB of RAM. If you forget to take breaks, this is the app for
you.
C++
Win32
Tray app
github.com/ZacWalk/ergo-active
07/07
Retro
Emulators, old games and old operating systems. Nostalgia, compiled.
The Commodore 64 emulator behind Turbo 8bit, packed into a C++20 library
that knows nothing about Windows and does no file I/O: you hand it bytes, and it hands back a frame
buffer and audio samples. It does the 6510 down to the cycle, the VIC-II with sprites and raster
interrupts, the SID with its filter, and cartridges; it loads from .d64 disk images and
plays .sid tunes. The plan is to
drop it into Diffractor to add retro computer support.
I loved Stunt Car Racer as a kid on my Commodore 64. The code from the Amiga
version was floating around, so I grabbed a copy and rewrote it to use floating-point math instead of
fixed-point. The fact that the original 3D graphics were done entirely in fixed-point shows how
amazing those old-school programmers were. For a long time there was a bug where you would
occasionally fall straight through the track — that one is finally fixed, so all eight tracks are
drivable again. Everything you see is still drawn by a software rasteriser: no Direct3D, no OpenGL, no
GPU.
Around 1995 I started writing a game inspired by Thrust and XPilot, in Turbo C++ for
DOS. It slowly evolved, and I pulled it off a 2001 backup CD and brought it up to date. You fly a
rocket through caves bored into a planet cut in half, hauling an orb on a chain that swings and
whips. There are 35 planets, everything is a rigid body, and there are no asset files at all: the
rock, ships, music and fonts are all generated in code from a seed.
A while back, Microsoft open-sourced MS-DOS 4.0 (with a little help from Scott
Hanselman). I wanted to add large hard drive support so my IBM 5150 could use bigger disks. The tricky
part is that building DOS relies on some bundled DOS-only compilers and assemblers — so I wrote my own
DOS shim, demu, to run those old programs on a modern Windows machine. You can now build this version
of DOS on a modern PC, and my IBM 5150 boots from the result. Type ver and it proudly
reports 4.0z. I still have not figured out the large disk support though.
x86 assembly
MS-DOS
Retro
github.com/ZacWalk/dos4z
LOAD"WORK",8,1
Professional Work
Principal Engineer
Microsoft·Czech Republic·Aug 2013 – Present
Microsoft is one of the world's great companies. The challenge is the sheer scale: you work on systems
with hundreds of millions of users, and you have to stay aligned with thousands of colleagues across every
time zone. It is an intense experience, and no other company I know comes close to that level of
immersion. I honestly don't know where the last 10+ years went.
2024
Helping develop Oxidizer — the Rust Substrate services framework used to power some of
Microsoft's most mission-critical services.
Wrote Oxidizer components and optimised performance, and worked with partner teams to replace
existing C# services with Rust.
2022
Improved Windows-on-Arm for developers.
Wrote the Windows-on-Arm64 backend for the GNU toolchain, working closely with the upstream and
downstream open-source compiler communities as a member developer on Linaro's compiler team. Along
the way I got a solid grasp of the Arm architecture, and trained and coached developers on Arm and
Qualcomm hardware across GPU, SIMD, CPU and NPU/DSP.
2020
Sabbatical in Australia.
2018
Led the Teams Desktop Development Team in Prague.
Owned the native desktop code in Microsoft Teams — Windows, Mac and Linux — the infrastructure
behind over 200 million active users. I worked with more than 20 separate teams to enable
platform-specific features, and led hardware video rendering in an internal fork of Chromium across
CPU/GPU, Direct3D and OpenGL. I took desktop reliability from 99.9 to 99.99 by setting up a native
crash SWAT team, and led Teams for Linux — the first Linux application in Microsoft Office. I also
led Microsoft's engagement with the Electron open-source community, regularly attending events and
joining the Electron administration board.
2015
Led development and optimisation of Skype user-data backend services.
Debian/C++ and Azure/C#, running at 50k TPS and serving hundreds of millions of users.
2013
Led a team (9 devs) building C/C++ NPAPI web browser plugins for video calling.
Powered Skype, Lync and Facebook video calling for tens of millions of users. Kept critical
functionality available by successfully transitioning to WebRTC. Optimised video rendering using
SIMD, Direct3D, OpenGL and other platform hardware support.
Agile developer and coach
Thoughtworks & independent·United Kingdom·Jan 2005 – Feb 2010
Coached clients to be more productive using agile methods, providing training in TDD, refactoring, CI and
test automation. Mostly C++ and C# projects. Demonstrated improved cycle times and quality metrics, and
leveraged a strong technical background to bridge the management and developer worlds.
Back in those days, Thoughtworks was a real leader in the industry. I met some amazing people and
learnt more than at any other point in my career.
Engineering Manager and developer
Casewise·United Kingdom·1996 – 2004
Led C++ desktop development of graphical process-modelling software through multiple full lifecycle
releases. Introduced agile methods to the company, improving quality with 60% fewer QA and user-reported
bugs. Wrote a 2D rendering framework optimised for available hardware.
Casewise was the most fun company I ever worked at, largely because of George Keeling, the founder. He
was my boss for most of the time — completely high-energy crazy in a good way. It was a small company,
and my colleagues and I did some amazing work; maybe the most enjoyable and productive period of my
career.
Graduated as part of one of QUT's pioneering cohorts shortly after it gained university status. Built a
solid foundation in computer science back when the Intel 486 was the absolute pinnacle of new technology,
which means my ability to adapt and learn new frameworks has been tested across three decades of
continuous change.
It is an extremely beautiful campus in the centre of Brisbane, if you ever get the chance to visit.
QUT's Gardens Point campus, on the river in central Brisbane.