Ankify came out of that. At the time, I did not know any programming and paid someone to write a script in Python to convert the cards. Then, eventually I learned Python myself and expanded on the script. I also uploaded the markdown files online so I could view them anywhere (https://kangruixiang.github.io/wiki/).
I ran into a wall in making user interface for the program. It was difficult to make good looking cross platform user interface with Python. I gave up on making user interface for a year or two with end of med school and residency. After a while, I went back to see if anyone else had made anything similar. Despite many plugins/programs that makes it easy to make cards, none of them really focused on readability of the original notes. I decided to sit down and learn javascript to help with UI creation.
After about 3 years, everything finally came together after I learned Svelte, Tailwind, and Electron. I know Electron is not the most efficient program, but it's what works for me.
Also, it's also the feeling of being able to make whatever my mind can think of. It feels really refreshing and empowering. Even making the website for Ankify is a lot of fun. You have to think so much about the presentation, typography, logistics.
I see your project uses import-from-csv to get cards into Anki -- you can make this significantly more user-friendly by utilizing the genanki Python package [0]. It spits out an apkg for you that you can just double-click on and import. The other side benefit is that you can keep a stable ID of the same cards over time, which means that if you want to eg update the structure or styling of already-exported notes, it is very easy to do so.
[0] https://github.com/kerrickstaley/genanki
The current Ankify already adds ID for the cards so it'll update the contents on each conversion. The only problem is if you delete a card, you'll have to manually do that in Anki.
Sometimes I branch into other uses. I was quite successful using Anki when studying for my amateur license exam.
I will consider using Ankify if I need to study from notes at some point in the future.
What I loved about your post is how you evolved with Ankify as you developed it, I think this is a great example for people starting on their own journeys of learning how to program, I always felt that having a project in mind from the beginning is the best way to keep moving forward, and your journey is a great example of that.
I am considering using Python for cross platform gui design. Could you expand on why you chose electron over other alternatives, for example Qt?
Also, could you share which resources you used to learn about gui development on Python?
I think I just got caught at a bad time with Python. It was a few years ago, and Python was in the process of going from 2 to 3. Consequently, a lot of the things I tried ended up throwing error messages.
I tried few of Python's GUI makers but found that I end up having to learn so many new things that only apply to that one GUI program. Where as with Electron, I'm really using HTML/CSS/tailwind that I use every where else. I could essentially make Ankify web only and it would make minimal difference to the UI.
I was fond of PyAutoGUI. It seemed very intuitive for me at the time.
However, it comes with a number of downsides:
- Distributing the app is a pain and breaks every now and then when you add a dependency that may not behave correctly or require additional hacks with your packaging tool of choice (in my case, cx_freeze).
- The interface is without a doubt less customizable compared to using a Web-based framework. However, I like this because I believe the user should be able to decide what the app should look like based on their system Qt themes. I also simply don't enjoy front-end work too much.
[1] https://github.com/FreeLanguageTools/vocabsieve
For this project, I first defined how each component would look, then used the same UI for both the website and the app to have a coherent look: https://kangruixiang.github.io/snow-ui/
[0] https://github.com/louietan/anki-editor
* I communicate directly with the local Anki database - no need to keep Anki open and use any ankiconnect type plugin.
* I can sync the database before and after with "apy sync".
* I can easily add single cards from the command line. And I can add mulitple notes from a Markdown formatted file simultaneously.
* I can easily edit cards that I have marked to specifically change in some way (I find it useful to adjust cards).
[0]: https://github.com/lervag/apy
One of the nice wins for me was that I could batch update ~200 geography notes that had some outdated numbers.
Is there a way in Ankify to export cards to any mobile apps?I always want to study Anki on mobile but in the mobile apps I know about, the experience of creating cards is too tedious.
It want to be able to create cards on desktop but usually study on mobile!
If you like building in Electron, you may like Ionic if you build a mobile app ;)
https://ionicframework.com/
I wish Anki mobile apps were just a nice simple view/study experience, with the create and edit features much better suited to desktop UI.
* 1 Question on one row, its Answer on the next row. I use text color same as background color to hide the answer (putting the cursor on the cell shows the answer text in the formula bar up top). I just open the sheet, keep hitting down key and review.
* score column is a range between 1 ( i remember this) and -1 (totally new question). I start with -1, once I get it right, then 0.9, then 0.5, then 0.1 then 1. Increment when I get it right, decrement if wrong. Being able to just sort questions by score is the most valuable part.
* Type is either "q" or "a" based on the type of the row. Useful to filter out question rows only.
* ID is for grouping question and answer rows. Q n A rows both get the same ID so I can sort and dont mix.
* One workbook per subject. One sheet per topic.
* Works on phone, desktop, work laptop, everywhere. Copy paste friendly. Super easy to share. Color coding helps, images are supported, search works, can export to PDF, never breaks, i can group related topics and questions, make cross references, focus is on the content not the tool.
I don't need Anki. Don't need anything else. Just putting it out there for frustrated souls.
However, once you get your note types created, which requires HTML notation, you mostly just have to create content. I mostly learned how to do that by downloading community decks and checking out how they did it, and combining the ideas myself.
I create all my cards using Libreoffice Calc and saving as a csv file, then importing to Anki. Each column of the csv has a corresponding field on the note type.
Sometimes I use Perl programs to generate huge csv files from source materials, automating most of the creation of decks, and I convinced my language tutor to give me example phrases in Excel format instead of Word to easily import on Anki.
I think one of the most used alternative to Anki is Mnemosine, you can check it out, maybe it fits you better.
[0] https://mochi.cards/
A little bit of feedback if you dont mind:
- Allow to deactivate the notifications for reviewed cards and the info on pressing the space bar. They can get annoying pretty fast.
-At least for the desktop browser version put the preferences in a normal page, not a modal. It was a pain to scroll down since I use only a shitty trackpad,so no mouse-wheel.
Tangentially related, but I have a GitHub Action [1] -- which converts all the notes I write in my (oft-neglected) TIL site [2], and which may also be of interest. It's simple stuff but yeah bit of fun.
[1]: https://github.com/Julian/til/blob/1b9ae162625d20d3e4b6a3ffb... [2]: https://github.com/Julian/til/ [2b]: https://til.grayvines.com/
[1]: https://github.com/kerrickstaley/genanki
An aside question: For incoming med students interested in tech, would it be worthwhile to learn programming? I know it would be great for research. But as someone who is unsure about becoming a clinician scientist, it might be a waste of time to learn programming concurrently during med school.
I think it would be good if you learn it prior to going in. You just won't have time to do any programming learning in med school. Med school is more than a full time job by itself.
Essentially no need convert your notes to Anki cards, your notes litelarly became spaced repetition cards.
Also, any plans of an Android version?
I will use it if it is available on Linux.
You can also use anything else instead. In my example, you could use {{}} as the front of the card instead of comments. I just chose comments myself.
See more here: https://ankify.krxiang.com/docs/basic
Anki can take a while to get used to. And there are a lot of articles/videos tutorials. I didn't think it was within the scope of my program to explain Anki cards haha.
[1] https://github.com/FreeLanguageTools/vocabsieve