Anki Flashcard Deck for Elixir 1.19.0-dev Functions

Hello Elixir community,

I’d like to share an Anki flashcard deck I’ve created containing 1,610 cards covering functions from Elixir version 1.19.0-dev.

About the Project

The deck was created as part of a weekend project where I developed a formatter for the ex_doc library that generates Elixir function definitions in CSV format, which can be directly imported into the Anki app.

What is Anki?

For those unfamiliar, Anki is a flashcard application that uses spaced repetition to help with memorization and learning - perfect for remembering programming language functions!

Download

You can download the deck here: Elixir 1.19.0-dev Functions Anki Deck

Feedback and suggestions are welcome!

6 Likes

Great minds think alike! I also did this recently and have been memorizing functions and macros from the Kernel module. I wasn’t sure how it’d work out, concerned that the auto-generated cards would be not easy to memorize or boring to learn, but it’s been mostly fine and worth it, I think.

I’m only doing the first sentence of each function or macro, not the whole doc string, though. I think that helps with parsing and going through the spaced reps.

I also structure my notes with a few fields. I extracted data using a Livebook and this hastily coded snippet:

defmodule Ankify do
  def extract_deck(module) do
    Code.fetch_docs(module)
    |> elem(6)
    |> Enum.reject(fn {_, _, _, doc, _} -> doc == :hidden end)
    |> Enum.map(&parse_doc(&1, module))
    # |> Enum.map(fn note -> Map.values(note) |> Enum.join("\t") end)
    # |> then(fn notes -> Enum.join(notes, "\n") end)
  end

  def parse_doc({{kind, name, arity}, _, [signature], %{"en" => item_doc}, _}, parent) do
    [description | _] = String.split(item_doc, "\n\n")
    description = String.replace(description, ~r"\n+", " ")
    parent = Atom.to_string(parent)

    %{
      id: "#{parent}.#{name}/#{arity}",
      parent: parent,
      type: Atom.to_string(kind) |> String.capitalize(),
      signature: signature,
      description: description
    }
  end
end

This then has two cards, one to recall the description from the signature and one to recall the signature from the description.


I was planning to polish this up and share as a script but never got around to it.

2 Likes

Nice way you did it. I hope to make improvements to my code which is still very simple, and when it’s more professional I intend to think of a way to share it on GitHub. I believe that for ex_doc it doesn’t need to have this format. I want to do it in a way that makes it simple to generate decks for any Elixir library. Thank you for your response.

2 Likes