Giter Club home page Giter Club logo

ankushgarg1998 / ipu-ranklist Goto Github PK

View Code? Open in Web Editor NEW
111.0 3.0 15.0 4.52 MB

:chart_with_upwards_trend: A Ranklist application for all IP University students (includes all colleges, all branches, all years after 2014 and all semesters for courses B.Tech., BCA and BBA).

Home Page: https://ipuranklist.com/

JavaScript 18.70% TypeScript 37.62% HTML 37.98% CSS 5.31% Shell 0.40%
nodejs express angular typescript mongodb aws-ec2 memcache

ipu-ranklist's Introduction

ipu-ranklist v2.0

Website ipuraklist.surge.sh start with why Uptime Monitor

Please visit the deployed application here.

So why a ranklist app?

So the idea is simple. We recieve our semester-wise results in the form of a pdf, which looks like this:

PDF Screenshot

There's Roll Number-wise, Subject-wise result of each and every student studying in a branch (CSE for instance) in the entire university (that's right, not just one college). Neither total marks nor percentage is displayed, let alone a ranklist. Even the subject names are not shown corresponding to the marks.

So this is a minimalist result website I'm making for our University students, in which they can see their class-rank, percentage and subject-wise marks.

IPU Ranklist

Completed and Working features

Please raise an issue instantly if you find something wrong with these features

  • Ranklists of all Engineering Colleges in IP University, that are displayed on selection of
    • College (Ex: MSIT, MAIT, BVCOE...),
    • Shift (Ex: Morning, Evening, Both),
    • Batch (Ex: 2015, 2016, 2017...),
    • Course *(Ex: BTech, USIT's BTECH, BCA, BBA, BCOM), and
    • Semester (Ex: Sem1, Sem2, Sem3...)
  • Subject-wise marks when clicked on any name in the ranklist.
  • A search-box to find a Student/Enrollment Number in the displayed ranklist.
  • CGPA & credit-percentage also shown with subject-wise marks.
  • An overall section for semesters, that shows cumulative percentage till now and even cumulative CGPA.
  • A profile page that shows all the history of a single student including, subject-wise, semester-wise marks and CGPA.
  • Overall section in Student Profile.

Planned Features

  • An overall section for institutes, that shows a ranklist which includes students from all the colleges of a particular branch.
  • Ranks in the profile section.

Structure of the application

Alright, So lets start the story with what you see. The front-end you see deployed at http://ipuranklist.surge.sh is actually an Angular application, the code for which can be found in the client directory. This angular application gets data by making GET requests to an API which is written in Node.js(using express) and it's code can be found in the server directory. This API in-turn interacts with a MongoDB on which all the data is stored.

Deployment

The angular application as you can see is deployed on surge. The API is deployed on an EC2 instance on AWS. The MongoDB was earlier deployed on Mlab, but now has been moved to the same EC2 instance.

Jimmy

Everything mentioned above is just a classic web application. Nothing new. What makes this project special is how do I bring the student's data from Result PDFs to a database? Everytime results are announced (i.e. twice a year), 52 PDFs are released. (13 branches x 4 years). Now since all of these 52 PDFs are different, and all that the PDF reading library offers is an array of strings for each page it reads.

Now, only from these raw text strings, I needed to generate meaningful data. But this is not an easy task, because in a single PDF there are hundreds of pages, thousands of students from different colleges. And the biggest problem is how inconsistent this data is. There are pages in the pdf which are blank, there are pages which only have info about subjects, there are students who didn't attend the exam, there are students who were given grace marks for passing, there are students from previous years giving back exams, there are, well, you get it... there are a lot of exceptions to handle and the data is really sensitive. I mean there's a high chance, I might end up showing someone else's marks under someone else's name, which will not only fail the purpose of the app, but also get me beaten up ๐Ÿ‘Š at my own college ๐Ÿ˜ถ.

So, to handle this painful but logical task I wrote a parser. Let's call it Jimmy. This parser gets a name for itself because, it was very difficult to code and took a very long time to perfect. Now what Jimmy does is, it takes this inconsistent raw data page-by-page from a PDF and parses into meaningful array of objects, each object containing data and marks of a student. Jimmy's CODE is not public right now for obvious reasons. ๐Ÿ™Š. But this is how the data from Result PDFs goes into my database.


Contributions

If there's a feature you'd want in this app or if there's something you might not like, and would want changed, feel free to raise an issue or comment on a previous one. Questions, Suggestions, Ideas, Complaints or even if it is some random banter, you'd like to discuss. Reach me out. ๐Ÿ˜„

History

Before starting with this application I created an MSIT Ranklist web-app for Fall'18 results, which went exceptionally viral in MSIT and received more than 500 hits within the first two hours of launch. It has received 12,000+ hits uptil now, which essentially inspired me create one for entire IP University. See the story of how I ended up making that application here.

ipu-ranklist's People

Contributors

ankushgarg1998 avatar dependabot[bot] avatar prajeshpuri avatar vasudev13 avatar yuktimohan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ipu-ranklist's Issues

Add a new course (B.Ed / LLB / MCA / M.Tech)

B.Ed / BJMC / LLB / MBA / MCA / BA (Eng, ...) / B.Com. / M.Tech. / BioTech

B.Com and B.Ed are in MSIT.
Found acquaintances in B.Com, B.Ed, BJMC, and LLB.

B.Com seems like the simplest choice right now.

Overall university rank

Please update and kindly add university rank section. Otherwise your project is lit. Keep up the good work.

CGPA is actually SGPA

When it's calculating CGPA for each semester it's basically calculating the SGPA which is the GPA for that semester and CGPA (Cumulative GPA) is GPA for every semester from 1 to that particular one.

List of simple remaining tasks

  • Fill Local data with 15's sem 1&2.
  • Find the remaining colleges in PDFs and add them in all the 3 insti.json files.
  • Fix the same marks diff ranks issue.
  • Add a search box
  • Manage the dropdown for which the result is not available (Colleges which don't have the corresponding branch & the semesters which haven't happened yet.)

A comparison window

A comparison window for comparing your marks with your friend's marks (of course to tease him/her and I am an outlier XD.)

All DB schema change to store all sem total data.

This will unblock many features:

  • An overall section in University Ranklist.
  • Removing complex calculations in college-specific overall API. (Will make that API fast too).
  • Refactoring of front-end.
  • Many more... (will add later)

Migrate the EC2 box

  • Create a new account.
  • Setup the EC2 box. Install the software.
  • THE JIMMY, JESSICA, AND JOEY CHANGE TO STORE ALL SEM TOTAL DATA TOO. #53
  • Clone repos and create the DB.
  • Setup and test the application.
  • Link the .com domain and add SSL support.

Setup monitoring to analyse user behaviour

  • Figure out which colleges/branches have good reach.
  • Figure out in which colleges do I need to publicize this more.
  • To predict which course should be added next, if I end up deciding to add more.
  • Many other purposes too.

Handling Year Backs.

The year-back students' enrollment number remains the same but they become regular students of the next year's batch.

  • Do some more research around it.
  • Figure out a way to handle it (Ideally shift them to the next year's batch).
    A batch would then be divided on three criteria:
  • Insti Code (Morning Evening Shift)
  • Course Code (Regular and Lateral Entry)
  • Admission Year (Regular, LE and Year Backs)

The Profile Page

A single page that shows all the data of a student.

  • Just make a page with URL (/student/:enroll) (Will have to add router-outlet and change the current directory structure.
  • NavBar to navigate
  • Bring all the data of the student on this page
  • Make this page look good. [CSS, Bootstrap] (probably add an avatar)
  • Add linking to this page directly from Ranklists.
  • Adding a page to Enter the enroll_no that redirects to the above page.

Multiple ranking criteria

The colleges and university are ranking students based on their overall CGPA instead of the percentage. The criteria can be changed in ipu-ranklist to rank them according to cgpa for a better understanding of the student's rank.

USICT students are left out

Great work but please include data for USICT Btech students as well. Since we get our result in a different pdf, I am sure that with a little changes in your parser, it will work flawlessly.

Subjects Modal

  • Displaying and making the modal functional.
  • Getting the names of Subjects.

How is the cgpa calculated?

The formula prescribed for Cgpa in the ordinance is being used to calculate the credit percentage, how are SGPA and CGPA calculated in this application?

visualization

proper visualization is required for monitoring marks gain or fall and, a pie chart to show percentage of marks in a particular subject of the total percentage.
more can be added just a few examples I can think of right now.

return to main page

when toggling between different student's results. It returns to main page rather should go to class or rank list page.

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.