Code Monkey home page Code Monkey logo

dynamicsbook's Introduction

PrairieLearn

PrairieLearn is an online problem-driven learning system for creating homeworks and tests. It allows questions to be written using arbitrary HTML, JavaScript, and Python, thus enabling very powerful questions that can randomize and autograde themselves, and can access client- and server-side libraries to handle tasks such as graphical drawing, symbolic algebra, and student code compilation and execution.

GitHub Actions build status

Documentation: https://prairielearn.readthedocs.io/

Paid hosting and support: https://www.prairielearn.com/

dynamicsbook's People

Contributors

eliving2 avatar jdubulew avatar mwest1066 avatar

Stargazers

 avatar

Watchers

 avatar

dynamicsbook's Issues

Make question server code more general.

Don't pass params to server.gradeAnswer() for questions. Instead have a question class that implements this, or other things like automating the getData() pattern.

Score CSV and full JSON export.

Add an interface to the client to GET /export.csv and create a similar export.json endpoint. The main question here is how to handle authentication. The link needs to include auth information in the request headers, so it needs to be generated by javascript, but it then needs to trigger a download/file-save in the browser.

Add "courses" as a concept.

Add the concept of a "course" to the system, with a CID (course ID). Courses should contain lists of users, questions, and tests. On the client side there should be a "currently active course" concept, and the server API should be augmented to take a CID parameter to operations like GET on all questions or tests, so that we just get the appropriate tests and questions.

Add related resources information to questions.

Add a field for "related resources" in the info.json for each question and display it somewhere on the question page (presumably in the sidebar).

Eventually this should augmented by recommendation-engine-generated resources and click-throughs should be tracked.

Add interface links from questions back to tests.

Students frequently requested being able to find out how a given practice exam question mapped back to the homework question numbering. In general this is a problem when we re-use questions and users want to be able to see the back-mappings to tests from questions.

Exam ordering is wrong after grading

Clicking "New attempt at this exam", then doing a question, then grading, then clicking "Exams" in the navbar, gives a list of exam attempts with the new exam at the bottom, not at the top where it should be.

Server open-files issue.

At the moment the server runs out of open files after some amount of time. This can be mitigated by increasing the open-file-handle limits and periodically restarting the server, but we should see whether we can also force long-standing connections to be terminated more quickly.

Should we shift code for tests into the client?

At the moment all code and HTML associated with a specific test is dynamically loaded, but perhaps this should just be hard-coded in the client, given that we don't really have all that many different types of tests?

Use node-subprocess to isolate user-written server code.

We should spawn helper node subprocesses and use them to run any instructor-written code (question and test server.js code). This would allow:

  • Robustness to arbitrary errors in code.
  • Protection of global state.
  • Implementation of timeouts.

Add better instructor statistics.

Instructors need to be able to easily access aggregate statistics, such as student score distributions on each homework, completion percentages for assessment items, etc. This should probably be done by "tests", as it is rather test-specific. We should probably also expose as much of this as possible to students, or at least allow this on a course-by-course basis.

Add online editing of all data.

Add a web interface allowing online editing of questions, tests, etc. This could be done by shifting question/test code into the DB, or by just directly editing the on-disk files.

Fix "effective user" mode.

There is currently code to differentiate the "effective user" from the "authenticated user", just like the unix notion of UID/EUID. This allows instructors to act as if they were a particular student, which is an easy way to see user scores, etc, without adding a special instructor view of information that a student can already see about themselves. We need to fix:

  • EUID is currently reset on some page-loads and is generally a bit flakey. This needs to be fixed.
  • We need a better interface for switching EUID for instructors, that should work for both large and small courses.

What is the testing story?

Should each question include set of test data so we can run automatic tests against the full system, or at least part of the system?

Improve client error reporting and connectivity monitoring.

Add a global handler for timeouts and errors on data load (JS, images, other files) and add a generic "retry" interface to the client. This should involve both automatic and manual retries, with generic user feedback (e.g., an error div at the top of the page).

Add answer box for questions

Add a separate div for questions to use as a "Answer Box" to display the true answer after grading is complete.

Think about names.

The names we have for various objects may not be very good. For example:

  • "test" could be called "assessment" or something more generic.
  • "qInstance" could be called "questionInst" so that it is more obvious what it is, and so that it won't conflict with future instance-types that also start with the letter "q".

Enable a hosted platform experience.

Set up a hosted experience so that PrairieLearn can be used without having to set up dev and deployment instances for every class. This depends on:

  • 10 Add courses as a concept.

  • 11 Allow online editing of data.

  • Actually setting up a hosted instance, perhaps at prairielearn.engr.illinois.edu or prairielearn.illinois.edu or similar.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.