Web-based clicker site (written in express)
- [authentication][1]
- [mongodb/mongoose][3]
- [sessions][4]
- libkrb5-dev
- MongoDB
- Node.js
- TypeScript compiler (
version >= 1.7
)
npm install
tsd install
tsc -p ./server
tsc -p ./client/app
Run index.js:
node server/index.js
Or, if in development mode:
npm install nodemon
nodemon server/index.js
http://localhost:3000
-
Show instructors how many student have answered
-
Students select their answer and can change it until end of quiz
-
Do not allow to change room if test is under way or unsaved draft.
-
FIX: history shows student signed off
-
Show if answer was correct or not in history
-
Classes
-
Enroll
-
Instructors: at the moment, just a single instructor user with the name 'instructor' is recognized. Only this person can:
- only teacher can start/stop quiz
- create new quiz
- view entire class click history
-
Students
- multiple classes
Pages/Routes
-
register
-
login
-
learn
- click
-
teach
- Main : [Start | Stop | Graph ]
- Graph : [Prev | Next]
-
role
- teach 1,2,3,...
- learn a,b,c...
- analyze p,q,r...
-
analyze
- list dates
- list problems
- show graphs
- list problems
- list dates
-
client: [start | stop | graph]
- start: POST quizstart
- stop: POST quizstop
-
server: done already
@client
-
QUIZ: mode, then periodic (per 2 seconds?) poll POST/quizstat(n)? where 'n' is offset from current quiz. so: n=0 means NOW, n=1 means PREV, n=2 means TWO-quizzes back etc.
-
SHOW: graph (d3 etc.?) // for now, just vector. A = ..., B = ..., C = ... etc.
@server
- ROUTE: POST/quizstat(n), reply with JSON {a:..., b:...}
The key types are:
data User = User { id :: UniqueId
, name :: String
, password :: String
, email :: String
}
data Problem = Problem { id :: UniqueId
, name :: String
, user :: User
}
data Click = Click { id :: UniqueId
, user :: User
, choice :: Int
, time :: Time
, course :: Course
, problem :: Problem
}
data Course = Course { id :: UniqueId
, name :: String
, user :: User
}
data Enroll = Enroll { id :: UniqueId
, course :: Course
, student :: Student
}
For each type T
below, we have a set or table:
table T = Map UniqueId T
[off] --- quizstart ---> [quiz]
[quiz] --- response(i) ---> [wait]
[wait] --- ack ---> [quiz]
[quiz] --- quizend ---> [off]
(3):[http://passportjs.org]
(3):[http://adrianmejia.com/blog/2014/10/01/creating-a-restful-api-tutorial-with-nodejs-and-mongodb/]
(4):[https://stormpath.com/blog/everything-you-ever-wanted-to-know-about-node-dot-js-sessions/]