Update
All checks were successful
Deploy to Pages / build (pull_request) Successful in 3m1s

This commit is contained in:
Andras Schmelczer 2026-05-28 15:36:34 +01:00
parent f5f017b01f
commit fcec028c74
26 changed files with 46 additions and 115 deletions

View file

@ -14,12 +14,8 @@ audience: technical
links: []
---
A small city in Unity where the traffic lights were driven by a REST API. Contestants in a PLC cybersecurity event would write control logic; bad logic made cars crash, and they'd watch it happen.
Most security challenges punish wrong answers with a red "incorrect." This one punished them with car wrecks, and people learned faster. A PLC cybersecurity event in the summer of 2018 needed something visceral; I built a small Unity city where the traffic lights were driven by a REST API and contestants wrote the control logic.
Three things are worth saying about it:
All decisions ran on the server and got broadcast to clients. The harder problem wasn't the simulation; it was making the broadcast fault-tolerant on conference Wi-Fi without flooding it. I built it solo, including the models and animations in Blender. Not a flex, just context for why everything's a little janky.
- **Visual feedback was the whole point.** Most security challenges punish wrong answers with a red "incorrect." This one punished them with car wrecks, and people learned faster.
- **Server-client, all decisions on the server.** Every agent's behaviour was computed centrally and broadcast. The harder problem wasn't simulation; it was getting the broadcast to be fault-tolerant on the conference Wi-Fi without flooding it.
- **Built it solo, including the models and animations in Blender.** Not a flex, just context for why everything's a little janky.
There was also a HUD overlay for tweets, which felt clever at the time and dated horribly. Skip that part.
There was also a HUD overlay for tweets. It felt clever at the time and dated horribly. Skip that part.