There seems to be an unaddressed need for a well-maintained library implementing spaced repetition algorithms. I have seen implementations for SM15[0] and SM2[1][2] around but nothing that provides multiple implementations and a consistent API on top.
If there was a library like that, a tool like SpacedTime could use it easily (currently it uses fibonacci sequences when determining how soon to recall).
Given that I’ve wanted to make apps for learning languages but always get lost in the weeds of various spaced repetition algorithms - would love this kind of open source resource. If anyones interested in making this kind of thing, I’d love to chip in.
For example I notice it’s really common for spaced repetition algorithms to really easily allow me to shoot myself in the face by learning too much up front and then drowning in reviews; or to destroy myself by missing a few days. Not sure what is out there, but some extensions I’d like as a user is to be “I don’t want to spend more than x time per day doing this, so pace me please”, things like:
- the ability to specify a max “learning load” taking into account projected reviews + new cards
- the ability to “recover” from missed days not by seeing 1000 pending reviews and panicking, but by saying “do an extra 10 cards a day and in two weeks you’ll be caught up”
I’m sure I’m not the first one to think of these things but I don’t know how to research what people have done - and if these kinds of usability things, good documentation with clear comparisons of strategies, flexibility of use in different environments/languages were encapsulated in a library it would be a game changer for me.
What I would like, but cannot set Anki to do is the following:
Max 100 cards per day (I can set the number of reviews, but seeing a card twice counts as 2 reviews)
Max 10 new cards per day (restricted by the above limit)
I’ve found this to be a good pace when manually juggling this, but the thing is, I don’t want to manually do it, especially not on a piece of software like anki.
I recently built a spaced-repetition module in learnawesome.org to help users practice and remember not just from whatever they're reading, but also by taking notes from meetings, conferences, videos etc. Wrote an article about it: https://medium.com/learn-awesome/practice-what-you-learn-usi...
Do folks feel like there would be value in a hosted service that provides a backend for spaced-repetition apps? It's a bit niche, but feels like there would be demand for a service that would let folks build memorization apps without having to manage their own spaced repetition implementation.
I think it would be valuable, I've actually had this idea (but not the competence/bandwidth to actually build it, alas).
It could become a platform for courses built around SRS, or learning materials like Michael Nielsen's mnemonic media: https://numinous.productions/ttft/ .
> if anyone needs a Ruby/Rails implementation of spaced-repetition algorithm
I noticed that at the root of the repository the license is specified as Creative Commons, requiring attribution and disallowing commercial use or derivatives, so not really anyone anyone ;)
Doesn’t prevent somebody writing a SRS library in another language from taking your implementation as a good reference point, though. Thank you for sharing!
I created Spacedtime because I'm known to have a horrible memory. Maybe people are kidding but I wanted to change that. There are flashcard apps out there but I wanted to create one that is focused on creating cards for my personal memories. My personal goal is to store and recall all that is dear to me.
Given the personal nature, I do plan on spending a lot of my time on protecting the user's information. Today, Spacedtime does not have a server and stores all information locally. The command-line app stores information in a local JSON file and the web app stores into Local Storage. However, I'm not sure what is the best user-friendly way to go about the encryption layer and how it should be applied.
I've posted to Product Hunt, [Lobste.rs](http://lobste.rs) and Indiehackers so far. I've been saving my self from posting to HN till now. It is still an MVP but at least it is not the first version :). I've been pretty aggressive in publishing my work.
Great point. I've been battling this in my head but definitely not an immediate goal to encrypt. However, I personally want to make sure I do not have access to your data. As I start to work on providing functionality around syncing across devices I'll be keeping this in mind.
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm notice created a lockfile as package-lock.json. You should commit this file.
Anki flash cards (floss) do use spaced time learning algorithms that are also easily adjustable to personal preference. Anki has native mobile/desktop, cli and web clients. The big community also provides shared decks and vast plugin ecosystem like auto text-to-speech and imagery.
I haven't seen any of these tools doing anything that anki doesn't — why not contribute to it instead?
I've actually been a long time user of Anki and definitely thought about contributing to them. However, I'm personally unfamiliar with their stack and given the simplicity of a flashcard app, it was easier to start here.
However it probably is worth considering an import of Anki cards in the future. For now though, I'm focused on cards with answers you'd only know.
I'd disagree with you; writing up new UI for anki would be far easier then reinventing the whole wheel. You'd also get anki card support which already is a huge dataset of various flash cards.
If anything new Anki UI project would be more impressive and clearly in demand compared to yet another flash card web app.
> I haven't seen any of these tools doing anything that anki doesn't — why not contribute to it instead?
For the same reason that your area likely has more than 1 pizza restaurant. Other people want to take a stab at their own vision of a thing and that's awesome. Personally, I find Anki to be pretty uninviting to the general public.
Fluent-Forever.com is an example of an application of spaced time learning applied specifically to languages and their app is pretty great.
We may disagree philosophically, and that's ok, but I tend not to buy into the perspective that if X already exists and Y is like X then Y should not exist.
You are comparing apples to oranges here. Starting up a whole new "study group" community is not the same as opening up a pizza restaurant.
I don't mean to be harsh or mean but OP is treating this as a product rather than a hobby projects with producthunt submissions etc. when in reality it's a barebones clone of a standard application that already exists.
Open communities benefit from numbers. Another developer to Anki even if you'd just wrap around nice web ui around it would be significantly more efficient and valuable then reimplementing the same spaced learning logic and starting everything from 0.
The whole point of Anki is to standardize this field - it's libre software made for the medium not for profit.
This is such an odd opinion. The open source world is filled with different implementations of the same idea and while there is a lot of duplication, a lot of good also comes out of it. I'm not sure why somebody making another flashcard program is such an offense to you. I'm not sure why you wouldn't be more supportive of somebody trying his own thing. Competition isn't bad. It's generally a good thing.
Anki is a very big and complex project. From what I've heard and seen, it's a mess and the only person who groks it is the main developer. I get why most people are unwilling to contribute to Anki. I've thought about it myself and I decided against it, preferring to tinker on my own personal flashcard project.
It's also a very old project where it's hard to enact change that you might want. So if you have a different vision, there's no way to realistically implement that.
But it's not. Just look at the source code for card[1].
It's modern, fully type hinted python3 code, you don't even need to know python to understand big chunk of it.
I used Anki extensively a few years ago when studying a new language at uni and it helped me a lot, but I just installed it again and not much has changed. It was clunky then and its flaws are showing even more now. Correct me if I’m wrong here, but even something as simple as loading an image from a URL, even though it uses a webview for the cards anyway, simply doesn’t work. Why not take advantage of the web technologies it’s using?
Also, the web client is very bare-bones, unfortunately.
* It seemed to me that the cli and the web app would be related. I had to come read your comment to realize the cli doesn't read from the web app (I also had to come here to realize it was stored locally).
* Once I started creating questions, there was no way to "log out" to get back to the splash page. So that means I couldn't see the npm install command
It looks like Anki cards. I also value spaced repetition to help me store valuable facts in my long term memory.
I personally use my Todoist for that (Project called "Anki" where every todo is a question and the answer is in the comments. And I can manage intervals by using the task scheduling feature to have them appear later (depending on the ease to remind the answer).
But I like the simplicity of your app and the logo is kinda cool also. +1 for the command line interface. Good idea.
Nice, and thanks for making the CLI version, because for such personal info (some of which might be security questions for a bank!) I'd rather not use the web site.
On the website however it seems to make it impossible to go back. Clinking the browser back button gets stuck in a loop after you click "Start Remembering Now"
With computers, which excel at memorization, why not off-load out faulty memory there? And use time, and brain capacity, for things that we are still better at, or at least at fun or fulfilling?
For each prompt, my first thought was "yeah, I have it in Evernote/1Password/Google Calendar" followed by that it makes my life easier. So basically, let's embrace our extended phenotype!
I am sure that there are people around that can flawlessly remember hundreds of complex passwords and numbers, even ones they have used in a decade.
Also, knowing something does not guarantee that we can use that. For example, I guess a lot of you had:
The ability to quickly google a piece of information != knowing, understanding, or being able to use it in any meaningful sense.
The notion that memorization is useless or somehow not integral to the learning process is wrong. When you intuitively know an idea, you can build upon it and combine it with other ideas in a subconscious and long-term way. This isn't possible if you externalize your memory to a computer.
I bet you know this, quite old, quotation on memory:
"They will cease to exercise memory because they rely on that which is written, calling things to remembrance no longer from within themselves, but by means of external marks."
> The notion that memorization is useless or somehow not integral to the learning process is wrong. When you intuitively know an idea, you can build upon it and combine it with other ideas in a subconscious and long-term way.
There is a profound difference between memorizing sequences of characters (passwords, ids, phone numbers, surnames, dates, particular APIs) and memorizing concepts (which may, but not need to, use these characters as a component).
Sure, that quote is from Socrates about books. I don’t think he’s actually wrong: the average person today probably is less mentally capable than ~2,500 years ago. Books are more useful as a storage device, to be sure, but externalization does have downsides when it comes to mental cognition itself.
Don’t disagree with on the sequences of characters point, though. Unfortunately most people don’t make that distinction and lump everything into the ‘not worth memorizing’ camp.
I was thinking on the same line, to dump all the personal memories into cloud not just anniversaries and birthdays but also what I promised to others and what I observed or any decision at work so that later I can back myself up with data. Its like a personal journal in case my memory becomes weak. There are things like evernote but they are more of a active notes which you open sometimes infront of others or while screensharing. I wanted something like Date wise or tag wise. It will be great if this can have a timeline. I also thought of making private facebook posts but for obvious reasons its not a good idea.
By time-line I meant any content that is put be it promises or decisions or even imp events like meeting someone new must be stored with a timestamp and can be viewed in a chronological order. Something like facebook timeline, I can jump right back to Jun 2015 with a couple of click and see what was I thinking that time. Something we used to do in a Diary which had a page for a day. This may also help reminding us important recurring event like Birthday's anniversary, insurance premium without having to explicitly look for them
I like the commandline interface a lot! It's really clean and I like the formatting. I definitely plan on using this daily. Seems easy to interop casually while in coding sessions.
I don't forsee using this for remembering my security questions. But I will definitely use this for remembering little bits of knowledge and trivia that I want to become second nature.
It would be a shame if someone were to misuse all the data you're collecting about people's first grade teachers and mother's birthdays. Better keep that data safe! :)
Oh cool, there could still be vulnerabilities there so maybe some kind of client-side encryption is in order? I don't have too much client-side storage experience.
If there was a library like that, a tool like SpacedTime could use it easily (currently it uses fibonacci sequences when determining how soon to recall).
[0] https://github.com/slaypni/SM-15, https://news.ycombinator.com/item?id=9844613
[1] https://github.com/walterscarborough/LibSpacey
[2] https://gist.github.com/doctorpangloss/13ab29abd087dc1927475...