Giter VIP home page Giter VIP logo

myrmey-assist's People

Contributors

farkam135 avatar snguyens avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Forkers

jnguy142

myrmey-assist's Issues

Add /api/addCompletedCourse and removeCompletedCourse

Create a POST /api/addCompletedCourse and POST /api/removeCompletedCourse that takes in 2 parameters, the student's myrmeyid jwt and the name of a course to add to their completed list or remove. The handler should then verify the myrmeyid and use their hashed id in the myrmeyid payload and the course name parameter to call MYRMEYDB.addCompletedCourse and MYRMEYDB.removeCompletedCourse (needs to be added to myrmeydb as well) and return the result.

Add year selection

Currently year_term is pulled automatically but this creates issues with summer sessions

Develop in house ratemyprofessor

Create an in house ratemyprofessor. Create a professors table that has all the professors and their ratings and allow students to add ratings if they have had the professor before.

Setup postgreSQL connection from server

We will need a postgreSQL instance setup to store grades and additional student courses. Setup a table called grades and courses and create a connection to the instance within server.js.

grades table columns:

  • id
  • year_term
  • dept
  • num
  • instructor
  • grade

courses table columns:

  • id
  • course

Search Results Component

Search Results Component

Component that represents the UCI WebSoc search results.
The search results are a list of course titles along with their course offerings. The course offerings should be their own component! Refer to the results page of any search on UCI's WebSoc.

Props

addCourseOffering: Function that is called when a user adds a course offering to their planned list. Should pass the course offering object that was added as a parameter.
courses: The search results to display.
Example courses:

[
    {
        "dept": "COMPSCI",
        "num": "113",
        "name": "CMPTR GAME DEVLPMNT",
        "offerings": [
            {
                "Code": "34010",
                "Type": "Lec",
                "Sec": "A",
                "Units": "4",
                "Instructor": [
                    "DENENBERG, D.",
                    "DEVANIRA, D.",
                    "BAER, N."
                ],
                "Time": "MWF 5:00- 5:50p",
                "Place": {
                    "value": "HG 1800",
                    "href": "http://www.classrooms.uci.edu/GAC/HG1800.html"
                },
                "Max": "131",
                "Enr": "73 / 110",
                "WL": "n/a",
                "Req": "183",
                "Rstr": "A",
                "Textbooks": {
                    "value": "Bookstore",
                    "href": "http://uci.bncollege.com"
                },
                "Web": {
                    "value": "Web",
                    "href": "http://www.ics.uci.edu/~ddenenbe/113-125/"
                },
                "Status": "OPEN"
            }
        ]
    },
    {
        "dept": "COMPSCI",
        "num": "115",
        "name": "COMPUTER SIMULATION",
        "offerings": [
            {
                "Code": "34020",
                "Type": "Lec",
                "Sec": "A",
                "Units": "4",
                "Instructor": [
                    "HAYES, W.",
                    "STAHLHEBER, S."
                ],
                "Time": "TuTh 2:00- 3:20p",
                "Place": {
                    "value": "PSCB 140",
                    "href": "http://www.classrooms.uci.edu/GAC/PSCB140.html"
                },
                "Max": "75",
                "Enr": "51",
                "WL": "n/a",
                "Req": "179",
                "Rstr": "A",
                "Textbooks": {
                    "value": "Bookstore",
                    "href": "http://uci.bncollege.com"
                },
                "Web": {
                    "value": "Web",
                    "href": "http://www.ics.uci.edu/~wayne/courses/cs115/"
                },
                "Status": "OPEN"
            }
        ]
    }
]

Note: For offering fields that are objects (i.e. Textbooks, Web, Place). Recreate the hyperlink using value as the text and href as the ref.

Degreeworks component

Develop a degreeworks component that lists out a student's degreeworks and their progress to graduate, should also show course offerings that satisfy certain requirements. More details on props coming...

Course Details Component

Course Details Component

Used to show information about a course. The full title, description, prereqs, professor's teaching it and their grade distributions, as well as the expected grade of the student.

Blockers

Props

course: The course object
Example:

{
    "COMPSCI 161": {
        "offerings": [
            {
                "Code": "34190",
                "Type": "Lec",
                "Sec": "A",
                "Units": "4",
                "Instructor": [
                    "DILLENCOURT, M."
                ],
                "Time": "MWF 3:00- 3:50p",
                "Place": {
                    "value": "SSLH 100",
                    "href": "http://www.classrooms.uci.edu/GAC/SSLH100.html"
                },
                "Rstr": "A and N",
                "Textbooks": {
                    "value": "Bookstore",
                    "href": "http://uci.bncollege.com"
                },
                "Web": {
                    "value": "Web",
                    "href": "http://www.ics.uci.edu/~dillenco/compsci161/"
                }
            },
            {
                "Code": "34191",
                "Type": "Dis",
                "Sec": "1",
                "Units": "0",
                "Instructor": [
                    "JORGENSEN, J.",
                    "DILLENCOURT, M."
                ],
                "Time": "TuTh 5:00- 5:50p",
                "Place": {
                    "value": "SH 134",
                    "href": "http://www.classrooms.uci.edu/GAC/SH134.html"
                },
                "Rstr": "A and N",
                "Textbooks": {
                    "value": "Bookstore",
                    "href": "http://uci.bncollege.com"
                },
                "Web": " "
            },
            {
                "Code": "34192",
                "Type": "Dis",
                "Sec": "2",
                "Units": "0",
                "Instructor": [
                    "ASCENSAO FERRE, P.",
                    "DILLENCOURT, M."
                ],
                "Time": "TuTh 6:00- 6:50p",
                "Place": {
                    "value": "SH 134",
                    "href": "http://www.classrooms.uci.edu/GAC/SH134.html"
                },
                "Rstr": "A and N",
                "Textbooks": {
                    "value": "Bookstore",
                    "href": "http://uci.bncollege.com"
                },
                "Web": " "
            },
            {
                "Code": "34193",
                "Type": "Dis",
                "Sec": "3",
                "Units": "0",
                "Instructor": [
                    "KUMAR, A.",
                    "DILLENCOURT, M."
                ],
                "Time": "TuTh 7:00- 7:50p",
                "Place": {
                    "value": "SSL 270",
                    "href": "http://www.classrooms.uci.edu/GAC/SSL270.html"
                },
                "Rstr": "A and N",
                "Textbooks": {
                    "value": "Bookstore",
                    "href": "http://uci.bncollege.com"
                },
                "Web": " "
            },
            {
                "Code": "34194",
                "Type": "Dis",
                "Sec": "4",
                "Units": "0",
                "Instructor": [
                    "JORGENSEN, J.",
                    "KUMAR, A.",
                    "ASCENSAO FERRE, P."
                ],
                "Time": "TuTh 8:00- 8:50p",
                "Place": {
                    "value": "SSL 270",
                    "href": "http://www.classrooms.uci.edu/GAC/SSL270.html"
                },
                "Rstr": "A and N",
                "Textbooks": {
                    "value": "Bookstore",
                    "href": "http://uci.bncollege.com"
                },
                "Web": " "
            }
        ],
        "dept": "COMPSCI",
        "num": "161",
        "name": "DES&ANALYS OF ALGOR",
        "prereqs": [
            [
                "I&C SCI 23",
                "CSE 23",
                "I&C SCI H23",
                "I&C SCI 46",
                "CSE 46"
            ],
            [
                "I&C SCI 6B"
            ],
            [
                "I&C SCI 6D"
            ],
            [
                "MATH 2B",
                "AP CALCULUS BC"
            ]
        ],
        "fullName": "Design and Analysis of Algorithms",
        "description": "Techniques for efficient algorithm design, including divide-and-conquer and dynamic programming, and time/space analysis. Fast algorithms for problems applicable to networks, computer games, and scientific computing, such as sorting, shortest paths, minimum spanning trees, network flow, and pattern matching.",
        "gradeDistribution": {
            "DILLENCOURT, M.": {
                "total": 150,
                "F": 150
            }
        }
    }
}

Inspector Component

Inspector

The inspector is a component used to render another component as well as contain quick tabs to quickly switch to other components. The inspector component is what will be to the right of the calendar at all times.

Props

pushScreen: Function that is called to push a screen onto the inspector. An object with {screenName: string, data: object}
popScreen: Function that is called to pop a screen off the inspector (go back)

Move user data to redux

All the data retrieved and set in this.state.user in App.js should be moved to a redux store.

Grade Distribution Component

Grade Distribution Component

Develop a component that shows the grade distribution given professors and grades. The table should just be a (1+p)x7 table where the top row are the headers (which would be the instructor + grades + total count) and the bottom row would be a % which represents how many % of students got that grade.

Props

grades: An array of object with they keys being the letter grade and the value being the count, + a key total with the total # of grades counted.
Example:

[
{
    "instructor": {
         id: 123456789,
         name: "Dr. Professor"
    },
    "total": 8,
    "F": 0,
    "D": 1,
    "C": 1,
    "B": 3,
    "A": 3
}]

Example

Instructor A B C D F TOTAL # OF GRADES
Dr. Professor 82% 15% 3% 0% 0% 12

Develop a myrmeyid using jwt

Currently the only information students get back when logging in is the information pulled from uci. However as more services are built around MyrmeyAssist we need a way to authenticate users. We cannot use just their student id and name since that can be spoofed, and we don't want to store any of their personal info on the server so we need to develop a myrmeyid using jwt. Currently the only other services we have linked to MyrmeyAssist that requires some form of authentication is MyrmeyMessenger and the ML server (MyrmeyPredict?). The MyrmeyPredict server needs to know the student's hashed id (student id + full name + salt) in order to find their grades and MyrmeyMessenger needs to know what courses the student is enrolled in so they can fetch and send messages to that course's channel. So when a user is logged in MyrmeyServer should create a jwt with the payload representing with the secret being the same secret that is used in hashing their id:

{
    id: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
    courses: ['CS 161','CS 177','CS 178','CS 143B']
}

and send it back in the key 'myrmeyid'.

Calendar Component

Course Calendar

Develop a component that acts as a week calendar showing students what times and days their classes are. The component should stretch vertically and horizontally filling up all available space. There should be a minimum amount of time per slot so if the vertical window gets too small the calendar starts to scroll.

Props

courses: An object containing course objects.
Example:

{
    "COMPSCI 143B": {
        "YearTerm": "2017-92",
        "code": "34150",
        "days": "Tu Th",
        "dept": "COMPSCI",
        "instructor": "BIC, L.",
        "location": "BS3 1200",
        "num": "143B",
        "time": "12:30- 1:50p",
        "title": "PROJ IN OPERATING SYS"
    },
    "COMPSCI 161": {
        "YearTerm": "2017-92",
        "code": "34190",
        "days": "Mo We Fr",
        "dept": "COMPSCI",
        "instructor": "DILLENCOURT, M.",
        "location": "SSLH 100",
        "num": "161",
        "time": "3:00- 3:50p",
        "title": "DES&ANALYS OF ALGOR",
        "DIS": {
            ...
        }
    },
    ...
}

Note how if a course has a discussion class or lab class that is a key within the course object and the keys of the DIS or LAB will be another course object. On the calendar all courses should be different colors except they should share the same color as the corresponding DIS or LAB course.

Develop ML data model to predict expected grade

Develop a ml data model using generated student grades to predict an expected grade. I think we should use the naive bayes model, since all the grades are independent of each other. We have to figure out how to create it with features that aren't just binary values, since each feature (course) has 14 values (A+,A,A-,B+,...,F). Also we shouldn't expect an exact match, if Jon took CS 1, CS 2, CS 3 and got a 'B+' in all of them, and Ryan took CS 1, CS 2 and got an 'A' in both of them, then an A should be predicted for Ryan taking CS 3. For now our base classifier (or a freshie/transfer) should just be the most probable grade given a professor and course.

Add inspector screens to App

Add inspector navigation functions and configuration to App.

The inspector consists of an object "inspectorScreens" where the keys are just screen names and the value is the actual screen component. There should be a pushScreen and popScreen function.

Create courses_planned table in postgresql and have it returned in getStudentData

Create a courses_planned table in postgresql that has 2 columns, the hashed id, and the course code of the planned course. There should be 2 helper functions in myrmeydb.js, a get planned courses which pulls the course codes and runs a searchSchedule on them to get the full course object and a delete planned course which takes a hashed id and course code and removes it from the db table. This should then be called in getStudentData in server.js and added to the courses object under key 'planned'.

Add /api/searchSchedule

POST /api/searchSchedule

Add the /api/searchSchedule post which should accept a search object (body will be application/json), run the UCI.SOC.searchSchedule function and return the result. For details on the input check out the searchSchedule function in the UCI-API repo in the ucisoc resource.
For the searchSchedule handler make sure to convert them to objects and assign their ratemyprofessor details, for example:

UCI-API searchSchedule will return something like this for instructors:

['Prof, A.','Prof, B.']

the searchSchedule handler should use UCI.PROFS.getProfessor for each of those and convert it to such:

[
    {
        "name": "Prof, A.",
        "rmp": {
            "id": 123,
            "rating": 5,
            "firstName": "Arnold",
            "lastName": "Prof",
            "name": "Prof, A."
        }
    },
    {
        "name": "Prof, B."
    }
]

In the example above for Prof, A. the rmp object is exactly what is returned from UCI.PROFS.getProfessor, notice how Prof, B. does not have a rmp object, that means either they aren't on rmp or they have no ratings, but even in that instance they should be converted to an object where the only key is then 'name'.

Add /api/getCourseDetails

POST /api/getCourseDetails

Add the /api/getCourseDetails post which should accept an array of course names (body will be application/json), run the UCI.SOC.getCourseDetails function and return the result. For details on the input check out the getCourseDetails function in the UCI-API repo in the ucisoc resource.

Create a watchlist functionality

Create a watchlist so that students can add themselves to a watchlist to be notified when a given course code is no longer full.

Add getGrades function to myrmeydb

Add a getGrades function to myrmeydb that takes in a search object and queries the db, returning back all the rows of the search.

parameters

search: Object that contains selectors for the db query. Possible keys: id, year_term, dept, num, instructor, grade. If search is not provided getGrades should return everything

example:

{
      dept: 'COMPSCI',
      num: '161'
}
Returns all grades received for COMPSCI 161.

return

An array of objects with the keys: id, year_term, dept, num, instructor, grade.

example:

[
     {
        id: '123',
        year_term: '2017-03',
        dept: 'COMPSCI',
        num: '161',
        instructor: 'DILLENCOURT, M.'
        grade: 'A'
     },
     {
        id: '124',
        year_term: '2017-03',
        dept: 'COMPSCI',
        num: '161',
        instructor: 'DILLENCOURT, M.'
        grade: 'A+'
     }
] 

Schedule of Classes Search Component

Schedule of Classes Search Component

Component that represents the UCI WebSoc search.
Fields will be limited to Breadth, Dept Name, Course Code, Course Num, Division, Course Type, Full courses. Either a course code range, department, or breadth have to be specified before a search is submitted, so have some input validation. Refer to WebSoc and UCI-API/resources/ucisoc/searchSchedule for default values.

Props

onSearch: Function that is called when a user hits search. Passed an object where the keys are search fields and values are the search values.
Example of onSearch parameter:

{
      Breadth: "ANY",
      Dept: "ALL",
      CourseCodes: "",
      CourseNum: "161",
      Division: "ANY",
      ClassType: "ALL",
      FullCourses: "ANY"
}

Change getCourses to ignore courses with opt not GR/PN

Currently there are courses where the OPT is nothing, so student's don't get a grade in that class. I don't know what those classes are, but I don't believe we need to show them, since they don't have course days or a grade. Currently it pulls that class but even if it's completed since it doesn't have a grade it will always show as 'in progress'.

Develop the MyrmeyMessenger component and server [2 People]

2 people should work on this ticket since the frontend and backend should be developed pretty close together.

Develop a backend server using socket.io (MyrmeyMessenger server) and a frontend component that connects to that backend server in order to create a realtime chatting system. The MyrmeyMessenger server should have a connection to the postgreSQL db, and interact with the 'messages' table. When an onconnect message is established the frontend component should send the MyrmeyMessenger their myrmeyid, this id is a jwt which contains their id (SHA256(student id + full name + salt)) as well as an array of courses they are enrolled in. The server should verify this jwt and send back the the message history of the courses they are enrolled in as well as the general uci channel. The same concept applies to sending messages, if a student sends a send message event it should check their myrmeyid to make sure they are authorized to send to that specific course channel. For now a simple text only solution will suffice, but if possible add custom emoji support. Here is a good module for a emoji picker that supports custom emojis: https://github.com/missive/emoji-mart

Prereqs Component

Prereqs Component

Develop a component that shows the prereqs of a course and whether or not the student meets the prereq. There should also be an add button, since the UCI-API only pulls UCI courses, transfer students would have to manually add a lot of courses they meet the prereq for from a transfer course, so if they don't meet a requirement there should be a button that adds that course.

Props

studentCourses: An array of course names the student has already taken
Example:

['COMPSCI 121', 'COMPSCI 161','ICS 139W']

prereqs: A prereqs array. This is a 2-D array, each index in the main array represents requirements, each requirement has to be fulfilled to take the class. Each requirement is another array, in order for the requirement to be fulfilled only one of those classes have to be taken.
Example:

[
            [
                "I&C SCI 23",
                "CSE 23",
                "I&C SCI H23",
                "I&C SCI 46",
                "CSE 46"
            ],
            [
                "I&C SCI 6B"
            ],
            [
                "I&C SCI 6D"
            ],
            [
                "MATH 2B",
                "AP CALCULUS BC"
            ]
]

In this example there are 4 requirements. In the first requirement if the student took any of those 5 classes the requirement is met, the 2nd and 3rd requirement are only met if they took 6B and 6D, and the 4th requirement is met if they took MATH 2B or AP CALC BC. So one possible combination of meeting all the requirements would be ['CSE 23','I&C SCI 6B','I&C SCI 6D','MATH 2B'].

addStudentCourse: A function that takes in a course name (i.e 'CS 161') and adds it to the student's taken courses.

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.