← All projects
Teaching · Earth Observatory of Singapore

ES4304 Eyes on Earth

Satellite remote-sensing tutorials that run in a browser tab. Students open a Codespace and are working with real PACE, SWOT and Sentinel data in minutes, with no environment to install and no way for a course update to overwrite their work.

JupyterPythonRemote SensingTeaching
ES4304 Eyes on Earth

Eyes on Earth

The first hour of a remote-sensing course is usually lost to conda. ES4304's tutorials are built so that it isn't: the repository opens as a pre-built GitHub Codespace with the environment already in place, and the local conda route exists mainly for instructors testing a session beforehand.

The material

Students set up their environment and register for the data accounts first — NASA Earthdata and JAXA P-Tree, one of which takes days to approve, which is exactly why it is module 0.2 and not a surprise in week six. From there the tutorials work through real scenes: Sentinel-2 over the 2023 Merapi eruption, NDVI and NBR over the Eaton Fire, ocean colour from PACE OCI, sea surface temperature, and sea surface height from SWOT.

Two details that make it hold up

The setup cell at the top of every notebook checks what is importable and installs only what is missing — so it does nothing at all in a Codespace, and still rescues someone running locally.

And when the course materials change mid-term, scripts/update.py merges the changes into a student's copy without ever leaving conflict markers inside a notebook, then tells them the few files where their own version was kept instead. A merge conflict in a .ipynb is unreadable to a student, so the updater is not allowed to create one.