summaryrefslogtreecommitdiff
path: root/project
diff options
context:
space:
mode:
Diffstat (limited to 'project')
-rw-r--r--project/assets/img/deckconv_screenshot.pngbin0 -> 38859 bytes
-rw-r--r--project/assets/img/gdeckconv_screenshot.pngbin0 -> 14297 bytes
-rw-r--r--project/complexity.yml1
-rw-r--r--project/context/articles.json6
-rw-r--r--project/templates/deckconv.html67
5 files changed, 74 insertions, 0 deletions
diff --git a/project/assets/img/deckconv_screenshot.png b/project/assets/img/deckconv_screenshot.png
new file mode 100644
index 0000000..b6c26f7
--- /dev/null
+++ b/project/assets/img/deckconv_screenshot.png
Binary files differ
diff --git a/project/assets/img/gdeckconv_screenshot.png b/project/assets/img/gdeckconv_screenshot.png
new file mode 100644
index 0000000..e55242b
--- /dev/null
+++ b/project/assets/img/gdeckconv_screenshot.png
Binary files differ
diff --git a/project/complexity.yml b/project/complexity.yml
index 6b5d98a..2a93b73 100644
--- a/project/complexity.yml
+++ b/project/complexity.yml
@@ -12,6 +12,7 @@ output_dir: "../www"
unexpanded_templates:
- "about.html"
- "adapad.html"
+ - "deckconv.html"
- "fltkada.html"
- "grasp.html"
- "integral.html"
diff --git a/project/context/articles.json b/project/context/articles.json
index ba5af70..c7dccaf 100644
--- a/project/context/articles.json
+++ b/project/context/articles.json
@@ -1,6 +1,12 @@
[
{
+ "title": "Flashcard Deck Converter",
+ "anchor": "/deckconv.html",
+ "taglist": ["application", "programming"],
+ "postdate": "11/11/2021"
+ },
+ {
"title": "Sydney Rail Maps",
"anchor": "/sydneyrail.html",
"taglist": ["maps", "transport"],
diff --git a/project/templates/deckconv.html b/project/templates/deckconv.html
new file mode 100644
index 0000000..688346c
--- /dev/null
+++ b/project/templates/deckconv.html
@@ -0,0 +1,67 @@
+
+{% extends "base.html" %}
+
+
+
+{% 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 interfaces 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 %}
+
+