Zettelkasten in plain text-only flat files
==========================-===============
Last edited: $Date: 2021/10/29 17:47:12 $
Zettelkasten: build up knowledge and insights
---------------------------------------------
A Zettelkasten (
https://en.wikipedia.org/wiki/Zettelkasten)
is a great system to build up your knowledge, ideas and
insights.
People have been using Zettelkasten from at least the
seventeenth century, so for more than 300 years.
The name Zettelkasten is German for cabinet ("Kasten") with
index cards ("Zettel").
The modern use of Zettelkasten is mainly focused on the
writing of scientific books, papers and articles, but
Zettelkasten is also useful outside the scientific world, for
the personal development of knowledge, ideas and insights.
Zettelkasten: a long term project
---------------------------------
Building a Zettelkasten is an investment for the future.
A Zettelkasten starts working when it contains some critical
mass. There needs to be enough Zettel, with enough ideas and
enough cross references, before it starts to really work.
Zettelkasten therefor gain value over time, typically one or
more decades.
** What ever the system you choose to implement your **
** Zettelkasten in, be sure it will survive that long and **
** still is available and useful in, say, ten or twenty **
** years. **
Avoid proprietary formats
Today, nobody uses the WordPerfect 5.1
format anymore. Microsoft Office has superseded Wordperfect
and replaced the common used format with its doc-format, which
was later abandoned and replaced with the docx-format
(pretending that it is an open format).
Who knows what formats will be used in ten or twenty years?
How sure are you, that the proprietary formats you are using
today, will be available and usable in the next decades?
** So, to be sure of a sustainable Zettelkasten you **
** should avoid proprietary formats. **
Avoid external services
Cloud services come and go.
Google have shown that even successful and popular cloud
services, provided by a large company, can be terminated at
any time (see
https://killedbygoogle.com/).
New and innovative cloud services are often created and
maintained by a small team, with even less guarantees for the
long term availability of those services.
How much can you trust a cloud services?
Even when you trust the current owner of the cloud service,
tomorrow it can be sold to another party.
Microsoft, the current owner of GitHub, have shown that all
the data you put into a cloud service, can be harvested and
used for the benefit of the owner of the cloud service,
without respect for the intellectual property --and without
any opt-out option for the users.
Who knows, what the current or future owner of the cloud
service you build your Zettelkasten in, will do with all your
valuable data?
** So, to be sure of a sustainable Zettelkasten you **
** should avoid cloud services and any other dependency **
** on external sources as much as possible. **
Zettelkasten: low tech
-----------------------
Simplicity is often the best
Over the last hundreds of years many successful Zettelkasten
have been build with real paper "Zettel" (index cards) with
hand written cross-references.
The added value from the Zettelkasten comes from your
interlinked permanent notes in which you explain certain ideas
to your future self.
When you create a Zettel, you have first investigated the
subject, and made sure you understood it. After this, you
write an explanation in your own words to your future self.
At creation time you also search for one or more related
Zettel and connect the Zettel with cross-references, links
from one Zettel to another, completed with back links on the
referring Zettel.
When your Zettelkasten grows, the links between the notes, and
therefor, the links between ideas, can lead to surprising new
insights.
It is not about the technology
While there are many advantages in bringing the Zettelkasten
in the digital realm, we should be careful not to over
complicate things.
You must be in full control over your Zettelkasten and
understand its internal workings. The more complex the system
is, the more it becomes a black box that seems to do magical
things beyond your understanding and beyond your control.
### Wiki with back links
Basically, the functionality of a digital Zettelkasten is like
the functionality of a wiki with back links and tags.
It is not the complex technology that makes your Zettelkasten
valuable, but the information you put into it, how you
compiled that information and the links you created between
the ideas.
Plain text files
----------------
Best long term format
Flat, plain text files are the best long term format.
Flat, plain text files were readable in the sixties, and will
still be readable in twenty or thirty years.
Version control
Version control systems love flat, plain text files. They are
made for this format. So when your Zettelkasten uses plain
text files it is very easy to put these under your favorite
version control, with all the benefits that comes from
version control systems.
All elements should be in plain text
You choose flat, plain text files because of the digital
sustainability. For the same reason, your Zettelkasten should
use only plain text files, and nothing else.
So, no databases that magically create back links, but links
and back links right in the plain text files self.
CamelCase filenames
-------------------
In the heydays of the wiki, the CamelCase
(see
https://en.wikipedia.org/wiki/Camel_case) formar was king.
Everybody could understand CamelCase, it is easy to type and
requires no remembering of link formats.
For humans, it is easy to pick out CamelCase words in a text.
Also for digital processing CamelCase is fine, it constitutes
a pattern that can be matched with a simple regular expression
(regexp).
The wonderful lightweight awkiawki
(see
http://awkiawki.bogosoft.com/) wiki for example, written
in awk, uses a regexp to recognize CamelCase an create a
hyperlink from it on the fly. Likewise, you can build Perl-
scripts, Vim-scripts, Python-scripts, and so on, to work with
CamelCase.
So, when you use CamelCase to create your links from one
Zettel to another, as well as the back links, you keep your
Zettelkasten in plain text files in a sustainable format.
Meaningful filenames
An advantage to use CamelCase for your filenames is that you
get readable filenames.
Some Zettelkasten systems use a timestamp for the filename, as
a method to generate unique filenames.
When you choose CamelCase words as filename, theoretically
there is a chance of filename collision, meaning that you
could choose a CamelCase word that is already in use. My
personal awkiawki wiki however, currentlycontains over 800 files,
all with CamelCase words, and this has never been a problem.
Simple editor functions
-----------------------
Traditionally, BSD- and Linux systems provide powerful text
editors.
When you use a decent editor, like Emacs or Vim, there is no
need for extra tooling, you can just use the build in features
of your editor or some minor added functions.
For this, you need two important functions:
- jump to the file which name is under the cursor, and create
if it does not exists yet.
- copy the filename of the current file to the editor's
clipboard
When you want to create a new Zettel, go to the Zettel you
want to connect from, and use the second function to copy the
filename of that Zettel to the editor's clipboard.
Now write under a heading of related Zettel the CamelCase of
your new to create Zettel and use the first function to jump
to this file. The editor opens this file in a new window or
buffer, creating it if needed.
There you create a heading for the back links, and paste the
previous copied filename of the Zettel you jumped from.
Congratulations, you now have two interlinked Zettel.
To wrap it up, each Zettel consists of a file with a CamelCase
filename. The Zettel contains a title, your explanation of the
idea your Zettel is about, and an area "Related Zettel", with
the CamelCase filenames of one or more related Zettel. Just
put your cursor over one of those, and use the first function
to jump to the related Zettel.
Emacs
In Emacs, to jump to the file under the point (cursor), you
use the "find-file-at-point" function. Unfortunately, this
does not works for files that don't exist yet, because it
tries to fuzzy-find the file. Maybe you can create your own
elisp function for this, it shouldn't be that hard. Perhaps
something like this is enough:
(defun my-goto-filename()
"Visit file under point"
(interactive)
(find-file (current-word)))
You can also use the org mode links for this, but than you
have to use the double square bracket method (like
[[MyFileName]] ).
To copy the current filename to the kill buffer, you could use
a function like:
(defun my-copy-filename ()
"Copy the filename, without path, of the current buffer."
(interactive)
(kill-new (file-name-nondirectory (buffer-file-name
(window-buffer (minibuffer-selected-window))))))
Vim
To jump to the file under the cursor:
- For existing files: simple type `gf`
in command mode, of, if you want to open it in a
different window, use `Ctrl-w f`.
- For new or existing files: Use `:tabe <cfile>`
To copy the current filename, use `expand("%:t:r")`.
MicroEMACS
It turned out that it was relative easy to create similar
functions in Mark Alexander's fork
(see
https://gitlab.com/bloovis/micro-emacs) of Conroy's
MicroEMACS (see
http://rho.tuxfamily.org/museum/).
I created a function in pe (Marks MicroEMACS fork) that opens
the file under point (cursor) in a new buffer, and a function
that copies the current filename to the kill-ring.
Unfortunately, this version of MicroEMACS only builds on Linux
and FreeBSD. I could not successfully compile it on OpenBSD
and NetBSD.