Skip to main content

Supercharge your learning by combining two of the most revolutionary ideas in knowledge enhancement!

Project description

Zettel Merken Image

Supercharge your learning by combining two of the most revolutionary ideas in knowledge enhancement!


GitHub tag (latest SemVer) GitHub license GitHub issues GitHub last commit



Introduction

Zettel stands for "note" and Merken stands for "remember" in German. A literal translation would imply "Remember your notes", but that is an overly simplistic definition of what the title stands for.

To be precise, Zettel Merken is a fusion of two impactful ideas in the field of knowledge management and learning enhancement: "Zettelkasten" and "Spaced Repetition".

What is Zettelkasten?

The Wikipedia article defines zettelkasten as "The zettelkasten is a system of note-taking and personal knowledge management used in research and study".


Zettelkasten paper schematic

zettelkasten.de is a wonderful little site that is all about, well, zettelkasten. Do read the introduction. To pick an excerpt from there:

A Zettelkasten is a personal tool for thinking and writing. [...] The difference to other systems is that you create a web of thoughts instead of notes of arbitrary size and form, and emphasize connection, not a collection.

If I had to explain the concept to someone in a hurry, I'd say: Zettelkasten = Mind Map + Flash Cards

Of course, it is not entirely either, so I would recommend following the links above for a more detailed understanding.

How I use Zettelkasten

I take notes for everything! From doing research for my web novels to learning new languages, from my transaction history to ongoing projects, suffice to say I have a lot of notes. However, I have come to realize that not all my notes are highly connected. Rather, a collection of notes is usually extremely cohesive with one another but largely decoupled from the rest. So I follow a sort-of watered-down system like so:

  1. One single folder called "notes"
  2. An index (No direct notes made here, only links), usually named "index.md".
  3. A "hub" for each topic. Imagine a hub as a collection (like a notebook or a drawer). One hub usually points to one large topic.
  4. A "zettel" for each atomic piece of info. All zettels for a topic are linked into the hub and are stored in a folder usually named after the same.

That's it! To expand on the above, here is a sample of my current notes directory:

~/Notes
├── index.md
├── books-and-articles.md
├── books-and-articles
│  ├── atomic-habits.md
│  └── ledger-accounting.md
├── code-notes.md
├── code-notes
│  ├── python.md
│  └── vim.md
├── learning-french.md
├── learning-french
│  ├── basics-1.1.md
│  ├── basics-1.2.md
│  └── basics-1.3.md
├── transactions.md
└── transactions
   ├── 01-2022.md
   └── 02-2022.md

As you can see above, I have hubs after each topic: zettel-merken, books-and-articles, learning-french, etc. Each hub has a file.md and folder with the same name. I take all my notes in neovim in markdown format No special plugins, just a couple of functions and mapping. See wiki.

Thus, my index.md will look like:

# INDEX

- [Learning French](./learning-french.md)

and my learning-french.md:

# Learning French

- [Basics 1.1](./learning-french/basics-1.1.md)

- [Basics 1.2](./learning-french/basics-1.2.md)

- [Basics 1.3](./learning-french/basics-1.3.md)

Concerning zettels, I try to have them in an easily digestible format. Each zettels has a microscopic focus on the information it is trying to convey. That is - all the content inside a zettel must directly relate to a single matter or flow in one direction. The size of the file is irrelevant, although I try to keep it short and simple.

For example, basics-1.1 might look like:

# Basic 1.1

## Level 0

- un = a (sounds: un)

- et = and (sounds: ae)

- un chat = a cat (sounds: un shaa)

- un homme = a man (sounds: un oum)

- un garcon = a boy (sounds: un gars-on)

- un chat et un homme = A cat and a man

Also, I try to avoid more than one layer of nesting below the "notes" folder but in some cases, it is inevitable. However, there should never be a need to go beyond two layers.

After following the above system consistently for a few months, you'll have a decent-sized collection of notes all linked together in a proper structure. That being said, simply "collecting" notes is never going to help you learn in the long term. That is where the Spaced Repetition comes in!

What is Spaced Repetition?

Excerpt from Wikipedia article:

The basis for spaced repetition research was laid by Hermann Ebbinghaus, who suggested that information loss over time follows a forgetting curve, but that forgetting could be reset with repetition based on active recall.


ForgettingCurve

Excerpt from e-student.org:

Spaced repetition is a memory technique that involves reviewing and recalling information at optimal spacing intervals until the information is learned at a sufficient level.

It is quite difficult to manually track hundreds of notes and review a set everyday. You'd have to keep logs of when each topic was visited, how many repetitions were completed, when the next review will be and so on. Quite cumbersome!

That is were Zettel Merken comes into play. Not only does this program keep track of your every note and its schedule, it also automatically emails notes that are due for review for the day! How awesome is that? It is quite easy to use too!

Setup (currently on test pypi, will upload to prod soon)

NOTE: Code was written in and tested on Manjaro Linux (kernel 5.18) with Python 3.10 (compatible with 3.9)

  1. Install

    python3.10 -m pip install zettelmerken
    
  2. Configure

    python3.10 -m zettelmerken --config
    

    Create a config.json in either ~/.config/zettel_merken/ or ~/zettel_merken, and open in default editor.

  3. Initialize

    python3.10 -m zettelmerken --init
    

    Create systemd units to exectute zettelmerken on a daily basis.

  • Help

    python3.10 -m zettelmerken --help
    

TODOs

  • Publish to PyPI
  • Add slack webhook alternative to email
  • Add a wiki

Maybes

  • config.toml instead of config.json?
  • Windows/Mac Support?
  • Per-note schedule?
  • Docker Image?

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zettelmerken-0.1.1.tar.gz (40.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zettelmerken-0.1.1-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file zettelmerken-0.1.1.tar.gz.

File metadata

  • Download URL: zettelmerken-0.1.1.tar.gz
  • Upload date:
  • Size: 40.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.5

File hashes

Hashes for zettelmerken-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d04e8401cbe7492d0213d04c0bc3edf05cc52ae6ac16aebce754c01b692fb091
MD5 e746d0f1f133e66683e2e10880db2769
BLAKE2b-256 e08d1423e83e7ea3ad7181911dedfddab426134afe910e56379112bd013c866c

See more details on using hashes here.

File details

Details for the file zettelmerken-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: zettelmerken-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.5

File hashes

Hashes for zettelmerken-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 289ef33f6e39abd55fd6e1add029d7a20bc1c2c95bab0a995b1bf0625e83d829
MD5 f3449a48ccd387e3e3a4e3eb48c16059
BLAKE2b-256 ff23b401d56ead776f90522e5c53cbd8745e7404b858ee84a1622a6558e7f04d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page