Here are some preliminary ideas. Suggestions? Modules that already do some of this?
An exercise is a task for students. An author makes it, then inserts a reference to it into a page. When students see the page, the exercise is embedded in the page.
A student works on the exercise, and submits a solution.
In the work I do, most exercises are make-something-like-this. Students need to be able to turn in the things they make. A human grader looks at the solution, and gives feedback.
Author
1. Creates exercise
Fill in a form, as usual when creating a node. Fields:
- Title
- Description - can include images
- Attached files
- Required by default: boolean - is this exercise required? Instructor can override for his/her course.
- Blocks progress by default: boolean - if true, student cannot proceed (submit more solutions?) unless s/he completes this exercise. Instructor can override.
- Default weight: numeric - value from 1-10 (?). Instructor can override.
- Zero or more sample solutions created by authors
- For human graded items:
- List of rubic items. Each item has a weight (e.g., Indenting 0.2, Variable names 0.3,...).
- Notes to instructors
- Notes to graders
Implementation: a node. Entity ref to sample solutions. Entity ref to rubric items.
A rubric item is a characteristic a correct solution should have, e.g., indented code for a JavaScript exercise. Each rubric item has:
- Title (e.g., Indenting)
- Ordered series of feedback messages, each with a weight. E.g.,
- You-got-it-right (“Nicely indented code.”, 1)
- Needs-improvement (“Indenting mostly OK, but some of it needs to be fixed.”, 0.5)
- You-screwed-it-up (“You forgot to indent the code properly”, 0).
- Note to instructors
- Note to graders
Implementation: a node. Should there be a ref back to exercises that use this rubric item?
GUI: A list of rubric items for the exercise, with a dropdown to add more items. A button to create a new rubric item.
Question: There could be dozens of rubric items for one project. How to help authors avoid creating duplicates?
2. Insert exercise into content
Method that works in a GUI. E.g., a button on the toolbar that opens a dialog. There’s a dropdown of defined exercises, with an “Add a new exercise” button. The author selects the exercise to include. When one is selected, part of the exercise is shown as a preview, to make sure the author has chosen the right one.
Implementation: Insert some text into the page, e.g., [exer:219]. 219 is an nid.
The author editing a page wouldn’t see [exer:219], but a placeholder, with the name of the exercise and a short preview, and an X button to delete it.
Student
Sees the exercise in the content.
Implement:Add a display mode that will use regex to detect and replace exercise references.
Q: best way to insert a node display in a node?
Each exercise has a place to enter a solution. See:
http://coredogs.com/content_media/krm_articles/feedback-system/exer1.png
and
http://coredogs.com/content_media/krm_articles/feedback-system/exer2.png
for simplified D6 things.
The solution tool might capture plain text, but not necessarily. There might be an audio recording widget for a language class. GUI editor for a writing course. For an algebra course, some way for the student to show his/her work. E.g., maybe take photos of work on paper with a phone, and SMS the images somewhere. Could be attached files. Whatever.
I guess this should be pluggable, so developers can add new input methods in the future. Is there a standard way to do this?
Implement the client/server stuff with backbone.js?
Grader
To come...
Thoughts so far?
Kieran
