Automate Creation and Management of Problems and Assignments
I am currently managing dozens of practice problems that comprise a set of sample practice problems for CS 111 at MiraCosta College.
We are converting these from Replit and anticipate continuing to add to them over time.
I would like to be able to use Gradle tasks to
- Convert the README.md files to index.html. (I use the Python markdown module to do this manually.)
- Zip them together with the code and test files (if present.)
- Upload them as a problem.
The returned urls, or the ids that compose the URLs should be saved and stored in a property file. (Right now I just copy and paste text into a file.)
Other modules in the repository might represent an assignment and be dependent on a set of problems. Ideally, if any problem was modified or created then it would be built or updated on CodeCheck. Then any assignments that contained that problem would also be built. New assignments based on existing problems could also be created and the URLs or IDs could be stored in the repository.
This would make it easier for our team to collaborate on practice problems and maintain a single repository so that everyone benefits from changes and additions.
@scerruti, I share your woes over maintaining CodeCheck problems and assignments. However, I believe this is something you have to do mostly on the source side of the process. Concretely, what do you suggest should be changed on the server side to simplify this task?
I see some possible feature requests:
- Make CodeCheck accept markdown
index.mdfor the problem text. On a value vs. effort prioritization framework, this should be low effort, but also very low value, because not all users use markdown, and converting to HTML can easily be automated on the client side, anyway. (I use pandoc for this.) - Move the select file browse button to a fixed position at the top of the problem upload/edit page. This would be a very low effort, high value improvement, because it would avoid the painful scrolling when you are updating frequently.
- Provide a programmatic interface to send a ZIP a file to the Edit URL of an existing problem, avoiding manual scrolling and clicks. Requiring a key press or a single click on a fixed position button would be acceptable, too. This might be possible already, using
curlorwget, maybe? This would be very high value, and probably low to medium effort. - Allow comments to be included in the assignment text input on the Edit Assignment page. We could use this to store problem names or extra information to help identify the problems. Very low effort, low to medium value.
- Have a programmatic interface to input the assignment text (and deadline). I seldom need to update assignments, so I'd rate this very low value, low to medium effort.
Thanks for sharing the details of your maintenance procedure. Mine is quite similar. I keep a directory for each of my problems. I store the Public/Edit URLs on a comment in a hidden section of the main source file. This makes it easy to find problems with a grep <URL>. I use a Makefile with rules to convert markdown to HTML, and to update a cc.zip file when needed. For assignments, I store the problem URLs as well as the public/edit assignment URL in s single file, in a separate part of the directory tree. For single problem assignments, I store the public/edit URLs of the assignment together with the problem URLs.
I've also tried keeping a spreadsheet with:
- An assignment name (file path) / assignment URLs table,
- A problem name (path) / problem URLS table,
- A assignment url / problem table.
With some file naming discipline, we could build these tables with simple bash scripts.
P.S.: You have an exposed Edit URL in your github repository. You may want to change this.