-
-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Question] Overall Processes, Logic and Anki's Card Handling #143
Comments
In Anki, Mature cards and young cards both belong to review cards. For details about the card stats of Anki, please read https://docs.ankiweb.net/getting-started.html?highlight=young#card-states
Sorry, I don't understand what you mean. In Anki, the
What do you mean by the Anki version? FSRS is the algorithm used by Anki. Anki is using FSRS-5 now, and ts-fsrs also only support FSRS-5.
Anki is also using states of |
Usually, one note corresponds to one or more cards. When you refer to the overall statistics of card interactions, are you specifically referring to the current card object information? FSRS calculates the next review time using the given time,rating and the card's DSR. Since the current card already incorporates historical DS information, there is no need to retain or use historical records for the scheduling calculation.
You need a
In a web service, never send the entire card to the backend, as frontend data cannot be trusted. Instead, send only the card_id, rating, and review timing information (e.g., now, review_duration), and perform the scheduling on the backend. However, if you're using Electron or Tauri, it's acceptable to send the entire card. |
Thank you so much @L-M-Sherlock and @ishiko732! This was really helpful. |
What is your recommended setup regarding |
Since the |
Hello!
Thank you so much for creating and sharing this! I really appreciate it.
The package is quite impressive but I find it very hard to understand concepts if you haven't had any experience in this context yet. I read through all issues and checked out the demos. I will try to share my findings below for others and also ask a few questions to validate if my understanding was correct. Additionally I would like to build a logic that is similar to what Anki provides and I have a few questions here also.
At first I was assuming that you would create a database with all individual ratings and gather details for upcoming cards based on these ratings. But I realized that you only have a single object per card that basically defines the overall statistics for the interaction with this card per user over time.
General logic
const cardStatistic = createEmptyCard(new Date());
const ratingOptions = f.repeat(cardStatistic, new Date());
ratingOptions
const chosenRatingOption = ratingOptions[Rating.Again].card
chosenRatingOption
as the next card statistic and load it in step 1 for next card interaction instead of creating an empty card (empty statistic).const chosenRatingLog = ratingOptions[Rating.Again].log
(but this is not necessary).Example for structuring your data
Picking and rating processes
Process A: Getting a card to show it to the user (based on previous reviews, new cards you want to show per day etc.)
Process B: Let the user review a card and store the result to be used for step 1
Process A: Picking next card
Rating.Again
) and then send this rating to your data handler (and database) and process it like described below or you b) already present the user with the options fromf.repeat(cardToBeRated, new Date());
so the user can directly pick an option and you can for example display further details above the button and send this option to create a new one or overwrite the existing one.Process B: Review / rating process
UserCardStatistic
) for a card previously on your database.cardToBeRated
. Otherwise create a new statistic (Card) viaconst cardToBeRated = createEmptyCard(new Date());
.const ratingsForCard = f.repeat(cardToBeRated, new Date());
. -> So the important thing to understand here is that all calculations are done based on this statistic object (rather then multiple database entries of reviews)const rating = ratingsForCard[Rating.Again].card;
. -> This is the newly created statistic for this card and the respective user. You can now store it to your database.const log = ratingsForCard[Rating.Again].log;
to your database for "...analysis, undoing the review, and optimization (WIP)."Anki learning system
Cards
Learning Cards: Recently introduced or forgotten cards that are in the process of being learned.
Mature Cards: Cards that have been successfully reviewed several times and have longer intervals between reviews.
New Cards: These are cards you've added but haven't seen before.
What I learned abou their approach
My questions:
Card
object and its details? Or if a deck approach is used the users add specific cards to their deck and for each card on the deck a statistic for this user and card is directly created (so I don't have to think aboutstate.New
cards and "not opened / unknown" cards for this user).New, Learning, Review, Relearning
. How are they related to 'New, Learning, Mature' from Anki?state.Learning
,state.Relearning
,state.Review
andstate.New
(each sorted by due date) and intersperse "not opened / unknown" cards (or use deck approach described in question 3 and don't have to think about "new / unknown" cards).Thank you so much in advance!
The text was updated successfully, but these errors were encountered: