So, I played with it today, and it does feel pretty solid. Good job!
Small language changes, I just made them directly to the client. Here’s the rest of the feedback:
The duration of the test is 1h0m0s: Show the time in minutes always.
For a multiple choice question, we should allow partial score if they choose some options correctly. I think we shouldn’t do negative scoring there.
On the right, show the right answer, wrong answer, and “Skip question => 0.0”.
If the server dies when the client is working, a weird log shows up on the screen. That shouldn’t happen. In fact, the client should continue to retry the connection.
The same problem above can happen if the connection is broken for some time. We should show that connection is broken, but the client shouldn’t crash. It currently crashes.
On a server restart, the client gets shown the same questions. We should be reading a log file at the server side to avoid asking the same questions.
And/Or invalidate the token, because log shows that the token has already taken test and if it’s over the time.
Other feedback, which might be more of a problem with Terminator:
On a resize, the screen just gets lost. Maybe, it’s due to my window system.
Good point! We could give a partial score with negative scoring. So, if they choose one right and one wrong answer, the final result would be zero. But, if they choose one right answer only, then they’d get say half of the positive score (if 2 are correct).
Nope. A server restart caused the same question to be shown again. Including the same demo. It didn’t realize that I’d already done the demo and completed those questions.
Regarding the key mappings, I was thinking if we could have 1, 2, 3, 4 instead of a, b, c, d. This would make the selection easier and add a natural order to the way keys are arranged in the keyboard and the way they appear on the screen. Also, we can have esc to cancel any selection that has been made instead of pressing any key. How does this sound?
Yeah, so for multiple choice questions our scoring can represent score for a correct answer and wrong answer. And maybe we can have the same score for that. So then your final score could be c * sc - w * sw
where c is the number of correct answers
w is the number of wrong answers
sc is the score for a single correct answer
sw, score for a single wrong answer
Note that sw can’t be lower than sc, otherwise, choosing all 4 questions would yield a positive score. In this case, I think sw >= sc, and we should enforce that when doing the precondition checking for the quiz.
I think we’ll be doing github pushes for the config file. So, we can have a cron which does git pull, and just have our server reload the file every X mins. Reloading the map from scratch every time, under a mutex lock. That should be sufficient. We don’t need to do anything more complicated than that.