commit - 7e15a2c893e203a68e2edce3688ffbecb938cd8e
commit + d01528a063b3d747c9fe5ea5b7e56c7e85fef0a1
blob - 17917dd4c6bd7662840459cb059ea173dcfb1197
blob + 18cb5b0e703211165baf00b3d5e8956b84422e2c
--- NOTES
+++ NOTES
- If the intended use is to start every session at the beginning, I think I
prefer starting with 4 characters. Otherwise the initial bunch of of 7s and
Qs is much too simple (only distinguishing two characters is mechanical).
+- After a while of good performance on known characters, these tend to become
+ so rare that they are forgotten until one eventually reappears, leading to
+ frustrating errors and less effective learning. At first, I considered
+ clamping the error estimate at some minimum value, but decided against
+ tampering with measurements to counter their consequences. The idea I came
+ up with instead is to use the overall error rate as a baseline weight when
+ selecting the symbol to sound, i.e. each symbol's weight is the current
+ overall rate plus that symbol's individual rate. This means that "good"
+ symbols still appear less often than bad ones, but symbols are only allowed
+ to fade from rotation as long as the student is consistently performing very
+ well.
+ This should also counter the effect that old symbols become very rare
+ immediately when a new one is introduced only to suddenly reappear all
+ at once when that new symbol has been answered correctly a number of times
+ (which might not even have been very indicative of true progress).
Differences in my version:
- Advancement threshold is 30% error rate (overall *and* maximum individual).
as response time more than one sigma over average.
- Response times are clamped to within one sigma of average for the purpose of
updating the estimate.
+- Uses overall error rate as a heuristic baseline to stop symbols from
+ completely disappearing from training.
- No periodic resounding or automatic hinting.
- Visual hint and resound on pressing Space. Hint disappears after sound
finishes.
- Hints appear under the cursor without advancing it.
- (Like original) only prints bargraph on pause (Return).
- training level (number of symbols activated), and session duration (excl.
+ Also training level (number of symbols activated), and session duration (excl.
pauses).
- Measures/displays average response time and equivalent wpm.
- Measures/displays session duration (excluding pauses).
blob - c8aa0f8c51695f3a093a54f420cf896c927387d7
blob + 51a2872cfb0430c612a401be8222561fe904b309
--- teach.c
+++ teach.c
while (!feof(stdin) && input != 4) {
/*
* Pick a random character from the active training set,
- * distributed according to the failure rates.
+ * distributed according to the failure rates and using the
+ * overall failure rate as a baseline.
*/
l = 0;
for (i = 0; i < nactive; i++)
- l += failprob[i];
+ l += overall + failprob[i];
x = l * rand() / RAND_MAX;
assert(nactive > 1);
for (i = 0; i < nactive - 1; i++) {
- x -= failprob[i];
+ x -= overall + failprob[i];
if (x < 0)
break;
}