The 2024 Wheel Reinvention Jam just concluded. See the results.
Ejektaflex's Avatar
Ejektaflex
Member since

Recent Activity

I finished my flashcard app prototype, &tokacard tonight! There's still a lot that needs to be done, but today I added a main menu, an about page and navigation between each screen. Additionally, I added little touches here and there (an app icon, different pointer cursors, and an "I don't know" button) and managed to export to a release jar file. There's still a lot to be done before this is 'usable' in the long term sense, but it feels really good to have this finished, and I learned a lot about Jetpack/Jetbrains Compose along the way!

View original message on Discord

Simple vocab flashcard scheduling for &tokacard. There's lots to be desired, but it works! The fact that you can in theory learn from it in a state as simple as this is nice to see.

View original message on Discord

I've just completed the "session scheduler", which schedules the order of cards in the current review session. For pseudocode, it looks a bit like this:

fun schedule(card, wasCorrect) {
  if (!wasCorrect) {
    studyQueue.add(1, card) // Wrong answer, re-schedule it after the next card
    streaks[card] = 0
  } else {
    if (card !in streaks) {
      return // We got the card correct first try! No more reviews needed
    }
    if (streaks[card] + 1 >= 3) {
      return // We got the answer right three times in a row! No more reviewing it
    }
    studyQueue.add(2 + streaks[card] * 2, card)
    streaks[card] += 1
  }
}

As you can see, answering a card wrong will re-schedule it again immediately after the next card. Answering correctly will push your next review out further, with each correct answer pushing your review time further down the list. Three correct reviews in a row will "finish" a card for that review session.

Now that short term (single review session) card scheduling is finished, next up is to figure out, for each card, how far in the future we should schedule it's next scheduled review. I'm thinking about implementing a modified version of the Leitner system for this!