A few days ago, Nicky Case released an amazing piece of work in form of an interactive guide to alternative voting systems . This work follows the track of Brett Victor's famous research on explorable explanations and immediately caught our eyes because it is a very good match for the capabilities of ourreactivenativeGUI system. We decided to replicate some of Nicky's interactive explanations in Red and see how it went. The results are pretty amazing, as it was not only relatively easy to design and code (about 8 hours in total and ~280 LOC) but also great fun! Here's how the results look:

You can, of course, try it yourself by using the latest build from the master (or macGUI) branch or, preferably, one of the prebuilt consoles:
Ballots demo source on github orzipped archive(171KB). windowsprebuilt console (273KB). macOSprebuilt console (256KB). Original web version from Nicky on github .Put the console executable in the source code folder, run it and from the prompt, just type:
red>> do %ballots.redFor linux folks, sorry guys, the GUI support is not yet ready for prime time, though in the meantime, you could use Wine, Red GUI usually runs just fine on it.
Notes for macOS users:
You need to ` chmod+x` the binary before running it from the terminal. When dragging a face quickly, it can lag behind. The macOS GUI backend is still in a development branch, and still need some work to optimize animation latencies.Implementation notes
The Red version implements only the "model1" and "ballot1" to "ballot4" interactive explanations. The rest could also be easily done in the same way, though we used up all our spare time for that as we are now focussing on the Red 0.6.2 release.
The colored shapes are images in the web version, but instead we chose to draw them using our 2Dvector DSL in the Red version. Overall, the Red version is really small, about 25-45 LOC per screen, 85 LOC for the helper code and 2D shapes. All things considered, it is significantly smaller than the web version:

This is an interesting result, as the web version uses only plain JS, no third-party framework (with the exception of the almost weightless minipubsub ). The counted JS code could maybe be shortened (excluding minification) though it already looks pretty simple to me, containing very few comments, doing mostly calculations and canvas drawing. I doubt it could be reduced significantly (any thoughts from expert JS readers about that?).
Final thoughts
This fun experiment shows that Red has the potential to be a great match for explorable explanations and other similar reactive interface needs. We hope that this demo will inspire the Red community to dig more in that direction and see what gems are lying there. For example, learning Red using such interactive visual approach would be great, don't you think so? ;-)