Zac Walker

ZacWalk

Learn, unlearn, relearn — Alvin Toffler

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

Five things I keep coming back to. Most of the code is open source: a mixture of C++ and Rust, often for Windows, and mostly written to answer a question I could not stop thinking about.

Photos & video

Diffractor browsing a photo library
Diffractor browsing a photo library.

I take a lot of photos and videos. In 1998 I wrote my own PC photo management software, ArtMate, a tiny thumbnail browser. It was fast and minimal because life is too short for slow software. It grew into ImageWalker, shareware that turned out to be surprisingly popular, and ImageWalker grew into Diffractor.

Diffractor is free, local-only and fast, with Direct3D and SIMD doing the heavy lifting. It reads RAW, puts photos on a map from their GPS, spots duplicates even after they have been resized or re-encoded, and speaks 14 languages. It is open source too. Twenty-odd years in, I am still not sure it is finished.

I have also brought imagewalker back to modern 64-bit Windows, old versions and a new 3.0 alongside them. It shares libfiles with Diffractor: one C++20 library for media formats and metadata, so a format fix lands in both.

AI & machine learning

low-ban showing a 500 kbit/s webcam feed next to an 11 kbit/s version with face landmarks drawn on
low-ban: a webcam at 500 kbit/s, and at 11 kbit/s with the face landmarks drawn on.

My first brush with machine learning came at a Microsoft hackathon around 2015, while I was working on Skype. The idea was a video call that worked over a 2G network, at about 10 kbit/s. At that speed all you can send is a blurry mess, so low-ban tracks the landmarks of your face and sends those along too: you can at least see whether someone is smiling. I demoed it to Skype's head of design, who wore all black and really looked the part. Nothing came of it, but I still poke at it; these days a learned autoencoder runs beside a classic codec on the same webcam frame.

Having been a compiler engineer for a while, I also wondered how far I could get running an LLM on an ordinary CPU. nncpu is where that led: a Rust library and command-line app, ported from my earlier C++ implementation. It runs GGUF models such as Gemma, Llama and Qwen with quantised weights and AVX2/FMA kernels. You can chat with it, use tool calls and embeddings, or put it in your own app. No graphics card, cloud account or Python, and nothing you type leaves your machine.

Markets & money

trade-rl's viewer showing price bars, a DQN agent's positions and its equity curve
trade-rl: a DQN run on six months of ETHUSDT one-minute bars.

I have always found the financial world fascinating. In 2007 I worked at Merrill Lynch, the year it lost more than $20 billion on subprime mortgages. Not my fault. I invest in technology stocks myself and publish my research at Alpha Galactica. It is not financial advice. I also tinker with reinforcement learning and trading in trade-rl, an offline research bench written in Rust. An agent picks short, flat or long after each bar closes, and walk-forward experiments compare it with baselines and controls. The trading costs are part of the score, not a footnote.

Underneath it is trade-db, my embedded market-data database, also in Rust. Ticks, quotes and candles live in one crash-safe file, with zero-copy scans and readers that can keep going alongside a writer. It also has as-of lookups, so a backtest can ask what was known at the time rather than accidentally borrowing tomorrow's answer.

Compilers & emulators

lib8bit's Windows host running a Commodore 64 BASIC demo
lib8bit, my C64 emulator, running a BASIC demo.

I learned to program on a Commodore 64. I think it is a machine simple enough for anyone to understand how computers work. 64Ready is my educational C64 emulator in the browser: type BASIC into a live machine, single-step 6502 assembly, or watch the bus traffic as it boots. lib8bit is my embeddable C++20 C64 emulator, with a small Windows host.

When Microsoft open-sourced MS-DOS 4.0, I wanted to build it myself, but that needs the original 16-bit tools, so I wrote libdos, a DOS emulator library with command-line and windowed hosts, and its own 16-bit C compiler. Its demu runner builds and boots dos4z, a version of DOS 4.0 with bug fixes and larger disk support. It allows my IBM 5150 to boot and work well with my CF hard drive adapter.

In 2022 I wrote the proposal for Microsoft to back a GNU toolchain for Windows on Arm. It was accepted, and I worked with Linaro's compiler team and other open-source contributors to add support for that backend.

In that role I did a lot of low-level training inside Microsoft. vector-experiments started life as that course: in its 64-byte distance benchmark, hand-written AVX2 beats the scalar MSVC build by about 34 times.

Later I moved to work on Rust at Microsoft, where Oxidizer is the framework behind some of its most critical services. One of my first Rust experiments was http-sys-rust, now an async server on the Windows kernel's HTTP stack, with a benchmark harness to compare it with axum. One of our Rust experts said the first version looked like a C++ developer trying to write Rust. Fair enough.

Win32 apps

Four of my apps: the dde editor, the potato browser, sys-mate and ergo-active
dde, potato, sys-mate and ergo-active, on a Windows 95 teal desktop.

I grew up in the glory days of Win32, when an app was one small, fast .exe, and I have been writing them ever since. Around 2000 my employer still supported Windows 95, whose task manager really was basic, so I wrote my own improved version, sys-mate. It now shows live performance charts, processes, network connections and windows. Around that time I also wrote ergo-active with my London neighbour, a Swedish furniture designer. It reminds you to take a break if you have been using the computer too long.

Then I spent a few years on the other side of the fence, owning the native code in the Teams desktop app, which ran on Electron. I managed that team but did make a few Electron contributions: I swapped Electron's WTL file dialogs for plain Win32, extended its tracing so we could see where the memory went, and wrote electron-bench, which shows that the IPC path everyone argues about barely changes latency, but changes main-process CPU by more than 60 times. My longest-lasting contribution is a “temporary” fix to Chromium's build from 2018. It is still in Electron today, FIXME and all.

I have my own C++20 platform and UI layer for native apps, libdesktop, shared by the editor, browser and Diffractor. They build with dd, a PowerShell build and dependency tool that scaffolds projects and drives CMake. My editor, dde, renders with plain GDI and lets me edit, build, test and run dd projects from the keyboard, with the output beside the code. potato is the web browser I wrote to learn CSS: probably the worst in the world, but its HTML/CSS engine is now a reusable library, libwebvis. Still no JavaScript.

fast-draw is for vector diagrams and quick sketches, with its own anti-aliased software renderer. And a few games: zpilot began in 1995 as a Turbo C++ game for DOS; now it is a Windows cave flyer, hauling an orb on a swinging chain. My port of Stunt Car Racer, which I loved on my C64, draws the whole race with a software 3D renderer, without GPU acceleration.

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.