Zac Walker

Rethinkify

Learn, unlearn, relearn — Alvin Toffler

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.

Scroll down to go back in time

My Sites

My Projects

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.

Photos

Diffractor, and the app it grew out of. Twenty-odd years of trying to get my photos in order.

  • ImageWalker 2.3 from 2006, in its dark theme, browsing a sample gallery

    imagewalker

    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.

    • C++
    • Win32 / ATL
    • 1998 – 2026

AI & machine learning

How does it actually work? I find out by writing it from scratch, on a CPU, out of stubbornness.

  • nnc chatting with Gemma 4 in a terminal at about 15 tokens a second

    nnc

    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.

    • C++20
    • x86-64 JIT
    • AVX2
    • Windows & Linux
  • Nine Fashion-MNIST images: pullovers, trousers, a coat, a bag, an ankle boot and a T-shirt

    libcmlp

    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!

    • C11
    • AVX2 / FMA
    • No dependencies
  • low-ban showing a 500 kbit/s webcam feed next to an 11 kbit/s version with face landmarks drawn on

    low-ban

    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

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.

  • price-app's viewer: a synthetic price line, long and short bands and an equity curve

    price-app

    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.

    • C++20
    • DQN
    • libcmlp + libcfindata
  • libcfindata

    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

Speed & systems

Databases, benchmarks and servers: the places where nanoseconds matter more than they should.

  • spike-db

    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.

    • C11
    • Time series
    • Windows & Linux
  • vector-experiments

    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.

    • C++20
    • SSE / AVX2 / NEON
    • x86-64 & ARM64
  • rust-http-sys

    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.

    • Rust
    • http.sys
    • Async IOCP
  • electron-bench

    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

Foundations

The plumbing that most of the other projects on this page build on.

  • dd

    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.

    • PowerShell
    • CMake + Ninja
    • Windows & Linux
  • platform-h

    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

Windows desktop

Small, fast Win32 apps with no frameworks, mostly because I enjoy it.

  • The rethinkify editor with a folder of files, a C++ file open and the agent conversation alongside

    rethinkify editor

    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.

    • C++
    • Win32 / GDI
    • Copilot agent
  • The potato browser showing its built-in start page

    potato

    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.

    • C++20
    • Win32 GDI
    • CSS, no JS
  • System Stuff charting CPU, memory, disk, network, GPU and handle counts

    system-stuff

    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.

    • C++
    • Win32
    • Diagnostics
  • ergo-active's dashboard, with keyboard and mouse activity and a break score

    ergo-active

    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

Retro

Emulators, old games and old operating systems. Nostalgia, compiled.

  • lib8bit's Windows host running a Commodore 64 BASIC demo

    lib8bit

    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.

    • C++20
    • 6510 / VIC-II / SID
    • Retro
  • Stunt Car Racer's elevated track, drawn by the software renderer

    stuntcarracer

    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.

    • C++
    • Software 3D
    • Retro
  • z-pilot's rocket towing a glowing orb over the blue, glowing edge of a cave

    zpilot

    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.

    • C++17
    • Direct3D 11
    • Game
  • An IBM 5150 personal computer with IBM on its green screen

    dos4z

    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

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.

  1. 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.

  2. 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.

  3. 2020

    Sabbatical in Australia.

  4. 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.

  5. 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.

  6. 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.

Education

Bachelor of Computer Science

Queensland University of Technology (QUT) · Brisbane, Australia · 1992

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 campus in Brisbane
QUT's Gardens Point campus, on the river in central Brisbane.