Reading List
Table of Contents
1. To Read
2. Currently Reading
3. Yearly History
3.1. 2024
3.3. Automated History
Books were added in retroactively so the file name matches the wrong year. From 2025 and up, things should be accurate.
3.3.1. 2024
3.3.2. 2025
- In Praise of Idleness
- Pirate Cinema
- Language Instinct
- The Call of Cthulhu
- Highlights / Notes
- The Madness from the Sea
- Page 56 @ 03 June 2025 01:38:03 AM
- The Mechanic and the Luddite
- Highlights / Notes
- 1 - Two Systems
- Page 20 @ 20 June 2025 04:42:45 AM
- 2 - Two Models
- Page 40 @ 20 June 2025 05:37:12 PM
- Page 57 @ 21 June 2025 03:36:02 AM
- 7 - Risk
- Page 218 @ 06 July 2025 01:09:43 AM
- 8 - Futures
- Page 237 @ 08 July 2025 08:43:38 PM
- Page 241 @ 08 July 2025 11:46:41 PM
- Page 246 @ 09 July 2025 12:00:24 AM
- Page 250 @ 09 July 2025 06:53:59 AM
4. Code
Generate the list of books currently being read (tag "Reading"):
(mapconcat (lambda (node) (princ (format "- [[file:%s][%s]]" (org-roam-node-file (org-roam-node-from-id (nth 0 node))) (nth 1 node)))) (org-roam-db-query [:select [nodes:id nodes:title] :from nodes :inner :join tags :on (= nodes:id tags:node_id) :where (= tags:tag "Reading")]) "\n")
Generate a by-year list of each book that is marked with tag "Read":
(let ((year-map (make-hash-table :test 'equal))) (dolist (result (org-roam-db-query [:select [nodes:id nodes:title files:mtime] :from nodes :inner :join files :on (= nodes:file files:file) :inner :join tags :on (= nodes:id tags:node_id) :where (= tags:tag "Read")])) (let* ((id (nth 0 result)) (title (nth 1 result)) (year (format-time-string "%Y" (nth 2 result))) (file (org-roam-node-file (org-roam-node-from-id id))) (rel-file (file-relative-name file (file-name-directory buffer-file-name))) (html-file (concat (file-name-sans-extension rel-file) ".html")) (entry (format " - [[file:%s][%s]]" html-file title))) (push entry (gethash year year-map)))) (maphash (lambda (year entries) (princ (format "*** %s\n%s\n" year (mapconcat #'identity (nreverse entries) "\n")))) year-map))