INGInious icon indicating copy to clipboard operation
INGInious copied to clipboard

Add unique information to user for a course

Open augustindelecluse opened this issue 2 years ago • 5 comments

Currently, there is no apparent way to store one short piece of information (URL, random seed, ...) for each student within a course. Allowing this would provide a better user-experience and prevent requests to a distant server in some cases.

For the user experience for instance, we ask the students to provide us a link to their git repository in one course. As we need to download their repository for the evaluation of every task, the student must submit the identical URL on each and every task. It would be good to ask the student to submit the link once in a task A, store it, and retrieve this link within another task B. This would prevent the user of copy-pasting the same link every time.

This could also be applied to store other relevant information for some courses. Sometime random seed are generated based on the name of a student and other information. During the evaluation, this seed is retrieved using a request to a server. Storing the seed of each student within INGInious itself would remove the need to send such requests.

augustindelecluse avatar Mar 01 '22 13:03 augustindelecluse

This would prevent the user of copy-pasting the same link [...] [in each separate task]

It reads more like you should have done a single task if it actually consumes the same input. You could argue that run time is a concern you may want to limit by splitting the tests in separate tasks. On the other hand you probably better want to be sure that a task does not fail when students try to fix their code for another task. Unless you want them to address several goals with at several steps of their code, which at this point having under the same URL is quite confusing.

Sometime random seed are generated based on the name of a student and other information.

Couldn't you statically derive it from the id of the student? Wouldn't that make more sense rather than sending a request?

mpiraux avatar Mar 01 '22 13:03 mpiraux

It reads more like you should have done a single task if it actually consumes the same input. You could argue that run time is a concern you may want to limit by splitting the tests in separate tasks

We indeed split the evaluation in multiple tasks. The students are provided with a repository with lots of tests and they need to complete the implementation of several functions. Each function is then evaluated in its specific task on INGInious. But we still need to download the repository from the student, hence the need to submit the same link for them.

On the other hand you probably better want to be sure that a task does not fail when students try to fix their code for another task.

We also have a "final" task, where every tests are run for the students. This does check that students do not break previous work when working on a task. But it feels more rewarding for them to see that they get 100% for one implementation instead of 5% on the final task (because they succeeded in the task but other must still be implemented in the future).

Unless you want them to address several goals with at several steps of their code, which at this point having under the same URL is quite confusing.

This is what we are doing, but we want to keep everything within one repository for them as it is easier to manage for us (we don't need to update a bunch of repository every time we want to update some tests) and easier for them (they might use functions from previous tasks to complete new ones, and might want to access the whole code in one place).

Couldn't you statically derive it from the id of the student? Wouldn't that make more sense rather than sending a request?

I am not entirely sure, as we are not concerned directly by this use-case. I will ask the person who is doing this approach for its course and get back to you once I am certain why they do not process like this.

augustindelecluse avatar Mar 01 '22 13:03 augustindelecluse

Unless you want them to address several goals with at several steps of their code, which at this point having under the same URL is quite confusing.

I meant at several steps in the sense that these steps are not contiguous part of a project, just a bunch of stuff to do, which I understand is not the case here.

Also, food for thoughts, there was a INGInious submit script some times ago that you could give them in their skeleton project. It would make a lot more sense to me to implement this at the client side rather than in the INGInious web app.

mpiraux avatar Mar 01 '22 13:03 mpiraux

I meant at several steps in the sense that these steps are not contiguous part of a project, just a bunch of stuff to do, which I understand is not the case here.

It is indeed not the case here.

Also, food for thoughts, there was a INGInious submit script some times ago that you could give them in their skeleton project. It would make a lot more sense to me to implement this at the client side rather than in the INGInious web app.

Do you mean a script in their repository that they need to update every time before submitting? I think that this would result in almost the same problem: instead of asking the students to send us the link, they would need to specify manually which functions have been done. We would then have a main task being dependent of this script to know which tests need to run. Furthermore, this task could not be used for the evaluation, as it depends to much on the input within the script. And we would still need a final task where students must again send us the same link.

From the student perspective, I feel that having the possibility of simply pressing the submit button at the end of a task instead of copy-pasting the link / update a script and then submitting would be way better.

augustindelecluse avatar Mar 01 '22 14:03 augustindelecluse

they would need to specify manually which functions have been done.

They still do that ultimately by clicking the submit button on tasks they are interested in.

We would then have a main task being dependent of this script to know which tests need to run.

The script could submit to multiple tasks.

And we would still need a final task where students must again send us the same link.

Add it to the tasks to submit to but don't run any grading before the end?

From the student perspective, I feel that having the possibility of simply pressing the submit button at the end of a task instead of copy-pasting the link / update a script and then submitting would be way better.

You could guess the URL by inspecting the remotes in the git repo config. You could guess what functions are should be ran by running the functions with trivial inputs and catch the ones not failing with NotImplementedError or similar boilerplate exceptions in the skeleton. What functions to submit could also be arguments of the script.

mpiraux avatar Mar 01 '22 14:03 mpiraux