Building an experimental virtual labs cloud with Eclipse Che on a private k8s cloud in the university

I’ve been experimenting with various virtual labs technologies in the last years. Even if the recent months have kept me away from my blog, I think it’s time for an update on what we’re trying to experiment, when the pandemics consequences permit.

We’re aiming at experimenting, for next fall’s back to school, the use of Eclipse Che for computer science labs, for some of our students. I’ve “hired” a team of motivated students to help me with this project, and we bought a nice server to host our experiments.

Eclipse Che provides a “so called” Kubernetes-ready Web IDE and other tools that can be used in programming/development projects (test tools, language integrations, etc.). Why not for the labs in the university.

We’re looking forward to test its use by our students, deployed on a private k8s cluster, to be able to evaluate the UX for our coding labs. This should provide some benefits in terms of ease of deployment for programming environments that our students can use for distance learning, compared to the current situation which requires local installation of an IDE, and language tools. This should save us of having to support such installations on various operating systems (including machines in our traditional labs, inside the school walls).

The pandemics has forced us to switch to distance learning, without sufficient preparation (and resources), which resulted in rather chaotic situations for some students. We seek to evaluate if such “cloud labs” could bring some agility in the rollout of some classes.

Beyond the evaluation of the learner experience, this evaluation also aims at understanding if this brings some benefits for the professors too. I’m thinking of applying some sort of devops-related process to the fabrication of learning materials, for the labs parts. This may result in additional quality. I’ve written before on some of these ideas, if you’re curious. I’m not completely sure of the reception by my faculty colleagues, sometimes afraid by all this cloud buzz.

Another aspect of this evaluation would be on the TCO or other related economic aspects. The impact on our IT department could be meaningful, if we’re changing paradigm.

As we’ll be using Eclipse Che in the novel context of programming labs, this should require the development of some integration with our LMS. The initial step is authenticating students, which should be feasable with Keycloak and Shibboleth/SAML. Next, I’m thinking of an LTI plugin to plug Eclipse Che and Moodle. In the end, I’d like to have some tools to be able to provide traces of activity for the labs, so as to include that in learner activity dashboards. This could be used for formative evaluation, grading and such, but also to assess the calibration of effort of teaching instructions, problems, and other activities which student perform in an unattended way. This is particularly important I think so that labs aren’t performed like in a tunnel, where instructors have poor visibility on what difficulties students are facing. This is even more important in distance learning situations, we’re all confronted to at the moment.
Back to Eclipse Che, it isn’t particularly designed for learning environments, so I hope our use cases will be compatible with the other mainstream uses. I’m a member of the Eclipse community (formally, but not really active), but I hope I’ll have enough time and energy to be able to bring such use cases in the community, and hopefully find other parties interested.

Somehow, the pandemics acts, here also, as a factor of increased digitization, but I’d prefer to be conservative, with a few key principles, in line with our public service nature : using free software/open source technology, hosting on our own private infrastructure (respecting our users privacy), drinking our own champagne (i.e. using the same tools for producing teaching materials, and delivering labs, for instance), and eventually contributing what we’ve assembled as reusable components for others.

In the end, the only measurable success factor should be the increase in learning efficiency, hopefully.

I’ll try to blog on our progress along the way. Stay tuned.

Added docker container to my org-teaching framework to ease org-mode exports

I’ve improved a bit the org-teaching framework in order to prepare for the next edition of the CSC4101 classes.

I’ve now added a docker container which is in charge of performing the HTML or PDF exports of the slides (using org-reveal) or handbooks (using LaTeX).

Emacs and org-mode are still advised for editing contents, but having this container in the loop ensures that colleagues are able to preview the changes to the teaching material, and I’m no longer a bottleneck for generating the handouts. This also allows to export in a reproducible way, which doesn’t depend on my Emacs config tweaks.

I’ve also added Gitlab pages to the project’s CI so that the docs are updated live at https://olberger.gitlab.io/org-teaching/.

It’s probably not yet rady for use by anyone else, but I’d be glad to get feedback 😉

Safely testing my students’ PHP graded labs with docker containers

During the course of Web architecture and applications, our students had to deliver a Silex / Symfony Web app project which I’m grading.

I had initially hacked a Docker container to be able to test that the course’s lab examples and code bases provided would be compatible with PHP 5 even though the nominal environment provided in the lab rooms was PHP 7. As I’m running a recent Debian distro with PHP 7 as the default PHP installation, being able to run PHP 5 in a container is quite handy for me. Yes, PHP 5 is dead, but some students might still have remaining installs of old Ubuntus where PHP5 was the norm. As the course was based on Symfony and Silex and these would run as well on PHP 5 or 7 (provided we configured the right stuff in the composer.json), this was supposed to be perfect.

I’ve used such a container a lot for preparing the labs and it served me well. Most of the time I’ve used it to start the PHP command line interpreter from the current dir to start the embedded Web server with “php -S”, which is the standard way to run programs in dev/tests environment with Silex or Symfony (yes, Symfony requires something like “php -S localthost:8000 -t web/” maybe).

I’ve later discovered an additional benefit of using such a container, when comes the time to grad the work that our students have submitted, and I need to test their code. Of course, it ensures that I may run it even if they used PHP5 and I rely on PHP 7 on my machine. But it also assures that I’m only at risk of trashing stuff in the current directory if sh*t happens. Of course, no student would dare deliver malicious PHP code trying to mess with my files… but better safe than sorry. If the contents of the container is trashed, I’m rather on the safe side.

Of course one may give a grade only by reading the students’ code and not testing, but that would be bad taste. And yes, there are probably ways to escape the container safety net in PHP… but I sould maybe not tempt the smartest students of mine in continuing on this path 😉

If you feel like testing the container, I’ve uploaded the necessary bits to a public repo : https://gitlab.com/olberger/local-php5-sqlite-debian.

Using org-mode and org-reveal for teaching material

I’ve finally put together in a single example repo an example of the way I manage teaching material with org-mode.

It needs more docs and work, but should be usable. Docs and demo at http://www-public.tem-tsp.eu/~berger_o/org-teaching/ and the Gitlab repo at https://gitlab.com/olberger/org-teaching for those curious.

It doesn’t intend to be a full-fleshed product (also the name is just a codename), but release early, release often, they said 😉

Of course, teaching requires much more stuff than slides and handbooks, but eh, that’s my contribution for the moment.

Update 2017/05/18: I’ve updated the docs and repo to include generation of a “printed slides deck” in PDF, using DeckTape.

Deploying parallel Eclipse installations for teaching labs

I’ve worked on documenting and automating the deployment of Eclipse installations for several teaching labs of Telecom SudParis.

The recently introduced Eclipse Installer (Oomph) allows to install several parallel Eclipse installations containing diverse versions of Eclipse and bundles, so that each specific installation only contains a limited set of features, and that common plugins are pooled in a shared space.

This allows to deploy different Eclipse installations for different course labs, containing only the needed features, and minimizing the disk space needed for the whole.
Previously, we installed pretty much everything in a single place (yum install eclipse*), which lead to providing students with all possible languages support and features, on every machines, by default.
One of the main expected benefits of the new approach is to minimize Eclipse startup times, but this should also help avoid conflicting plugins.
If the experiment proves useful, we’ll then have one Eclipse installation for each needing computer science lab, all under different subdirs of /opt/eclipse/. For instance students registered in CSC4101 will start Eclipse by executing /opt/eclipse/CSC4101/eclipse/eclipse, giving them features for PHP and Symfony development (resp /opt/eclipse/CSC4102/eclipse/eclipse for CSC4102, for Java + Maven, etc.).

I’ve made available a document which explains the process, which was originally documented using org-mode’s babel feature which allows to write “litterate devops” documents containing executable instructions. I’ve used a Vagrant + Virtualbox setup to create the installation inside a Fedora VM, which mimics the target system for our lab machines.

The git repo of the corresponding project should be accessible for anyone interested.