summaryrefslogtreecommitdiff
path: root/project/templates/deckconv.xhtml
blob: d02afc2c2edadab65fcc2b7a39146b608fb09a01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

{%- extends "base_plain.xhtml" -%}



{%- block title -%}Flashcard Deck Converter{%- endblock -%}



{%- block content %}
<h4>Flashcard Deck Converter</h4>

<p>Git repository: <a href="/cgi-bin/cgit.cgi/fresh-deck">Link</a></p>


<h5>11/11/2021</h5>

<p>Anki is a sophisticated spaced repetition flashcard program. It also has a codebase going on 15
years old made of Python and Rust, dependencies that make heavy use of Go, and a
<a href="https://github.com/ankidroid/Anki-Android/wiki/Database-Structure" class="external">
convoluted deck format</a>, all to produce a desktop program 100-140MB in size depending on
operating system. In short? It's a mess. But since it has been around for so long and is currently
the most used open source flashcard program it is also the one with the most decks people have made
for it.</p>

<p>The nearest competitor to Anki in my assessment is Fresh Memory. It is a much more compact and
tidy project written in C++ using Qt with similar functionality for spaced reptition using
arbitrarily sided flashcards. On the <a href="https://en.wikipedia.org/wiki/List_of_flashcard_software"
class="external">list of what's available</a> the only other open source options are Mnemosyne,
another massive mess of Python, or OpenCards, which uses Microsoft Powerpoint of all things for the
deck format. Unfortunately Fresh Memory was abandoned shortly after it was open sourced and has a
whole host of minor issues that need working on. I'll get around to doing that eventually.</p>

<p>In the meantime, here's a utility that converts Anki .apkg decks to Fresh Memory .fmd decks.
Oh, and it can also output to comma separated value format too if you find that more useful. Due to
differences between formats some information does not carry over very well, but for most decks it
should still perform adequately.</p>

<div class="figure">
    <img src="/img/deckconv_screenshot.png"
         alt="A screenshot of the command line deck converter"
         height="573"
         width="824" />
    <div class="figcaption">Command line utility</div>
</div>

<p>Aside from the command line there's also a simple graphical interface put together using FLTK.
Not the most pretty, but it works.</p>

<div class="figure">
    <img src="/img/gdeckconv_screenshot.png"
         alt="A screenshot of the graphical interface to the deck converter"
         height="301"
         width="502" />
    <div class="figcaption">Graphical utility</div>
</div>

<p>Anyone trying to compile this utility or otherwise taking a quick peek at the code or readme may
note there are quite a few dependencies involved. This is due to Anki's aforementioned convoluted
deck format. Digging down through layers of JSON inside an SQLite database inside a zipfile is a
little bothersome. Dealing with Fresh Memory's current XML based deck format is a walk in the park
by comparison, even if it is more unwieldy due to any deck with media not being all one file.</p>
{% endblock -%}