How I Manage My Knowledge
Tags: automation, python, productivity, git
Published: 2021-11-01 21:16:18

This post is originally from my [blog](https://www.uzpg.me/general/2021/07/20/my-knowledge-process.html).


This is an overview of the tools and software I use to maintain and index of my knowledge and life in an efficient and shareable way.

# Tech

The main knowledge base program I use to save and gather information is [Archivy](https://archivy.github.io), an open source project I created that supports hierarchical and bidirectional notes, local bookmarking (downloads the webpages you want) and is highly extensible.

I run a local instance of this program on my computer, through which I edit / manage my knowledge, simply opening a new browser tab or vim when I have content to write. All my data is stored as markdown files in a local git repository that I push to a private GitHub repo for backup / access on my phone.

I wrote a [plugin](https://github.com/archivy/archivy-static-site-generator) to turn user Archivy knowledge bases into static HTML websites so that users can share their knowledge bases online. Mine is hosted at [knowledge.uzpg.me](https://knowledge.uzpg.me).

The git setup I have makes it so that whenever I push my changes and indicate new files in public visibility this website is updated.

This setup allows for a few advantages:

- **extensibility** - the software I use is very flexible so it's very easy for me to script / setup infrastructure around my knowledge base. This is possible using tools like Archivy [plugins](https://github.com/archivy/awesome-archivy) and [APIs](https://archivy.github.io/reference/architecture/).
- **ease of sharing** - this extensibility allows many ways for me share my knowledge base, and also distribute the extensions / scripts I use to organize it. My knowledge base can then also have value for other people, and I can directly send my notes, on top of having it act as a personal knowledge repository.
- **ease of access** - I can access my knowledge whenever I want, on any device, through github / my public static site.

# Content

The actual content I save into my knowledge base can be divided into multiple types.

## Notes

Notes are a very important part of my knowledge base, as they are useful for retention and helpful to go back on things I've learned. My knowledge base is constantly compounding with new information that I can link together.

Whenever I read a non-fiction book I always try to highlight and annotate it. Then, once I'm done I come back to it and try to synthesize its main ideas. Although this process is long, it helps me really make sure I understand all the core ideas of the work and have a way to review its essential message. Examples: [The Selfish Gene](https://knowledge.uzpg.me/dataobj/1214/) or [The Theoretical Minimum](https://knowledge.uzpg.me/dataobj/1913/).

I also keep notes on courses or talks that I have attended, often related to STEM. For these I use embedded LaTeX and screenshots of course material. [Example](https://knowledge.uzpg.me/dataobj/1923/)

## Miscellaneous lists

This part of my knowledge base acts as somewhat of a personal record, or journal of the things I've done and the content I've consumed.

Indeed, I find it useful to compile collections of miscellaneous content I appreciated. It helps me keep track what I've done and when I did it. This is a form of **bookmarking** generalized beyond just links. For example, the lists of [the books I've read](https://knowledge.uzpg.me/dirs/books/), [words I like](https://knowledge.uzpg.me/dataobj/153/), [quotes](https://knowledge.uzpg.me/dataobj/1611/), [poetry](https://knowledge.uzpg.me/dataobj/1925/) or [articles I saved](https://knowledge.uzpg.me/dataobj/1849/). I gradually add to these whenever I find something relevant.

I also jot down lists of events or activities I participated in and would like to keep a digital reference of, in the form of a journal. I'm very fond of cyber-security for example, and when I do a cyber-security competition (CTF) I enjoy saving my opinion of the event and [its challenges](http://localhost:5000/dataobj/318).

## Web Content

All of these different types of content benefit from links to articles as references. One of the core feature of Archivy is it's ability to download / store web content locally. To this effect, I often use Archivy's functionality to download relevant articles or webpages that I then link inside my notes. This also ensures the content survives [link rot](https://en.wikipedia.org/wiki/Link_rot).

I can also use existing scripts to quickly download content from my online accounts, like [my pocket account](https://github.com/archivy/archivy-pocket) or [my Hacker News posts](https://github.com/archivy/archivy-hn).

## General Documents

I also keep many standalone documents that I'd like to have backed up in my knowledge base: for example, school material that I can then share with classmates, or the [poetry I write infrequently](https://knowledge.uzpg.me/dirs/poetry/).


# Conclusion

This process allows me to quickly search and navigate all the things I've learned / done / appreciated. I can explore and handle this content manually or programmatically through scripting.

This way of interfacing helps me access my knowledge base efficiently and share without any hassle. I'm very satisfied with my setup but plan on adding more features to the software I use; including a graph view of links similar to Obsidian's, and better tagging.

I also think there are many interesting plugin ideas I could develop to script with my content: like a script that uses Natural Language Processing to generate spaced repetition quizzes on your knowledge base.

I plan on implementing ML integrations to have automated suggestions of tags and links between notes, something I'm really excited about too!