sonowz / graduate-adventure Goto Github PK
View Code? Open in Web Editor NEWGraduation Simulator for SNUCSE students
License: MIT License
Graduation Simulator for SNUCSE students
License: MIT License
For better UX, frontend page should be redesigned.
We can either:
There are some issues with tree evaluation.
선형대수학
)Also, thorough testing is required to make sure everything works correctly.
Frontend production build should be implemented.
First problem is to make frontend server proxy backend.
I think we should use express.js, but there could be alternatives.
POST /api/login/mysnu/
JSON parameter :
Parameter | Description | Example |
---|---|---|
user_id | mySNU ID | dnsdhrj |
password | mySNU password | 1234 |
major_info | Use major info? | True |
Optional parameter when major_info
is True :
{
"majors": [
{
"type": "주전공",
"name": "컴퓨터공학전공",
},
{
...
}
]
}
On login success :
{
"success": true
}
On login fail :
{
"success": false,
"message": "ex)로그인에 실패했습니다."
}
POST /api/login/file/
File parameter : a file containing course data.
JSON parameter :
{
"majors": [
{
"type": "주전공",
"name": "컴퓨터공학전공",
},
{
...
}
]
}
On parsing success :
{
"success": true
}
On parsing fail :
{
"success": false,
"message": "ex)잘못된 파일입니다."
}
Of course, when we use js, we should use use strict
. But when we put it in our index.js
file, Compile error(cannot find 'Elm') occurs.
So, I commented this line. If I find other way that has no error with use strict
, I'll rewrite it.
This will be handled after feature implementation is done and before deployment.
I changed MajorForm
design in login page, but there are some problems. I set its components' sizes in fixed values(like "px", etc.), and they caused zooming problem. (they broke table's shape while zooming.) I had tried to set components' sizes in '%' values, but zooming problem still happened because of padding
.
MajorForm
table zooming problem<!DOCTYPE html>
<html lang="ko-kr">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Graduation Simulator</title>
<meta name="description" content="Graduation Simulator"/>
</head>
<body>
<div id="main"></div>
<script type="text/javascript" src="/static\js\main.js"></script></body>
</html>
http://localhost:8080/static/js/main.js
Cannot GET /static/js/main.js
There are prerequisites to be done before making main page.
현재 프론트엔드 디자인은 졸업모험 v1의 디자인을 거의 그대로 따왔으며 거기에 시뮬레이션 기능을 덧붙여 추가한 것 뿐이다. 애초에 디자인이 아주 잘 짜여져 있다고는 생각하지 않았지만 프로젝트 구성원 특성상 디자인을 전담할 사람이 없는 관계로 초기 디자인을 따라서 진행중이다.
즉 요구에 맞는 새로운 디자인이 필요한 것이 사실이다. #82
먼저 기존에 있던 졸업 시뮬레이션들의 디자인을 분석해보도록 한다.
적용
적용
1. 타과, 복수전공, 부전공 지원
컴공 뿐만 아니라 다른 모든 과를 지원하기 위해선 각각의 규정을 소스코드의 수정 없이 만들 수 있어야 한다. 졸업규정은 1년마다 한번에 새로 나오기 때문에 빠르게 구성할 수 있을수록 좋다.
복/부전공은 주전공 규정과 별개로 하나의 규정으로 구성된다는 점은 주전공과 같지만 교양과 관련된 규정이 없다는 큰 차이점이 있다.
2. 이수상태 점검 (메인페이지)
기본적이지만 핵심적인 기능이다. 정확도도 중요하지만 이를 시각적으로 잘 표현하는 것도 중요하다.
규정의 시각적 구성은 현재 두가지 방법이 알려져있다.
3. 시뮬레이션
지금까지 존재하던 기능은 현재 상태를 점검하는 것 뿐이었다. 이를 보완하던 기능이 미이수 규정을 이수하기 위해 들어야 하는 과목을 보여주는 것이다. 이에 그치지 않고 학기 단위로 설계하여 완벽한 졸업을 시뮬레이션 할 수 있도록 기능을 제공할 수 있다.
현재 전공 상태를 기준으로 미래에 수강할 과목을 설계할 수도 있지만 복전/부전 여부를 결정하기위해 가상의 전공정보를 기준으로 시뮬레이션을 하고싶을 수 있다. 이를 위해서는 '교과목 중복인정'등의 전공 사이의 상호작용에 대하여 완전하게 알고 있어야 한다.
현재 로그인 방식은 '마이스누 로그인' 과 '파일 로그인' 두가지로 나뉜다.
'졸업시뮬 서비스'를 이용하기 위해 필요한 정보는 두가지가 있고 이를 얻는 방법의 차이가 로그인방식의 차이이다.
정보를 얻는 방법의 차이는 다음과 같다.
이 중 '1. 내가 수강한 과목들'의 수정이 필요할 시에는 서비스 이용 중 '시뮬레이션' 기능을 통해 이루어진다.
'2. 나의 전공'은 현재는 로그인시에만 입력을 한다. 하지만 전공 정보 또한 서비스 이용 중 수정 가능해야 더욱 고차원적인 시뮬레이션이 가능할 것이다. 이러한 정보 수정을 시뮬레이션에만 넣을것인지 기본 전공정보 또한 수정할 수 있을지 고민해야 한다.
메인 페이지에서의 서비스의 목적은
를 알려주는 것이다.
그리고 보여줘야 할 정보의 계층도는
로 요약할 수 있다.
'각 전공별 정보'에 해당하는 것은 각각의 전공, 복수전공, 부전공인데 현재는 이를 탭으로 구분하여 전공당 한 페이지에 나타내고 있다.
하지만 이에는 문제점이 있다.
따라서 다른 페이지로 구분하지 않고 하나의 페이지 안에서 구분하는 것이 좋을 수 있다.
또한 시뮬레이션 기능을 메인페이지에서 구현하는 것도 좋지 않다고 생각한다. 메인 페이지에서 구현할 경우 시뮬레이션 진행중에는 현재 상태를 다시 점검하기가 어려워지기 때문이다.
따라서 UI는 유지시키더라도 다른 페이지에서 구현하는 것이 좋다고 생각한다.
졸업 시뮬레이션에서 시뮬레이션의 역할은 현재 수강정보를 바탕으로 미래에 수강할 과목들을 미리 결정하는 것에 도움을 주는 것이다. 자연스러운 시뮬레이션이 되려면 실제로 유저가 졸업을 준비하는 프로세스를 따라가면 좋을 것이다.
논의 할 점으로는
위 분석을 토대로 프론트엔드를 모델링해보자.
Page design is not yet decided.
However, since login page will have minimal design, we can start making template from now.
Make sure to include unit tests (Karma
seems like standard.)
README.md says
Recommended Requirements
Python ≥ 3.5
node ≥ 6.x
But .travis.yml says
python:
- "3.5"
- "2.7"
- "pypy"
Since pythons are used only in server-side, I think we don't have to test python 2.7.
What's your opinions?
We have to manage HTML styles in .css
file.
Otherwise elm
code readability will become bad.
TODOs:
CSS
There are 2 major file structures suggested for elm codes. Reference
functions
(Model, Msg, Update, View),modules
. (TextBox, Combobox, Graph..)modules
,functions
.This is a minor issue, but deciding the structure affects code maintenance, and elegance.
Tree-based rule model
I think every backend API should be in a app. (ex - api
)
API should be more RESTful.
ex) login response returning redirect('/main/')
is not proper.
I think login api should return whether it success or not (or token if we use).
And other request of main data return main data.
Servicing server should be determined and be ready to deploy.
uriel
will be the server, but sodrak
can be considered later, which is more stable.
GET /api/main/
JSON containing proper data.
Refer to sample.zip
in below comment.
Request without login / with expired session will result in 400 Bad Request
.
This API is for search modal.
POST /api/main/search/
URL-encoded parameter : (may change to JSON)
Parameter | Description | Example |
---|---|---|
node_title | Name of treenode you want to search for. | 생물학 및 실험 |
title | Search option : course title | 실험 |
code | Search option : code | 034.033 |
credit | Search option : credit | 1 |
category | Search option : category | 교양 |
area | Search option : area | 학문의 기초 |
subarea | Search option : subarea | 과학적 사고와 실험 |
college | Search option : college | 자연과학대학 |
dept | Search option : department | 생명과학부 |
List of JSON as a search result.
Parameters are same as search options above.
{
"data": [
{
"title": "컴퓨터의 개념 및 실습",
"other_tags": "..."
},
{
"title": "컴퓨터과학이 여는 세계",
"other_tags": "..."
}
]
}
Currently, rule is just using pre-constructed YAML file.
But this preconstrucing rule file needs too much efforts, and is error-prone.
Furthermore, we cannot cover all of that rules, so we should implement Rule Page.
This issue references #5 .
Rule Page should contains:
Maybe this can be done in very end of this project.
Please request any of adding and deleting above list, and even opinion of rejecting this issue.
Un-evaluated Tree
objects can be reused among users with same major & 학번.
I think we can achieve this by making evaluated tree as duplicated.
This can be considered when we have performance issues.
I have thought that replace info can resolve the case of "논리설계실험
-하드웨어시스템설계
" and "물리학1
-물리의 기본1
" but there is an exception.
Replacement infos are represented by 'code1
→ code2
'
So we can think that when we should take course of code1
, it can replaced by taking course of code2
. This is compatible for case of 논리설계실험
→하드웨어시스템설계
.
But in case of 물리의 기본1
, its replacement info is 물리의 기본1
→물리학1
.
So we can't design rule of science except 물리의 기본1
.
Fortunately, case of 물리의 기본1
can resolved by fix rules like "물리1 : take (물리학1
or 물리의 기본1
) and 물리학 실험1
" and it dose not deviate much from real rule.
If more exception cases of out of our expectation found, we may have to think more.
We should make backend API docs more readable and accessible. (#28, #30)
We can use these.
http://www.django-rest-framework.org/topics/documenting-your-api/#third-party-packages
Methods like parse_credit
are clean enough, though it will be better if there are explanations about data format and crawling/parsing logic.
Rule schema tests are implemented, but @skystar-p said edge case testing is needed.
I tested current master
branch, and found some issues.
TODOs from PR #54 would be handled by @Jhuni0123 .
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.