Git Product home page Git Product logo

cs3226-lab's People

Contributors

frmlenx avatar lvl100p avatar peanut11 avatar pianonerd7 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

lvl100p

cs3226-lab's Issues

More ways to edit

Give another view for editing the student data. For now, most groups show edit feature one student at a time, as that is what was asked in Lab4. However, notice that for example after a CS3233 Mini Contest has been completed, the lecturer has to click N edit buttons, update that particular Mini Contest scores of all students, then click N update buttons, one after another... This should be simplified by having another view where the lecturer can edit/upload all N scores of a certain Mini Contest, a certain Homework, a certain Kattis set, etc in three steps only: click to open this new view, enter N data, and then click one single update button only. Do you need to change your underlying database schema or is there another way?

Performance and/or scalability challenge

(CAN BE CHALLENGING, read ahead): Improve the loading your ranklist app (try enlarging N to 10 000 for example) and basically any other aspects that can be optimized, use tool like Google PageSpeed Insights or the Google Chrome built-in stopwatch (network tab) to help you check this. You may need to read ahead for a few technical insights.

Social media challenge

(CAN BE HARD for those who have not tried this before): Do a self-study on Facebook Developers Page to add Facebook like button in your HTML files. Test it by clicking like and seeing it appears in your own Facebook account newsfeed. If you can already do that, also try Twitter tweet button.

User database setup with access restrictions (A2)

  • create user accounts of at least 1 admin and 2 students (preferably one in top-7 and one outside for purposes of testing different views)
  • adjust users table to ensure that database will not be corrupted by malicious users

Analytics + marketing challenge

(EASY to setup, HARD to get many visitors due to the nature of the ranklist app): First, quickly set up Google Analytics (or other relevant service) tracker code inside your HTML files ASAP and then monitor the web traffic; Show the Google Analytics data to your Lab TA on Monday, 06 March 2017 to convince him that you have (some) visitors other than yourself... To encourage more visitors, if you know anyone in the actual CS3233 class (current or past students), ask them to visit your ranklist app, get their feedback (if any), and tell those feedback to your Lab TA.

Add routing restrictions based on login

  • not login: only index and detailed page of top 7 students
  • login student: only index and detailed page of top7 + himself + rank-1 of himself
  • login admin: should be all routing

Disallow /register route

You shall disallow /register route as the admin/lecturer will register all his N accounts upfront at the beginning of the semester and will disallow anyone else from taking his/her class afterwards.

Adjust views of index page according to user login [messaging]

  • login with student:
    Moreover, add a simple text box with a submit button that can be used to send a message to the admin/lecturer, e.g. to say "sir, please update my CodeForces achievement as I have just passed it, here is my CodeForces account for your verification.", etc. His/her account name and submission timestamp will be associated with that message. If his/her admin/lecturer has replied, the reply will be seen.

  • login with admin:
    read the messages from his/her student and reply those messages accordingly (only the actual sender of that message will be able to see that reply).

Internalization + localization challenge

(EASIER if your group has members who can speak various languages): If you (or your project group members) know any other language other than English, translate all the English text in your application to at least one other language, then give option for your user to switch language (and maybe also record his/her language preference in the users table database). You can do this on client-side version (use JavaScript to change the html text of your paragraphs or span elements — not the best way to do this) or server-side version (use PHP to switch between languages — the better way). We will discuss this topic more in future class but you are free to use any simple strategy that works, including this.

the fun one *wink*wink*

Back in Lab3, we have:
Set the row height of row i+1 according to the difference of column Sum values between row i and row i+1. That is, the bigger the gap, the bigger the visual gap has to be (you are free to calibrate the gap rules as long as it is visually consistent). However, turn off this feature when user clicks on a column header as the sort order will likely be different. This likely requires some custom JS coding work.
Now use this rule:
Set the row height of row i+1 according to the difference of the active sort column values between row i and row i+1. That is, the bigger the gap, the bigger the visual gap has to be (although you are still free to calibrate the gap rules as long as it is visually consistent, you should minimize vertical scrolling, i.e. don't use too much whitespace). of course, only apply this row height feature when the active sort column contains numbers.

Domain name + HTTPS challenge

(EASY WITH "LetsEncrypt" BUT A BIT COSTLY FOR GOOD DOMAIN NAME): If your capstone project group is still using IP address as of Lab5, try to get a free (but usually meaningless) domain name. Once you have a domain name for your DO droplet, setup HTTPS using LetsEncrypt. However, if your capstone project group already have a very strong idea on what to do for capstone project and already decide on the name for the capstone project, then immediately buy a meaningful+short domain name using NameCheap, GoDaddy, Exabytes (for .sg domain) before it is taken by others and use it to claim this achievement for this Lab6. Your capstone project group will have to do this by Week 13 anyway.

time stamp

Use built-in timestamps feature in Laravel Eloquent ORM to display time-related information, e.g. the ranklist is last updated ['X days ago' or 'on Monday, 13 February 2017, 9.58pm SGT']..., etc.

Progress overtime

Add "progress over time" feature. Currently the landing page/the ranklist of our ranklist app shows the latest scores of every student at this point of time. What if we want to show progress over time (e.g. NUS week 1 to week 13)? We may have to record more data or put timestamp-related features in our database. Display this progress over time as a line chart (use whatever line chart) where the y-axis should be the sum scores and the x-axis should be the time (e.g. 13 ticks: Week 1 to Week 13). Give option to turn on/off certain students in this "progress over time" chart. In my mind, I am thinking of this. Decide what changes (another migration) that you have to do to your underlying database scheme (if your group has used it earlier) or to think from scratch to support this feature if your group has not used database before.

Model achievement

Use Eloquent relationship to model the achievement system of CS3233. Currently, only when we click a student detail, then we can see his/her list of achievements (as raw text). Remodel this using Eloquent relationship so that we can give additional view in our ranklist app: Show which students that have "Kattis apprentice 1/6", for example.

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.