From 3f41c121ea527621b51bf4e04a9d0e134a0261f3 Mon Sep 17 00:00:00 2001 From: Christian Tietze Date: Tue, 25 Nov 2025 08:33:16 +0100 Subject: add config and demo content to Zettelkasten page --- 2025/talks/zettelkasten.md | 205 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) (limited to '2025') diff --git a/2025/talks/zettelkasten.md b/2025/talks/zettelkasten.md index 5469831f..677d937b 100644 --- a/2025/talks/zettelkasten.md +++ b/2025/talks/zettelkasten.md @@ -31,7 +31,212 @@ For this presentation, I merely assume that you agree that writing improves the Christian is a macOS/iOS developer with a strong focus on user experience and clean architecture. Driven by a passion for accessibility and performance, Christian has shipped many apps and authored three technical books and 895+ blog posts, helping developers world-wide to realize their app ideas with a deep understand for the technologies they use. In 2013, Christian wrote about the Zettelkasten topic on his own personal blog and eventually moved everything over to where he and Sascha continue to teach and write. +## Code and Notes from the Talk +### Minimal Emacs + Denote Configuration + +This is the relevant configuration Christian used in the Emacs demo. Save this to a folder as `init.el`, and launch via: + + $ emacs -nw --init-directory . init.el + +`init.el` contents: + +```elisp +(load-theme 'modus-vivendi-tinted) ;; Dark theme to match dark slides +(menu-bar-mode -1) ;; Disable topmost menu bar + +(package-refresh-contents) + +(use-package denote + :ensure t + :hook (dired-mode . denote-dired-mode) + :bind + (("C-c n n" . denote) + ("C-c n r" . denote-rename-file) + ("C-c n l" . denote-link) + ("C-c n c" . denote-link-after-creating) + ("C-c n b" . denote-backlinks) + ("C-c n d" . denote-dired) + ("C-c n g" . denote-grep)) + :config + (setq denote-directory (expand-file-name "./notes/")) + + ;; Automatically rename Denote buffers when opening them so that + ;; instead of their long file name they have, for example, a literal + ;; "[D]" followed by the file's title. Read the doc string of + ;; `denote-rename-buffer-format' for how to modify this. + (denote-rename-buffer-mode 1)) + +;; For the demo, I forced notes to show in full screen by default. +(setopt display-buffer-alist nil) +(add-to-list 'display-buffer-alist + '("^\\[D\\] " ;; Denote buffer name prefix + (display-buffer-reuse-mode-window display-buffer-full-frame) + )) +``` + +### Notes created during the demo + +These are the notes Christian created during the recording. The recording was sped up 3x--4x, so this could be nicer to read than having to squint at the video: + +#### `20251121T204827--mechanics-and-habits-to-use-a-zettelkasten__zettelkasten.org` + +```org +#+title: Mechanics and habits to use a Zettelkasten +#+date: [2025-11-21 Fri 20:48] +#+filetags: :zettelkasten: +#+identifier: 20251121T204827 + +Essential: +- Write: put in effort; [[denote:20251121T205045][GIGO]] +- Connect: Link notes to create trails +- Correct: Improve as you go + +Additional: +- Design for use: give things a purpose, e.g. blog about it +- Create structure. [[denote:20251121T205312][Types of structures in a Zettelkasten]]: design new entry points and trails +- Start in the Zettelkasten: use the system to learn, make it grow, get better +- Start with a link: keeps your notes connected. [[denote:20251121T210416][Create notes as link first to avoid orphans]] + +Tool doesn't matter as much. Small files are good. [[denote:20251121T210107][Use Denote in Emacs]] + +(Christian Tietze: Zettelkasten for Regular Emacs Hackers, EmacsConf 2025) +``` + +#### `20251121T205045--gigo__programming_quality.org` + +```org +#+title: Garbage in, garbage out +#+date: [2025-11-21 Fri 20:50] +#+filetags: :programming:quality: +#+identifier: 20251121T205045 + +The principle known as "Garbage In, Garbage Out" (GIGO) in computer +programming states that for any system, the quality of output is +directly depending on the quality of input. + +See: https://en.wikipedia.org/wiki/Garbase_in,_garbage_out +``` + +#### `20251121T205312--types-of-structures-in-a-zettelkasten__structure_zettelkasten.org` + +```org +#+title: Types of structures in a Zettelkasten +#+date: [2025-11-21 Fri 20:53] +#+filetags: :structure:zettelkasten: +#+identifier: 20251121T205312 + +Non-comprehensive list of structures that could be used in a Zettelkasten: + +- Opposition pair: 1 note for the pair, 1 note per position/opposition each; pro/contra +- Table of contents: list of topics/headings + - an outline for a writing project + - recreation of a book's contents (so I can write in detail about the book); +- Argument: recreation of a distilled form to get to a conclusion; + list premises and evidence, and how these support the conclusion + - Counter-argument: address parts of the original argument to support another + view and test the argument's strength +- Table of things +- Graphics, like a concept map, Mind-Map, diagram: visually bring + elements into a relation, then write about the relation and the elements + +Metaphors: +- Iceberg: visibile tip with hidden depth; someting that appears small + but is large; good metaphor for obstacles +- Black box: focus on inputs and outputs, and ignore the 'how' in the middle + - e.g. most Emacs Lisp functions (hoping the documentation is good) +- [[denote:20251121T205739][Atom, molecule, organism]]: how small parts compose to larger parts, + which compose to even larger pieces + + +(Christian Tietze: Zettelkasten for Regular Emacs Hackers, EmacsConf 2025) +``` + +#### `20251121T205739--atom-molecule-organism-metaphor__composition_recursion.org` + +```org +#+title: Atom, molecule, organism metaphor +#+date: [2025-11-21 Fri 20:57] +#+filetags: :composition:recursion: +#+identifier: 20251121T205739 + +Atom: smallest part, indivisible elements +Molecule: comprised of atoms; structure added to combine elements +Organism: comprised of molecules; different level of analysis, irreducible to molecules/atoms + +This can be used e.g. for programming: functions compose into larger +functions which compose into packages. + +Actual biological organisms also work in such a way. Organs are part +of bodily functions (high abstraction), but from a chemical or +physical perspective, you can decompose them into atoms. That doesn't +tell you anything about the organ's function. +``` + +#### `20251121T210107--denoteel-for-zettelkasten-in-emacs__denote_emacs_zettelkasten.org` + +```org +#+title: Denote.el for Zettelkasten in Emacs +#+date: [2025-11-21 Fri 21:01] +#+filetags: :denote:emacs:zettelkasten: +#+identifier: 20251121T210107 + +While not shipping with Emacs out of the box, Denote is easy to install and a great start to manage notes: + +- it comes with unified way to create new notes, and hides time-stamped ID's with "[D]" in buffer lists +- it can manage links, and show incoming links to notes ("backlinks") +- it supports quickly adding links, and creating links _first_ out of + the box -- it just creates the note immediately, so you don't notice + - [[denote:20251121T210416][Create notes as link first to avoid orphans]] + +* Example configuration + +#+BEGIN_SRC elisp +(use-package denote + :ensure t + :hook (dired-mode . denote-dired-mode) + :bind + (("C-c n n" . denote) + ("C-c n r" . denote-rename-file) + ("C-c n l" . denote-link) + ("C-c n c" . denote-link-after-creating) + ("C-c n b" . denote-backlinks) + ("C-c n d" . denote-dired) + ("C-c n g" . denote-grep)) + :config + (setq denote-directory (expand-file-name "./notes/")) + + ;; Automatically rename Denote buffers when opening them so that + ;; instead of their long file name they have, for example, a literal + ;; "[D]" followed by the file's title. Read the doc string of + ;; `denote-rename-buffer-format' for how to modify this. + (denote-rename-buffer-mode 1)) +#+END_SRC +``` + +#### `20251121T210416--create-notes-as-link-first-to-avoid-orphans__linking_zettelkasten.org` + +```org +#+title: Create notes as link first to avoid orphans +#+date: [2025-11-21 Fri 21:04] +#+filetags: :linking:zettelkasten: +#+identifier: 20251121T210416 + +Recommended practice by Christian Tietze: start a new note with a link +first from some place, any place, then create the file to match that +link (which would initially lead nowhere). + +- Reduces orphans in the Zettelkasten by guaranteeing every note to + have at least one link. +- Supposedly teaches you to think about possible connections early, + which makes the network better. + +A very loosey-goosey approach, when taken literally and used +liberally: it doesn't matter where you are, just leave a forward link +to something you wish existed. Even if it doesn't fit the current +note. After all, you came up with the idea just now -- so maybe +there's a connection that you just can't spell out, yet? +``` [[!inline pages="internal(2025/info/zettelkasten-after)" raw="yes"]] -- cgit v1.2.3