Code Monkey home page Code Monkey logo

honours-2023-adaptive-learning-tool's Introduction

Overview

uLearn is an adaptive learning tool designed to personalize the learning experience for students.

image

Features

  • Dynamic Question Difficulty based on global student performance.
  • Track individual student mastery for each Topic.
  • Use IRT to identify relationships between individual students and the questions to accurately recommend questions.

Pre-Requisites

Before you can install our app, you must have the following pre-requisites:

Services Version
Node.js > 21.6.2
NPM > 10.5.0
Docker Desktop > 4.28.0
Python > 3.7
R > 4.3.2
Git > 2.39.3

Our app also requires come R & Python packages of a certain version. These requirements are highlighted below:

Packages Version
rpy2 > 3.5.15
pandas > 2.2.1

These are just the recommend versions for each of the above services and packages. Other verisons (older/newer) may also work. However, compatability for these has not been tested.

Installation

The recommend way to install our app is to use the following steps:

  1. Clone the repository using https://github.com/SatanshuMishra/honours-2023-adaptive-learning-tool.git.
  2. Navigate into honours-2023-adaptive-learning-tool. Install system dependencies:
npm install
  1. Initialize .env and .env.local files.

.env:

DATABASE_URL = # Enter the URL to the database here.

.env.local

JWT_SECRET= # A secure key that will be used to encrypt your JWT
PASSWORD_ENCRYPTION_KEY= # A secure key that will be used to encrypt your passwords.
  1. Open Docker. Start the docker containers using a terminal of your choosing:
docker-compose up [-d]
  1. The system will be live @ localhost:3030.
  2. Built into the docker-compose is a MySQL server and phpmyadmin live @ localhost:8080.

Logging In

This learning tool uses a specific way to log users into the system:

  1. By default, the username SystemAdmin is available to you. First go to localhost:3030 and Sign-Up using the aforementioned username.
  2. Once you successfully sign-up, use the same credentials to sign-in.

You are now logged in!

Inserting Questions

The learning tool offers a simplifed way to load questions. Lets go through the steps:

  1. Ensure you are logged in as the SystemAdmin user. You should see Developer Tools at the bottom of your dashboard.
image
  1. Open your file explorer. Navigate into honours-2023-adaptive-learning-tool/app/data. Here you will notice one file called dummyData.ts. This is the file that will be queried when we add the questions. Here you have two options, you can create your own questions in this file. Or you can use the pre-made questions in the four other files provided.
  2. If you want to use the pre-given questions, then rename the appropriate file to dummyData.ts.
  3. Return to the app and select the first button the Developer Tools. This will add all the questions in the file. Once the process is compelete, refresh the page to see the topic on the dashboard.

Important Considerations when Creating your own Questions:

To generate your own questions, you will need to take some important factors into consideration. It is IMPORTANT that the questions follow the following structure (Also given in dummyData.ts):

  difficulty: number; // A number between 0 - 1.
  question: string; 
  code?: string; // Code is optional for each question.
  answers: string[]; // Array of 4 strings.
  correct: number;
  explanations: string[]; // Array of 4 strings, Each refering to the same index value in answers.
  bloomTaxonomy: string; // One of Remembering, Understanding, Applying, Analyzing, Evaluating or Creating.
  timeTakenSeconds: number;
  topic: string; // All questions with the same topic will be grouped together.

If you want to change the bloomTaxonomy (i.e., Category) of the question, you will need to either add these manually to the Database (See Database Section) or add logic to automatically add new categories to the database on question insert.

Deeper changes to the question structure will require revaluation of the question selection code.

Database

The following is the database structure used in this learning tool and their uses:

/* STORES SIGN-UP ABLE USERNAMES: YOU CAN ONLY SIGN-UP IF YOUR USERNAME IS IN THIS TABLE. VALUES MANUALLY INSERTED.*/

studentCode (
	code VARCHAR(255) PRIMARY KEY NOT NULL,
	isRegistered BOOLEAN NOT NULL DEFAULT FALSE
)

/* STORES SIGNED-UP STUDENT INFORMATION.*/

student (
  studentID BINARY(16) NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  username VARCHAR(255) UNIQUE NOT NULL,
  password VARCHAR(255) NOT NULL,
  completedBonusContent BOOLEAN NOT NULL DEFAULT FALSE,
  FOREIGN KEY (username) REFERENCES studentCode(code)
)

/* STORES QUESTION TOPICS. ADDED AUTOMATICALLY AS QUESTIONS ARE ADDED.*/

questionTopic (
	topicID BINARY(16) NOT NULL PRIMARY KEY,
	name VARCHAR(255) UNIQUE NOT NULL,
	image BLOB
)

/* STORES QUESTION CATEGORIES. MANUALLY INSERTED.*/

taxonomyCategory (
	categoryID BINARY(16) NOT NULL PRIMARY KEY,
	name VARCHAR(255) UNIQUE NOT NULL
)

/* STORES QUESTIONS ADDED TO THE SYSTEM */

question (
	questionID BINARY(16) NOT NULL PRIMARY KEY,
	topicID BINARY(16) NOT NULL,
	assignedDifficulty DECIMAL(4, 1) NOT NULL,
	modifiedDifficulty DECIMAL(4, 1) NOT NULL,
	categoryID BINARY(16) NOT NULL,
	assignedCompletionTime DECIMAL(5, 2) NOT NULL,
	modifiedCompletionTime DECIMAL(5, 2) NOT NULL,
	question TEXT NOT NULL,
	code TEXT,
	FOREIGN KEY (topicID) REFERENCES questionTopic(topicID),
	FOREIGN KEY (categoryID) REFERENCES taxonomyCategory(categoryID)
)

/* STORES ANSWERS ADDED FOR QUESTIONS ADDED TO THE SYSTEM*/

answer (
	answerID BINARY(16) NOT NULL PRIMARY KEY,
	questionID BINARY(16) NOT NULL,
	answerDescription TEXT NOT NULL,
	answerExplanation TEXT NOT NULL,
	isCorrect BOOLEAN NOT NULL,
	FOREIGN KEY (questionID) REFERENCES question(questionID)
)

/* STORE STATISTIC DATA FOR ALL STUDENTS ON THE SYSTEM */

statistic (
	statID BINARY(16) NOT NULL PRIMARY KEY,
	studentID BINARY(16) NOT NULL,
	questionID BINARY(16) NOT NULL,
	chosenAnswerID BINARY(16) NOT NULL,
	isCorrect BOOLEAN NOT NULL,
	timeToAnswer DECIMAL(10, 3) NOT NULL,
	createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
	FOREIGN KEY (studentID) REFERENCES student(studentID),
	FOREIGN KEY (questionID) REFERENCES question(questionID),
	FOREIGN KEY (chosenAnswerID) REFERENCES answer(answerID)
)

/* [IMPORTANT FOR ML] STORES THE IRT DIFFICULTY OFFSET AND MASTERY FOR EACH STUDENT FOR EACH TOPIC - CATEGORY PAIR. */

studentKnowledge (
	knowledgeID BINARY(16) NOT NULL PRIMARY KEY,
	studentID BINARY(16) NOT NULL,
	topicID BINARY(16) NOT NULL,
	categoryID BINARY(16) NOT NULL,
	mastery DECIMAL(5, 2) DEFAULT 0.5 NOT NULL,
	difficultyOffset DECIMAL(5, 2) DEFAULT 0 NOT NULL,
	FOREIGN KEY (studentID) REFERENCES student(studentID),
	FOREIGN KEY (topicID) REFERENCES questionTopic(topicID),
	FOREIGN KEY (categoryID) REFERENCES taxonomyCategory(categoryID)
)

/* STORES STUDENT MASTERY CHANGES OVER TIME. DOESN'T STORE ACTUAL VALUES BUT THE CHANGE. */

studentLogMastery (
	studentLogID BINARY(16) NOT NULL PRIMARY KEY,
	studentID BINARY(16) NOT NULL,
	topicID BINARY(16) NOT NULL,
	categoryID BINARY(16) NOT NULL,
	mastery DECIMAL(5, 2) NOT NULL,
	createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
	FOREIGN KEY (studentID) REFERENCES student(studentID),
	FOREIGN KEY (topicID) REFERENCES questionTopic(topicID),
	FOREIGN KEY (categoryID) REFERENCES taxonomyCategory(categoryID)
)

/* STORES STUDENT DIFFICULTY OFFSET CHANGES OVER TIME. */

studentLogOffset (
	studentLogID BINARY(16) NOT NULL PRIMARY KEY,
	studentID BINARY(16) NOT NULL,
	topicID BINARY(16) NOT NULL,
	categoryID BINARY(16) NOT NULL,
	difficultyOffset DECIMAL(5, 2) NOT NULL,
	createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
	FOREIGN KEY (studentID) REFERENCES student(studentID),
	FOREIGN KEY (topicID) REFERENCES questionTopic(topicID),
	FOREIGN KEY (categoryID) REFERENCES taxonomyCategory(categoryID)
)

/* STORES CHANGES IN QUESTION DIFFICULTY OVER TIME. */

questionLogsDifficulty (
	questionLogID BINARY(16) NOT NULL PRIMARY KEY,
	questionID BINARY(16) NOT NULL,
	difficulty DECIMAL(3, 2) NOT NULL,
	createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
	FOREIGN KEY (questionID) REFERENCES question(questionID)
)

honours-2023-adaptive-learning-tool's People

Contributors

satanshumishra avatar

Watchers

 avatar  avatar

Forkers

engasa

honours-2023-adaptive-learning-tool's Issues

๐Ÿ‘พ Implement Performance Statistics Collection.

The following tasks are related to collecting performance statistics from the questionnaire:

  • Implement addStatistics function to create fetch request.
  • Implement addPerformanceStatistics endpoint.
  • Collect data required performance statistics relation.

๐Ÿ‘พ User-Auth

The following tasks relate to user-auth pages (i.e., Sign-In and Sign-Up):

  • Provide Client-Feedback for no account found on Sign-In.
  • Provide Client-Feedback for Username already exists on Sign-Up.
  • Provide checks that password is secure on Sign-Up.
  • Provide checkbox to ensure Study Guidelines are being followed on Sign-Up.
  • Have Sign-Up request sign in student and re-direct to Sign-In.
  • Check if valid Token already exists (on back-end) and return if true.

๐Ÿ‘พ Fetch Student Data (Non-Critical)

The following tasks relate to fetching student data from the student relation. This data is non-critical (i.e., Doesn't not include the user's password):

  • Create the endpoint to query student data without the password.
  • Create a Student interface.
  • Add checks in place to ensure only one student is returned in the endpoint.
  • Create function to place the fetch request to the endpoint.
  • [Maybe] Convert function into script to be re-used at multiple locations.
  • Return the student data object to be used as required.

๐Ÿ‘พ Questionnaire

The following tasks are related to the questionnaire:

  • Solve Bug where Loading Screen is visible indefinitely.
  • Change UI/UX of Quiz Panel to new updated design.
  • Change UI/UZ of the Answer panels to updated design.
  • Implement Responsive behaviour.
  • Solve bug where first answer option is not selectable.
  • #28

๐Ÿ‘พ Loading Screen

The following tasks relate to the development of the loading screen visible while data is been loaded:

  • Design Loading Screen.
  • Provide student with informative text that randomizes (for interaction).
  • Add Penguin GIF.

JSON Web Token

The following tasks relate to JSON Web Token (JWT) and it's implementation in the app:

  • Fix recursive page refresh bug.
  • Standardize route responses.
  • Simplify and organize routes to better suit JWT.

Validate Token

The following tasks relate to the Validate Token Script:

  • Convert Validate Token code into a re-useable script.
  • Replace any instance of Validate Token code with script. Make any necessary changes.

๐Ÿ—๏ธ Database Schema

Design and implement Database Schema that accommodates data storage for various statistics and machine learning. The following are specific tasks that need to be completed related to this:

  • Re-format student relation to ensure unique username per person.
  • Add check to Sign-Up to ensure students know if their username is available.
  • Change UUIDs to use BINARY(16) datatype.

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.