########################################################### Augmenting Capture The Flag with Stuff with More Technology ########################################################### .. sidebar:: Contents .. contents:: :depth: 3 :local: ===== What? ===== The `Carnegie Mellon University KGB `_ plays a delightful game called `Capture The Flag With Stuff `_. The game relies on wall-clock time and previously we just used a bunch of stop-watches manually set by hand. That stunk. =================== What have you done? =================== We have brought technology to bear. In particular, we use MQTT to dispatch messages about the current game state to subscribers and rely on NTP to keep devices in temporal synchrony. We have hardware devices, based around the ESP8266 and `nodemcu `_, at the teams' jails within the game, and additionally offer open, anonymous subscription to the data feed. The devices' firmware (in Lua) is available `here `_. The device itself, at least for v1, looks like this: .. image:: ctfws-iot-jailtimer.jpg :alt: A picture of the CtFwS jail timer device :width: 50% Because machine-readable messages over MQTT is perhaps not the friendliest thing in the world, we have written several wrappers around the core, provided in addition to the devices themselves. For player use, there is * `an Android application `_ (`on the market `_) that I wrote (with some help from Cameron Wong), which can display various stats about the game. * `a webpage `_ (`deployed here `_) which recreates much of the above application's interface and has its own stylistic tweaks. Full credit to Michael Murphy for this. The judges primarily interact with the system through the above website's judge mode. If necessary, beside the webpage source, there are also some utility scripts for speaking the protocol, suitable for use by the head judge. For the techies, the protocol definitions, server configuration, and some autonomic daemons are available at https://github.com/cmukgb/ctfws-timer-host. .. note:: This project lives in the ``ee`` part of my website mostly as a historical accident; I put it here because it involved hardware, but there's very little engineering to be found. =============== How Can I Help? =============== All the usual open-source ways: Bug hunting, documentation... Would you like to write or build another frontend for us? Please feel free to observe the existing clients' behaviors, but the protocol document should be a complete description of the wire protocol. If you find deficiencies, please advise.