Devin graduated from Middle Tennessee State University in 2020, majoring in math and computer science. Aiming for a PhD in computer science, he applied for graduate school and was accepted into Vanderbilt’s PhD program. Devin has always loved academia and wants to eventually become a professor to share knowledge of both computer science and math---and especially their interactions---with new generations. At Vanderbilt, Devin works as a research assistant, and has the opportunity to explore another area of interest: developing educational software.
Snap! is an extremely powerful general programming language, but has historically been trapped running in the browser. There are some existing extensions like Snapp! that allow projects to run as standalone executables, but they are still running on a conventional computer. Even the micro:bit extension for Snap! communicates only over bluetooth, rather than running on the actual hardware. Because of this, we have extracted the underlying runtime of Snap! into a virtual machine written exclusively in no-std Rust, which allows it to run anywhere, be it a browser, computer, or embedded microcontroller. Specifically, this tool is a virtual machine for NetsBlox, a fork of Snap! that adds several networking utilities like querying web APIs and databases, as well as passing messages between projects over the internet. Thus, NetsBloxVM offers users the full power of Snap!, including sprites, cloning, watchers, multiple scripts, broadcasting, custom blocks, rings, etc., as well as the networking abilities of NetsBlox.
NetsBloxVM is architected so that the core runtime is identical on any machine and only the device-specific features (like networking) need to be added. In this talk, we will cover some of the basic design principles relevant to users and showcase a version of NetsBloxVM that runs directly on ESP32 microcontrollers. Already implemented is support for a completely over-air experience (i.e., no need for flashing the device over and over) including a debugger window conveniently built right into the NetsBlox IDE and the ability to configure the device wirelessly on the fly. This gives users a similar plug-and-play convenience they have come to love in Snap! while also opening the door for Snap! and NetsBlox to extend further into the space of embedded programming and makers projects.