The 2024 Wheel Reinvention Jam just concluded. See the results.
A simple Japanese flashcard app.

About TokaCard


TokaCard is a little program that I plan to use for learning Japanese vocabulary. Right now, it offers multiple choice quizzing and a simple scheduling algorithm.

Why reinvent a flashcard learning program? There are already multiple programs that do the same thing (Anki and Renshuu are notable examples). Anki is excellent for learning to recall information, but recall on it's own takes longer to learn. Renshuu is excellent for learning recognition, but I find it lacks in the ability to teach me to recall content. TokaCard's ultimate goal, once completed, is to ease you in by teaching recognition first and then teaching recall later.

image.png

image.png

Read more
Filters

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!