Closed z1lc closed 3 years ago
Hi there! There is a danger in the path of "a preference to toggle everything" that open source projects fall in to as they cater to niche needs, and we get lots and lots of complaints about the app being over-complicated - "a preference to toggle everything" is one of the reasons why. Also it creates code paths that are not normally exercised and as the app moves forward, porting to new APIs on underlying libraries, going through internal refactorings etc, every preference adds to the inertia.
Which is to say, I won't close this immediately, and if you proposed a PR for this and you're other suggestion I'd have a look at it, but in general I don't favor more toggles unless it's a request from lots of users vs 1. Hopefully you understand
Hi Mike! Understandable. I've actually implemented this functionality in my fork, but have run into too many merge conflicts when trying to sync it. After receiving a notification from Google about the impending target SDK upgrade, I decided it might be better to get this into mainline.
Is there some middle ground functionality where this avoids some of the annoyance of "too many toggles"? I'm thinking of eg a feature flag or a separate pref page that wouldn't clutter the main app. If there isn't, it sounds like it might be better to just go through a rebase on my fork.
Separately, would it help to have other users that mention interest in this feature on this issue? I have a few friends that are on the forked version that utilize this functionality, I could ask them to show support here.
If you posted a PR with the toggle in advanced preferences we could look, with a fork and a bounty you're clearly motivated and it would be nice to have another person capable of hacking around on the source using the main repo vs a fork
Before I go in and start implementing, let me give a little background to why I even created a fork in the first place. I broadly believe that Anki's approach of expecting you to complete all reviews every day is unnecessarily inflexible. It doesn't match up with how I'd like a learning system to function.
In my view, the system should be adaptive, both in terms of retention rate and new card introduction rate. That is, during times when you're without phone/busy/lazy, the app should automatically detect this, reduce the amount of new cards it introduces, and prioritize certain reviews based on how overdue they are. Right now, Anki doesn't do any of this, and it means that when you have a time period when you can't use the app in the same exact way you've used it daily, you have a backlog of massive reviews waiting for you with no prioritization. You can, of course, reduce new cards manually through the settings when you know a period of time is coming up when you won't have as much time for studying. But this is annoying to have to do, doesn't deal with reviews piling up, and doesn't help when you don't know that such a time period may come up.
The most critical piece of functionality from my fork, then, is a basic implementation of these ideas. I've implemented a succession of PRs that take different approaches to the review prioritization idea: first, by increasing interval, then by "skew" (days overdue / interval), then by "effective ease" (integrating the ease factor into skew). In a PR from June, I implemented the dynamic changing of new card introduction based on recent mature retention (I added some comments on this in that PR).
I consider this functionality the most critical to why my fork is valuable. I realize that this is a significant departure from how most people use Anki, and if that doesn't fit into the mainline vision of AnkiDroid, I understand. But for me, that is the whole reason to make a fork in the first place -- the aesthetic changes I mention in the issue here were more of a test to see if/how quickly someone might want to implement a feature with a bounty. Ultimately, I would hope to create an option to allow this kind of review prioritization / new card introduction.
Let me know what you think.
Those are very interesting ideas. If learning is a pipeline / process, Anki is already working hard for you once things are in the pipe, but I like the idea of Anki adapting the rate of ingress as well - it clearly has a lot of information about recent study time and recent study success. I find myself manually tuning new cards up and down to fit my external idea of desired load (it's a time box, for me and my family). No reason Anki couldn't figure out that at current rate of new cards per day / retention / time spent that I am (for example) needing to add 6 more new cards on average in order to hit the timebox correctly in a stable manner beginning next week, or perhaps 20 new today, 15 tomorrow, then 5 and 5 next two days, then 6 stable going forward to hit the timebox immediately and stabilize it :thinking:
I'll have to look through the patches, but honestly, this kind of feature is something the whole ecosystem could / would need before we put it in Anki as a default feature. I don't say that to discourage, I think it's neat, I think the whole ecosystem could use it and Damien might be interested, have you tried posting that in the Anki forums?
In parallel - let's say that for some reason it is not accepted upstream. We have a Javascript API that is currently focused on making as much card information as possible available to the reviewer WebView, and allowing the WebView to interact with the card - so you may build a replacement reviewer UI if you like. Related - Anki already has hooks that allow scheduler interaction, giving add-ons a chance to alter scheduler behavior. I see a natural extension to the Javascript API where certain scheduler features are exposed to Javascript and those files may be kept as permanent add-ons, such that you could potentially override scheduler features in AnkiDroid, in a supported way. Perhaps if statistical information was JSON'd into a WebView, and the WebView was hooked to override the answer to "how many new cards today", "get me the next card", then you'd have a solution for the use case as well. ?
Separately, would it help to have other users that mention interest in this feature on this issue? I have a few friends that are on the forked version that utilize this functionality, I could ask them to show support here.
In general yes - just using the emoji / reaction response on an issue is useful. We listen to feedback for sure
Damien, and the manual in general (its even in the faq i believe), is against this kind of change. I think the rationale is 'The learning (intervals) will be messed up if you dont do what anki tells you to do' and 'it encourages bad practices'
Im also a long time proposer of these kind of features that give the learner an important role in using anki
Here goes some insights as a long time user, personally and through seeing other people interact with anki in real life
You are never ever supposed to stop studying a deck. Not for a week, not ever. Your options here are: Delete them or create a disable section and a new type of deck with 0 reviews and 0 new cards and moving the decks there . The main screen showing your due cards which is what finally trigger @z1lc is just one of many annoyances, because anki doesnt like you when you do this
You are never supposed to miss a day. Or a week or a year or dont study as much for a few days. This is truly a wtf for me. I know many people that has stopped using anki due to too many cards piling up and feeling it was too much of an uphill battle. Why not giving them a chance to catch up. Its impossible not to have periods where you just dont have the time to do your regular reviews. Make it easy to deal with what was due for that day first and use my spare review time to catch up at the best of ankis abilities. There is a few ways to do this
You are never supposed to study more per day. If you do, prepare to deal with copious amounts of reviews for the next day/week. There are also many approaches for this and not only cram cards ahead of time
You are supposed to load / deload yourself properly. Am i studing a lot? not enough? how will translate reviewing 20 cards today on my month load. Given enough time you get this ability to predict, but why not let anki help you deal with it. Let me easily cut my reviews and present me first the ones i decided. For example, some people will prefer to review first cards not matured yet because they are most likely to forget. Some people will prefer bigger intervals cards, because they are easier and will be able to review more. I think both cases are legit depending on your objectives for a deck. Even for different decks for the same person. My emphasis again here is on the user and how they could have anki work for them instead of the other way around
You are not supposed to study how you like. I feel i learn better when my reviews are ordered by interval. But I still have to use filtered decks to be able to do this
These are just normal use cases. I know my studying will suffer if i dont do it perfectly. But let me do it anyway and let anki accommodate the best it can to my wishes. Most of the time its not just a wish, but necessity imposed by life really
I deal with all these on a regular basis, and that is why i know this can be done somewhat, but its not user friendly. I had to learn a lot about anki internals and read of best ways to deal with them. @z1lc had to fork the program
Is really too much to accommodate for this uses cases that everybody will need to do eventually and put a disable button on a deck that will put it on hold permantly / for a year ?
I see this as condoms. Not having them available wont discourage sex, just will encourage the problems
Some days i didnt have enough energy left and forced myself to do the cards. I failed a lot of cards more than i usual do and, worse, i hated anki
I had to learn not to do this and I dont do it anymore. As @z1lc i review when i can. Most of the days is everything, but many days is just 50% and some rare weekends i take 3 days off. Im not cramming an exam. I dont have to deal with dates. Im just learning a language at my own pace and if a card is not optimal, is okay. I also had to learn to gauge my reviews and i know how to deal with them when they pile up. But most people will just stop reviewing
A couple more insights:
One last remark. I like how common zother
folder is to order decks. Why not accomodate for things that everybody is already doing anyway :)
Hello 👋, this issue has been opened for more than 2 months with no activity on it. If the issue is still here, please keep in mind that we need community support and help to fix it! Just comment something like still searching for solutions and if you found one, please open a pull request! You have 7 days until this gets closed automatically
As this issue has a bounty, would prefer to keep this open.
Hello 👋, this issue has been opened for more than 2 months with no activity on it. If the issue is still here, please keep in mind that we need community support and help to fix it! Just comment something like still searching for solutions and if you found one, please open a pull request! You have 7 days until this gets closed automatically
I would like the ability to hide the count of the total number of cards due & the estimate of time from the top bar, as well as individual deck card counts on the home screen. On most days, I don't complete all of my scheduled reviews and seeing this number can be demotivating. In the screenshot below, I've put a red box around numbers that I would like to create a preference to hide.
I have posted a bounty for this: https://www.bountysource.com/issues/92535114-add-option-to-remove-number-of-cards-due-time-and-deck-card-counts-from-default-view