T👀LS for Decentralized Education: Creating Truly Open Online Learning Systems

Jeroen Van Bemmel
3 min readMay 22, 2021

--

Solving any problem sustainably requires a new generation of problem solvers. In the league of “hard problems to solve”, education surely belongs to NP complete — if we solve that, we solve many other issues.

I recently discovered Katacoda — an online learning platform by O’Reilly, combining easy content creation with browser-based guided experimentation. Although I later learned that similar concepts were conceived earlier by others, I never encountered it in that form, and I like it a lot.

Naturally, the resources provided for their “free” tier are limited. There are subscription options and I did try reaching out, but I never got a response. And frankly: The technology they use is all open source based, and not that difficult to put together — as illustrated by NRE Labs for example, a non-profit running a similar platform.

A key problem with both Katacoda and NRE Labs, is their lack of scalability in the context of providing a free decentralized service. A truly free and awesome platform for online education would attract a large amount of users, and a small centralized set of resources would never work. What is required, is a way for students to bring their own lab resources.

Following this line of thinking, I started experimenting with browser based emulators. Projects like v86 and JSLinux offer various options, using technologies like WASM to emulate x86 or ARM CPUs and run various Operating Systems. While that could work for some subset of labs, the more interesting scenarios involve networks with potentially hundreds of #SRLinux nodes — not really a good match.

So next I created SpotLab: An Ansible-based script to easily launch a cheap (currently ~$1.50/hour) AWS bare i3.metal instance. With 72 CPU cores and 512GB RAM, that should provide a decent starting point (and other instance types are possible of course). By adding a web based SSH terminal using WebSSH we can connect to this from a browser:

Lab content creation

For lab content creation we would need an online markup editor with import/export to Github: Meet Dillinger

git clone https://github.com/joemccann/dillinger.git
cd dillinger/
docker build -t eccloud/dillinger:latest .
docker run -d -p 8080:8080 --restart=always --cap-add=SYS_ADMIN \
--name=dillinger eccloud/dillinger
Dillinger running on AWS SpotLab i3.metal instance

Dillinger comes with a GitHub plug-in that lets you import from/export to github directly, so let’s configure that:

  1. Generate a personal access token at https://github.com/settings/tokens/new, check ‘repo’ scope
  2. Create a file github-config.json:
    {
    “access_token”: “<your token string>”
    }
  3. Start the Dillinger container with a bind-mounted volume (note the :Z for SELinux):
docker run -v `pwd`/github-config.json:/configs/github/github-config.json:Z ...

And then, import/export from/to GitHub started working! The plug-in is a little dated, resulting in a notice:

Deprecation notice from GitHub

…but I’m sure that could be sorted out.

Next steps

Next: Online editor with terminal connected to student provided resources

The next step would be to combine the ideas above, and extend Dillinger with a view that includes an SSH terminal. The markup language would be extended to include ‘{{execute}}’ buttons — like Katacoda — that would copy the relevant commands into the terminal on the right.

If you agree this is a good idea and you would like to participate, feel free to reach out.

--

--

Jeroen Van Bemmel

Sustainable digital transformation at Webscale — real life stories about our discoveries in the world of networking. Views represented are my own.