RunestoneInteractive / RunestoneServer

Interactive books for computer science and mathematics
http://runestoneinteractive.org
Other
575 stars 502 forks source link

Practice Interface #1130

Closed bnmnetp closed 5 years ago

bnmnetp commented 6 years ago

Todo list for making spaced practice ready for production:

  1. Implement stuff discussed in the comments below.
  2. Update other books with :practice:
bnmnetp commented 6 years ago
  1. Should practice look like any other assignment and should instructors have control over the granularity of the practice problems through the assignment interface?

    • In this case the selection process is similar to the reading and exercise selection so it would be quite natural.
    • On the negative side I think there is already plenty of complexity for instructors to understand in the assignment builder and adding one more kind of thing to add to an assignment may be too much.
  2. Keep practice as a separate idea but display it in the gradebook.

    • In this case the Practice tab will allow the instructor to configure how many days of practice and how many points each day is worth
    • Problems can become available for practice after the reading assignment deadline has passed OR after the student has marked the section complete. - We could handle the reading assignment deadline with a nightly job that would allow web2py to create the flashcards.
    • this is much simpler and I think fits the spaced repetition model a bit better.

The big question is how and when do we calculate the points for the practice stuff?

I recommend we at start with option 2, it will be easier to implement and test before the start of the school year, but would not prevent us from migrating

presnick commented 6 years ago

Let's go with option 2. Here's a list of things that I think need to be done, along with proposed assignments of people to them: 1) In the practice tab, instructor can configure the following (@ImanYZ to implement these additions):

Store all this stuff in new course_practice table.

1a) Implement self-paced mode for creating cards. Add a check when they mark a page as completed; if self-paced mode and no card yet, create it. If they unmark a page as complete, remove the flashcard. This stuff is implemented in controllers/ajax/updatelastpage().

In the metacognition visualization, explain that the pages they've marked as complete, at the bottom of the page, are the ones that are eligible for practice. Also explain under the skip button (only if in self-paced mode): "Pages that you marked as complete are eligible for practice. If you mistakenly marked a page as complete, you can remove it from practice by visiting that page and unmarking it as complete."

2) Don't actually create an assignment row for the practice assignment. Each course has a "virtual" assignment id 0, which will never be used for a real assignment because those ids are auto-assigned, starting with 1. Nothing to implement here.

3) When processing a student answer to a flashcard, compute grade (refactor to refer to same code currently used for showing status on each page), and send via LTI if there is a callback GUID for it. @presnick to implement.

4) Update assignments/index to show same info about practice progress that is shown at the top of each practice page. \views\assignments\index.html and controllers\assignments.py (def index()). Select "progress page" from user menu to test this. @ImanYZ to implement.

5) Update the progress shown at the top of each practice page based on the practice configuration from step 1. @ImanYZ to implement.

6) Fix lti.py to not take an assignment_id with /practice. Instead, default to writing id=0. @presnick to implement.

7) If self-paced, when student marks a page complete, create the flashcard for it. @ImanYZ to implement.

8) Nightly scheduled task to create flash cards for reading assignments that have ended but for which cards haven't been created yet. @bnmnetp to implement.

ImanYZ commented 6 years ago

If the practice setting is not set up yet and a student tries to practice, we should show them a message to encourage them to ask their instructor to set up the practice setting. Also, if they want to practice before the start date, we should show them another message.

presnick commented 6 years ago

I have completed #3 in the comment above. @ImanYZ please get it from my branch practice_feature.

ImanYZ commented 6 years ago

I completed: https://github.com/RunestoneInteractive/RunestoneServer/issues/1130#issuecomment-415458973

ImanYZ commented 6 years ago

I also changed _get_qualified_questions in assignments.py and _get_toc_and_questions in admin.py so that it also takes questions with no topic tag. However, I still believe all questions should have their topic specified.

ImanYZ commented 6 years ago

I completed this thread.