Welcome to the Notebook Progress Tracker

This website allows to track the progress of students running jupyter notebooks.
It can be useful during exercice sessions or tutorials using notebooks to know if your audience is following, and if they are able to get to the expected results.

How it works

Inside your notebooks, you send the data that you want to track using a "send" function.
On the website, you can see the data that people are sending from their notebooks as well as aggregated views of this data.

How to use

First, sign up here.
Under the sessions tab, create a new session.
Inside your notebooks, paste the following code at the beginning:
import requests

exec(requests.get("https://courdier.pythonanywhere.com/get-send-code").content)

npt_config = {
    'session_name': 'your-session-name',
    'session_owner': 'your-username',
    'sender_name': input("Your name:"),
}
In this cell, you need to provide the name of the session previously created in place of "your-session-name", as well as your username in place of "your-username". The student will have to provide a "sender" name that allows you to know who sent the records.

Then later in the code you can send variables of different types (int, float, string, numpy array, plot, image, function, class, torch Module) using the 'send' function that takes as first argument the element to send and as second argument the question number.
text = "A string"
send(text, 1)


number = 42
send(number, 2)


alist = [42, "42"]
send(alist, 3)


adict = {"answer": 42, "info": ["21+21"]}
send(adict, 4)


import numpy as np
np_array = np.random.randint(0, 10, size=9).reshape(3,3)
send(np_array, 5)


import matplotlib.pyplot as plt
plt.plot(np.arange(10), np.random.rand(10))
plt.title("My plot")
send(plt, 6)  # Note: has to be in the same cell as the plot


image = Image.open("path/to/image")
send(image, 7)


def func(a, b):
    return a + b
send(func, 8)


class MyClass():
    def __init__(self):
        super().__init__()
        self.L = torch.nn.Linear(2,3)
    
    @classmethod
    def test(self, x):
        return self.L(x)
    
    def forward(self, x):
        return self.L(x)
send(MyClass, 9)


seq = torch.nn.Sequential(
    torch.nn.Conv2d(3, 64, 3),
    torch.nn.ReLU()
)
send(seq, 10)

All options of npt_config :
npt_config = {
    'session_name': '',  # The session name chosen on the website
    'part_name': 'default',  # The part name (Default to 'default')
    'session_owner': '',  # Your username on the website
    'sender_name': '',  # Name of the user of the notebook
    'log': False,  # Log of the sending state 
}

Jupyter extension

To help creating your notebooks, a jupyter extension is available. It allows you to :
  • quickly renumber questions
  • define some parts of your notebook as todos and create a new notebook with this code replaced by a "To Do" text
For more info about how to use it, follow this link.
You can install it with:
git clone https://github.com/theevann/notebook-progress-tracker.git
cd notebook-progress-tracker
pip3 install jupyter_contrib_nbextensions
jupyter contrib nbextensions install --user
jupyter nbextension install npt-jpt --user
jupyter nbextension enable npt-jpt/main

More information

For more information about the project, please see this pdf documentation.