randomly distributed means they'll hit you and the window with the same likelihood as any other part of your car. with your logic, it doesn't matter what car you get. you get shot anyway...
fuck the guy after me. I write good code for my own sanity and so my OCD doesn't make me want to refactor it all later. it's like saying save the trees for your grandchildren or the future generations. fuck them, I want a clean environment for myself gosh darn it!!
Probably my first intro to software was from the Potato Counter game in Neopets. All you do in the game is count the number of potatoes on screen, input the number of potatoes, and, if you were correct, you get awarded some Neopoints. Well, depending on your input you get sent to either `/win` or `/lose`, so you cN just guess any number and charge the url to `/win` and $$$
can anyone tell me why anki is implemented so poorly in its core functionality? it works, but its slow, clunky, and error prone. that's the drawback for me and reason i am even willing to check out competition in this tech.
things like deck syncing, card creation, and the general ui all seem like they can be implemented to be much more user centric and functional. For me personally and my girlfriend in med school have lost data due to anki's strange sync pattern.
I can't be the only software engineer that thinks they can think of an implementation in their head that would make anki as a product much easier to deal with, right? As far as I can tell, people are tied to anki due to Stockholm syndrome and lack of worth-it, well maintained alternatives.
I'm building an open source Anki clone, and lemme tell you shit's surprisingly hard. Getting syncing working without resorting to uploading entire SQLite databases is nontrivial. You're basically doing multi-master database replication... but you gotta build it yourself (there's no easy way to sync sqlite with some serverside database (ignoring firebase/couchdb/pouchdb for various technical reasons)): https://en.wikipedia.org/wiki/Multi-master_replication
The lack of "worth-it" alternatives is due to the fact that there's no money in this market. Students are very unwilling to buy software, and if you use ads you end up like Quizlet. YC funded a startup in this area (Hickory) and they're... not doing well.
The main reason why everyone still uses Anki despite its issues is because it is still hands-down the best solution out there, despite all the bugs and clunkiness. There are a million and one spaced repetition systems out there, but Anki's plugin system and shared decks make for a very strong network effect.
If you're a med student, I don't recommend moving off Anki. The ecosystem there is too strong. If you're losing data, post in the /r/anki subreddit - Anki automatically generates backups and they'll walk you through restoring them.
I've built my own flashcard app and I ended up just syncing a journal of all your actions on a device (creating/edit cardings, evaluating them) and having all your other devices play those back to get to the "shared state". I store data using SQLite as well. It works pretty well for me.
You're definitely right about students being unwilling to buy software. They're already cash-strapped, so they're very unlikely to pay for an app, let alone a monthly subscription.
Unfortunately event sourcing means distributed systems... and I'm learning this on the fly on nights & weekends. Martin Kleppmann's "Designing Data Intensive Applications" has put the fear of god in me.
For my approach, I really just have each device append to its own journal file. I use iCloud's file storage, so I don't even have a service that I run. Each peer device just uploads the latest version of its journal to a shared folder and downloads its peers' journals and plays back the delta as needed.
I intentionally chose this architecture since I didn't want to run my own sync service. It keeps the sync system free, but iCloud can be slow. Unfortunately for me, if iCloud is slow, the app gets blamed for it.
I'm sure its non trivial, especially if youre building the clone by yourself, but over the time anki has been around, you'd think they wouldve ironed out the kinks. losing data itself isn't the problem. i can get the decks back myself. its the fact the app errors so much that its almost common knowledge to hit up r/anki and get a manual procedure to crawl through backups manually.
i think their mistake is thinking memorization tools are only focused on students and not learners in general. I use anki for memorizing chess positions, learning languages, etc. I'm also a full time worker and have plenty of money to spend on a tools that will help my productivity/hobbies. id be more than happy to fork over cash for the anki system with better client apps. if they had a concern that the cost would put them out of reach of students (their iphone app is $20 so i doubt its a concern), then they should just implement student tier memberships for free while people who can pay will pay.
>its the fact the app errors so much that its almost common knowledge to hit up r/anki and get a manual procedure to crawl through backups manually.
I'm curious what causes this, because I definitely have a different experience from you. Very few errors at all, and I have decks with thousands of cards and hundreds of megabytes of metadata (audio clips, images, etc)
Is there any reason why these apps have to keep the database state locally? Why not just create a web service? The problem with this model would be keeping the server infrastructure running and getting some money to pay the bills, but it looks much simpler.
I also hate that the anki shared decks web site does not encourage collaboration, or at least not the decks I see in their web site. There are a lot of shitty, outdated decks and instead of collaborating to fix them people just upload their own shitty deck. Perhaps the people studying medicine who create decks on their own don't have this problem, but it is something I see in the web site. It would be great to have a site integrated with git so people can collaborate on github.
Also, classification of decks by language is something I miss. When you search for a language, eg. Russian, you get decks for English->Russian, but also for Russian->English. It's hard to find the deck I want
(Just some suggestions, in case someone of working on anki clones)
> I also hate that the anki shared decks web site does not encourage collaboration...
Dude, I'm building exactly this. I'm not basing it on git for various reasons, but I am using event sourcing, and git is basically event sourcing for code. My system will (eventually) allow pull requests, comments, upvotes/downvotes, and all kinds of community shenanigans on flash cards. It's months away from release... but here's the repo if you wanna have a look: https://github.com/dharmaturtle/cardoverflow
> Is there any reason why these apps have to keep the database state locally? Why not just create a web service? The problem with this model would be keeping the server infrastructure running and getting some money to pay the bills, but it looks much simpler.
The idea of not having my personal decks stored on my own disk(s) is honestly much worse than the annoyance of sometimes (rarely) running into issues syncing. I've been working on various decks for literally years and have several thousands of cards made. Server-side stored only? Please no.
You can use Anki in your web browser without storing anything locally. It has some limitations and is not really meant to be your sole use of Anki but you can create and study text based cards.
In many cases, yes. But additionally, even with mostly reliable reception people don't want to have to depend on that reception. It's poor form and poor design to include an intermittent service (even if largely reliable for a large portion of your users) as a mandatory component when it is technically unnecessary.
Offline first is simply a more reliable way to build systems than online-only. Specifics long forgotten, but a few years ago (perhaps 10+ now) a lot of people got, understandably, upset when they found out their single player games couldn't be played without an internet connection in order to authenticate. Oops, auth server went down, players can't play the thing they dropped $50+ on.
I've barely used Anki, but I feel like it shouldn't be more than an open spec/format that allows people to make their own compatible clients and services.
I think the reason it is where it is is because it was created a long time ago when some of the things we expect today weren't the norm (cloud sync, friendly UX). I think it has such a large user base that it would be very difficult to revamp it without disturbing a lot of users (and add-ons). I think people who use Anki are happy with it as-is, so there's momentum there. And new users who don't like it, well, they don't stick around.
I've written my own spaced repetition flashcard app (see my profile), so I've looked a little bit at how the data is stored in Anki and have a general idea of how sync works, and my impression is sync was bolted onto an existing system meant for a single device. I've seen posts from users in the sub-reddit about how if you do lessons on one device and then do lessons on another, there'll be a conflict in the data and you'll have to manually tell Anki to pick one over the other. (This may have been fixed since, of course.)
i know this motivation all too well in my line of work, but i hate it. its the code conservative approach that will just let things cobweb since people don't hate it enough for anki to change it app dev. granted, anki isn't some corp that has money to throw at this product, but theres such a high demand for this app to be better and it just isn't and people are just okay with it because its the best they have.
I've rarely encounter bugs in Anki. The ones i have encountered have been the result of me hacking on it in some way. Sure it's hard to use and pretty clunky, but i wouldn't call it buggy.
id beg to differ. i've had plenty of bugs happen myself and you can find tons of posts around the web of people experiencing similar frustrations. I'm sure there are decks that people make that are less error prone when syncing, but that is not my experience with the decks i make.
I had the same thought and created my own implementation [0]. As another user said it's surprisingly difficult, and Anki is incredibly extensible, so it can be difficult to fill everyone's need.
What I've noticed is that a lot of the power users and influencers are very much invested in Anki, which makes it difficult to get them to check out your alternative. And because these are the type of users that are promoting Anki, it has gained a lot of mindshare in this space.
That said, the people that have found my app are very grateful it exists as an alternative to Anki.
As far as the syncing, as another user said, it is actually quite difficult. There just are not a lot of options out there for this kind of use case. Anki's syncing is custom-built.
Watching my med student girlfriend use Anki the past few years has been horrible. The syncing in particular is bad, as you pointed out - and bad in a "irreversible data loss" kind of way.
I've thought about trying to create something better, but Anki itself is so entrenched in some communities that there's a strong network effect - both through shared decks and add-ons. (Also, I don't personally have an application for rote memorization, so someone who does would probably create something better.)
I use SyncThing [0] to sync my anki databases between a laptop, desktop and a raspberry pi. Fingers crossed nothing has gone wrong yet, apart from problems such as using incompatible versions on the same db.
Thank you for the suggestion - as a med student, she has an iPad that can access certain medical resources, and is already an iPhone user, so I don't know if SyncThing is really an option for her.
I'm not sure that most users can be expected to figure out things like "does this update include a database upgrade?" "which devices are running an old database?" and "what do I do when the software told me the database on disk is corrupt?"
And I think SyncThing would still suffer from the issue of needing to make sure only one device writes to the Anki sync at a time. I really think some sort of cloud service that handles multi-headed sync of cards/notes (and makes it hard to take permanently destructive actions) would be a real competitor in this space - if they can overcome the Anki network effect.
What issues has she had? I sync between mobile - macbook -pc desktop every day and rarely have any issues, and all of them have been salvageable. This is over maybe 5-6 years of usage at this point.
IIRC, it's basically just that if she leaves Anki up on her Macbook without explicitly syncing & exiting, and then tries to use her iPhone or iPad, she will lose state on one of the devices.
It's a lot of cognitive overhead to remember not to touch Anki on any other devices unless you've synced and closed it out on the most recently used one.
Since she has a ton of cards, syncing takes a while. And occasionally it just throws a random error.
Moreover, there's a sense of fear every time she uses Anki that she will hit the wrong button and lose her expected state.
I totally agree with this, especially the last bit about just the mentality it creates. I wish Anki had an (optional) auto-sync feature (like every 15 mins), but maybe there are too many edge cases for that kind of feature.
I suppose remembering to sync is an issue, but I've just built the habit of always syncing when finished. Anki will also sync automatically when you exit (this might be an option you have to enable in the settings).
your comment itself points the huge issue out. the way i see it, as evident in your comment, anki has given you several issue over just the 5-6 years youve used it that requires your to manually salvage your system... what other apps do you do that for?
Very minor issues. Once every couple months I'll have forgotten to sync from device A after adding cards, do some reps on device B, realize I'm missing cards, and have to go back and resync.
Only a couple times over my entire usage have I actually had to do a full resync, and it's pretty painless. I just reupload to ankiweb, or download from it, and it's done. This is usually because I've caused some incompatibility via add-ons, or anki versions. But it's always been easy to fix.
>what other apps do you do that for?
I'm not sure what other apps I've used nearly as much as anki. Probably just firefox/chrome and emacs. I've had issues with losing tabs in browsers far more often than losing info with anki. And losing data by not saving in an editor is pretty easily done as well. I'm actually surprised at how well anki will handle changes from multiple sources. Unless you modify the same card on different devices, it pretty much always seems to work as expected.
well I'm glad youre having a good time. you can take a look at the rest of the responses on my comment and see that what i said seems to be a common gripe for many
Anki has a lot of features and it's been around forever. It's tough to keep something like that smooth and sleek. But yeah, my original impetus for creating this was loving the idea of Anki, but having a really hard time sticking with it because of how clunky it is.
i agree. i say all these gripes knowing anki isn't some huge corp that can throw money at this problem, but it really is time for a revamp or more competition in the space that is worth moving to.
just what i've said in the post. deck syncing is error prone, card creation can be tedious and unintuitive for most, and general ui is dated among other issues.
surprised to hear you think the GUI is fine. I've been using it for a year, and I know my way around the app & menus by now, but I still struggle on occasion, as things are just not intuitively laid out and/or not well-presented.
Oh, well everyday usage is totally fine (reviewing cards, adding cards), but some things are still a little weird, card types vs note types for example, but that comes up rarely enough that it doesn't bother me.
Maybe I'm just tired of apps that get more and more bloated and slower year after year, while the ui gets changed to "simplify" things and become less usable as a result.
But anki has mostly stayed the same, it's fast, responsive, does what I need it to do, almost never crashes, etc. It's also been a daily routine to use for literally years, so it's sort of soothing. Yeah it has some rough edges, but they don't come up very often.
> it works, but its slow, clunky, and error prone.
Interesting assessment. I use it almost daily, and I have no issue with it whatsoever (macOS <-> iOS <-> iPadOS). Sync works absolutely flawless. UI is not modern and it's a bit slow with Rosetta, but stable and fast enough to add and edit cards. Copy and paste of images works ... stats are okay. And, the most important part, the algorithm just works well for me.
i have no complaints on the memorization system itself. it works and thats why i will continue to use anki despite my gripes with it. i do not agree that syncing is flawless though since i've had many major issues in the past. i imagine there are plenty that do not have issues depending on what they're studying and the contents of the decks they make, but that is not what i've experienced.
Logitech MX product have had this feature for a while now and its even cross platform. its called Logitech Flow and works almost as seamlessly as that mac demo. Only difference would be installing the Logitech Options app vs it being native. Seems like a great feature if you're fully in the Apple ecosystem.
> Only difference would be installing the Logitech Options app
Is that the app that wants to use all 8 cores and turn my iMac into a noisy space heater every now and then? I love Logitech’s hardware, but their software is consistently terrible.
never had that happen before. as we speak, the app is running at 1% of a core and 100mb ram. id imagine that whatever apple implements uses some sort of protocol that wouldn't be free in terms of resources either.
To be fair, it behaves most of the time. It’s just that sometimes (I’d say, about once a week) it doesn’t. And yes, Apple occasionally do cock up. But I have seen this sort of things happening too often for comfort with Logitech’s drivers, over more than one decade.
And I'm going to guess that's because of Apple restrictions, anyway. Good luck getting past the App Store Review a program that tries to read and/or control the mouse pointer position.
It's already hard enough to do a Synergy-like thing in Android, although technically still barely possible.
I ponder if this is a new business model -- make a shitton types of applications outright impossible in the name of "security", then announce your own (proprietary) implementations of these types of applications that bind people to your brand of devices in order to encourage sales.
its mostly for people doing work in the WSL world. If you're writing code, you can throw up an IDE running directly inside WSL and run toolchains that exist inside WSL altogether. Before, you'd have to do something like use WSL remote or open the project in a Windows program and edit the Linux file, then use the Windows version runtime of whatever langauge youre using to use any of the built in IDE features for that language.
whole heartedly agree that this is a plus, but no way in hell are gardeners in oakland going to stop using them. i see most gardening truck around the city with their entire beds with just gas blowers. no way are companies with already low margins going to swap their equipment over this. its going to take years before we see the effects of this.