#워크플로우
2023-10-12 MetaWord aprj meta workflow- TIPS
[0/0]
- heading 에는 - 는 안된다. 그럼에도 적절하게 쓰라.
- @FLEETING, @NOTES 는 필요 없다.
- hl-todo keyword 적극 활용하라
History
- 이거 하면서 구조적/계층적 태그 관리 시스템 글을 쓰고 있다. 아 오늘 다 설계 하지는 못할 것 같다. 태그 관리 시스템의 컨셉 정보만 적어 놓고. 추가로 1 시간을 활용해서 더 이야기를 작성할 생각이다.
제텔카스텐 관점에서 연결성을 확보하라
- 노트의 전후 관계를 명시 적으로 나타낼 수 있어야 한다. 지케이 스타일이다. 이 노트는 어디에서 나온 노트인가? 백노트 봐봐.
TODO PARA 세부 그룹 태그 구성
TODO Category Lists
카테고리?? 고민 필요 이렇게 가능한가?
프로젝트인데? 무엇을 구분해야 하는가? 일 집? 변하지 않는 구분자로 나누는게 좋다. 카테고리가 그런 것이다.
@WORK@ - 이렇게 하는게 맞나? 그래 일과 삶이지 뭐 @HOME@ @OPEN@
TALK CODE
DONE 목표 : 진행 상황 점검
- 어젠다와 통합. 분리 없는 구조. 통일 단순
- 프로젝트 표기만 있으면 다 어젠다에 표기 된다. 프로젝트 노트들만 내 앞의 것들이다. 이렇게 생각하면 마음이 편해진다. 나머지 노트들은 계속 표준 포멧으로 변경하면서 확장하면 된다. 현재 진행하는 것 중심으로 확장하기 때문에 일을 진행하는 데에는 문제가 없다. 마이그레이션이 쉬운 것이다.
- org-basb-code 와 통합 –> 나중에 GitHub - renatgalimov/org-basb-code: CODE methodology implementation with Ema… /home/junghan/sync/man/dotsamples/vanilla/basb-dotfiles-para/README.org 무엇이 특징인가? 다음 헤딩에서 참고하라.
- 프로젝트에 집중하라. 다른 일들은 나중에 하라!
CANCELLED replace projectile with project.el
DONT [#C] org-roam todo helper
일부 프로젝트로 이미 활용하는 중. 더 필요한가?
https://magnus.therning.org/tag-org-roam.html
TODO org-basb-code 일부 적용
맥락에서 바라보면 전체 시퀀스 상에 필요한 부분이 있다 확실히 있다.
CODE 의 개념을 반영. 파라는 언급이 없다. 파라는 기존 문서 BASB: PARA/CODE 여기서 언급하는 것을 보라.
https://renatgalimov.github.io/org-basb-code/
Pandoc
sudo apt install pandoc
brew install pandoc
Ensure that Pandoc is in your path.
pandoc --version
pandoc 3.1.7
Features: +server +lua
Scripting engine: Lua 5.4
User data directory: /home/junghan/.local/share/pandoc
Copyright (C) 2006-2023 John MacFarlane. Web: https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.
,#+RESULTS:
pandoc 2.14.0.2
Compiled with pandoc-types 1.22, texmath 0.12.3, skylighting 0.10.5.1,
citeproc 0.4.0.1, ipynb 0.1.0.1
User data directory: /Users/renat.galimov/.local/share/pandoc
Copyright (C) 2006-2021 John MacFarlane. Web: https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.
Org-roam
Obviously, we need org-roam itself
(setq org-roam-v2-ack t)
(use-package org-roam
:after org
:ensure t
:pin "melpa-stable"
:bind (("C-c n l" . #'org-roam-buffer-toggle)
("C-c n f" . #'org-roam-node-find)
("C-c n v" . #'org-roam-node-visit)
("C-c n i" . #'org-roam-node-insert)
(("C-c q" . #'org-roam-tag-add)))
:config
;; We want org-id to work with our roam directory
(setq org-roam-file-extensions '("org" "org_archive")
org-id-extra-files (org-roam-list-files)))
Capture
Emacs is a text editor.
Capture documents
- Capture targets:
E-books
Documents
Videos
Audios
Images
To capture we use Pandoc and org-pandoc-import
(straight-use-package '(org-pandoc-import :host github :repo "tecosaur/org-pandoc-import" :files ("*.el" "filters" "preprocessors"))) (global-set-key (kbd "C-c n o") #'org-pandoc-import-as-org)
Pandoc can convert almost any text format to org-mode representation. One of the current drawbacks - it cannot import online web pages.
Pandoc 은 거의 모든 텍스트 형식을 조직 모드 표현으로 변환할 수 있습니다. 현재 단점 중 하나는 온라인 웹 페이지를 가져올 수 없다는 점입니다.
Capture web-pages
org-web-tools
org-web-tools offers org-web-tools-read-url-as-org
function, which can download an URL to an org buffer.
(use-package org-web-tools
:ensure t
:pin "melpa-stable"
:bind (("C-c n u" . org-web-tools-read-url-as-org)))
Often, downloaded files need manual cleanup.
Firefox web-clipper and Pandoc
An alternative approach is to use a web-clipper and Pandoc.
Open the web article in your browser and activate a web-clipper. I use Firefoxes built-in one.
Save entire HTML into a file.
Convert the HTML with Pandoc
pandoc -f html -t org <source-file>.html -o <target-file>.org
The resulting file might require some cleanup, but the quality of the output is the best among other methods.
결과 파일은 약간의 정리가 필요할 수 있지만 출력 품질은 다른 방법 중 최고입니다.
Capture templates
Org full-text search
Crawling over your own notes is a key part of the project workflow. Below I summarized information about all full-text search engines I found for org-mode. Depending on your own need you might select one or multiple of them. Unfortunately, I didn’t find any ideal solution for a full-text search yet. Packages that make better sorting are slower than packages that give results fast but in a random order.
회원님의 노트를 크롤링하는 것은 프로젝트 워크플로우의 핵심 부분입니다. 아래는 제가 찾은 조직 모드용 전체 텍스트 검색 엔진에 대한 정보를 요약한 것입니다. 필요에 따라 하나 또는 여러 개를 선택할 수 있습니다. 안타깝게도 아직 전체 텍스트 검색에 이상적인 솔루션을 찾지 못했습니다. 정렬이 잘 되는 패키지는 결과를 빠르게 제공하지만 무작위 순서로 제공하는 패키지보다 속도가 느립니다.
- Requested features:
- helm or counsel integration.
- live search.
- result previewing support.
- a key-binding to capture results into currently clocked org file.
- results ordering support
- Headlines
- Summary
- Hightlight
- large file-sets support
ITEM FRONTEND SPEED SORT Org-roam Full-text search ripgrep (helm-rg) helm ivy fast nil helm-org-rifle helm slow t deft helm fast nil org-ql helm slow recoll helm ivy fast nil org-fts ivy fast org-agenda search
ripgrep (helm-rg)
GitHub - cosmicexplorer/helm-rg: ripgrep is nice Now I use it as a default text search engine.
brew install ripgrep
(use-package helm-rg
:ensure t
:after org-roam
:pin "melpa-stable"
:config
(defun helm-rg-roam-directory (&optional query)
"Search with rg in your roam directory, QUERY."
(interactive)
(let ((helm-rg-default-directory org-roam-directory)
(helm-rg--current-dir org-roam-directory))
(helm-rg query nil)))
:bind (("C-c n R" . helm-rg-roam-directory)))
helm-org-rifle
GitHub - alphapapa/org-rifle: Rifle through your Org-mode buffers and acquire your target
This one is good. It gives you an idea about the context. But it’s not ordering the data by the highlights.
I find org-rifle too slow at the moment. But its output is exacly what I want.
(use-package helm-org-rifle :ensure t
:after org-roam
:pin "melpa-stable"
:config
(defun org-rifle-roam-directory ()
(interactive)
(helm-org-rifle-directories org-roam-directory))
:bind (("C-c n s" . org-rifle-roam-directory)))
deft
Helm implementation didn’t work for me. So I set a default version here.
One of the drawbacks here is that you can’t see the text you matched. From my point of view - helm-rg gives more precise information about the context.
(use-package deft :ensure t
:after org-roam
:config (setq deft-directory org-roam-directory
deft-recursive t)
:bind (("C-c n d" . deft)))
;; (use-package helm-deft
;; :ensure t
;; :straight (:host github
;; :repo "dfeich/helm-deft"
;; :files ("*.el"))
;; :config
;; (setq helm-deft-dir-list `(,org-roam-directory)
;; helm-deft-extension '("org"))
;; :bind (("C-c n d" . helm-deft)))
org-ql
GitHub - alphapapa/org-ql: An Org-mode query language, including search commands and saved views
Doesn’t look suitable for large filesets, but helm implementation is good for medium-sized collections.
(use-package org-ql :ensure t
:after org
:config
(progn
(message "Loading org-ql")
(setq org-ql-search-directories-files-recursive t
org-ql-search-directories-files-regexp ".org\\(_archive\\)?$"))
)
(use-package helm-org-ql :ensure t
:after org-ql
:config
(setq helm-org-ql-recursive-paths t)
:bind (("C-c n q" . helm-org-ql-org-directory)))
recoll
GitHub - emacs-helm/helm-recoll: helm interface for the recoll desktop search tool.
I found recoll being to hard to set up. I wasn’t able to get it working on MacOS.
org-fts
microfts/elisp at main · zot/microfts · GitHub
- It didn’t work on MacOS from scratch.
- I tried to compile its binary manually but that didn’t work either.
- This one looks promising. Let’s keep an eye on it.
org-agenda search
- Not trying this for now because agenda wants to open all its files for search.
Organize
Org-mode tags
태그를 활용하는 방법
This is a default method. You just tag your projects with a project
tag, areas with an area
tag and so on.
You can search projects with helm or with org-ql:
Org-roam links
아래는 링크를 사용해서 묶는 방법을 보인다. 이건 파라에 맞지 않다. 양이 많으니까. 그냥 파라는 태그로 엮는게 좋다. 세부 노드 끼리의 관계만 링크로 묶는다.
An alternative to use Org-roam references as tags. You create notebooks called: projects
, areas
, resources
and insert a link to the target record according to where it belongs.
If you go to the areas
note and call org-roam-buffer-toggle
, you will see a backlink to you note in the side buffer.
영역=노트로 이동하여 =org-roam-buffer-toggle=을 호출하면 사이드 버퍼에 노트에 대한 백링크가 표시됩니다.
Org-roam-ui
뷰어 역할.
A nice second-brain visualizator: org-roam-ui.
(use-package org-roam-ui
:ensure t
:after org-roam
;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
;; a hookable mode anymore, you're advised to pick something yourself
;; if you don't care about startup time, use
:hook (after-init . org-roam-ui-mode)
:config
(setq org-roam-ui-sync-theme t
org-roam-ui-follow t
org-roam-ui-update-on-save t
org-roam-ui-open-on-start t))
Progressive summarization
Make org-emphasize multi-linear
To bypass the limit of two lines for org-emphasize marks enable the code below.
;; Make org-emphasis to work on up to 10 lines selection.
(setcar (nthcdr 4 org-emphasis-regexp-components) 10)
(org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)
Highlighting
Highlighting is a key part of progressive summarization. Here I will be highlighting with highlight.el
and enriched mode. If you don’t want to put your text file into the enriched text mode, you can use org-emphasize
instead of functions provided here.
highlight.el
When working with plain text buffers, like org-mode or markdown, you can use enriched text mode with the highlight
library to mark the text.
;; If you get errors saying somethign about facemenu, try
;; uncommenting this.
;; (setq facemenu-menu nil)
(use-package highlight :ensure t
:config
(defun hlt-general()
(interactive)
(unless (bound-and-true-p enriched-mode)
(enriched-mode t))
(hlt-highlight-region (region-beginning) (region-end) 'highlight))
;; Without this setq highlights won't be saved even in enriched mode
(setq hlt-use-overlays-flag nil)
:bind (("C-c n h" . hlt-general)
("C-c n H" . hlt-unhighlight-region)))
;; If you cannot save your enriched files because of the :inherit
;; error, try uncommenting this function.
;; (defun enriched-face-ans (face)
;; "Return annotations specifying FACE.
;; FACE may be a list of faces instead of a single face;
;; it can also be anything allowed as an element of a list
;; which can be the value of the `face' text property."
;; (cond ((and (consp face) (eq (car face) 'foreground-color))
;; (list (list "x-color" (cdr face))))
;; ((and (consp face) (eq (car face) 'background-color))
;; (list (list "x-bg-color" (cdr face))))
;; ((and (listp face) (eq (car face) :foreground))
;; (list (list "x-color" (cadr face))))
;; ((and (listp face) (eq (car face) :background))
;; (list (list "x-bg-color" (cadr face))))
;; ((and (listp face) (eq (car face) :inherit))
;; (enriched-face-ans (cdr face)))
;; ((listp face)
;; (apply 'append (mapcar 'enriched-face-ans face)))
;; ((let* ((fg (face-attribute face :foreground))
;; (bg (face-attribute face :background))
;; (props (face-font face t))
;; (ans (cdr (format-annotate-single-property-change
;; 'face nil props enriched-translations))))
;; (unless (eq fg 'unspecified)
;; (setq ans (cons (list "x-color" fg) ans)))
;; (unless (eq bg 'unspecified)
;; (setq ans (cons (list "x-bg-color" bg) ans)))
;; ans))))
org-capture a region
To keep track of highlighted notes we will use org-capture
.
;; Use =org-capture f= to put a link to the text you selected.into an
;; org entry with the current timer enabled.
(defun r/org-capture-get-selected-text ()
(with-current-buffer (org-capture-get :original-buffer)
(string-trim
(replace-regexp-in-string
"\n" " "
(cond ((eq major-mode 'pdf-view-mode)
(pdf-info-gettext (pdf-view-current-page) (car (pdf-view-active-region))))
(t (buffer-substring-no-properties (region-beginning) (region-end))))))))
(defun r/org-capture-get-link (path)
(with-current-buffer (org-capture-get :original-buffer)
(cond ((eq major-mode 'pdf-view-mode) (switch-to-buffer (org-capture-get :original-buffer)) (org-pdftools-get-link))
(t (concat path "::" (r/org-capture-get-selected-text))))))
(with-eval-after-load "org-capture"
(add-to-list
'org-capture-templates
'("f" "Curently watched" item (clock)
"%(r/org-capture-get-selected-text) [[%(r/org-capture-get-link \"%F\")][↗]]%?" :unnarrowed t)))
;; The code below automatically highlights the region we captured
(defun do-highlight-on-capture ()
"Highlight selected region of the buffer you were in at capture."
(save-excursion
(with-current-buffer (plist-get org-capture-plist :original-buffer)
(cond ((eq major-mode 'pdf-view-mode) (switch-to-buffer (org-capture-get :original-buffer)) (pdf-annot-add-highlight-markup-annotation (car (pdf-view-active-region))))
(t (hlt-general))))))
(defun highlight-on-capture ()
(when (equal (plist-get org-capture-plist :key) "f")
(do-highlight-on-capture)))
(add-hook 'org-capture-after-finalize-hook #'highlight-on-capture)
This is my basic marking mechanism. Whenever I’m reading an article in Emacs (transformed to an org-mode or markdown file), I click C-c f
to insert an entry to the notebook I’m currently on.
Working with PDF files
Don’t forget to install pdf-tools dependencies.
org-pdftools or org-noter ?
brew install glib
(use-package pdf-tools
:ensure t
:mode ("\\.pdf\\'" . pdf-view-mode)
:init
(require 'pdf-info)
(condition-case nil
(pdf-info-check-epdfinfo)
(error (let ((default-directory (file-name-directory pdf-info-epdfinfo-program)))
(pdf-tools-install t t)))))
(use-package org-pdftools
:ensure t
:hook (org-mode . org-pdftools-setup-link))
Express
This area is too large to cover it in this guide. If you’re new to org-mode consult
Exporting and publishing sections of the org manual.
Useful links
- GTD/BASB Templates for Emacs and Org-Mode · GitHub
- GitHub - weirdNox/org-noter: Emacs document annotator, using Org-mode
TODO Project Templates : 시작 완료 등 관리 측면
:CUSTOM_ID: d7bca4ea-e076-4dd0-ba47-ab5fbe5bf00b
양식 집합
TODO 헤딩 전용 태그 활용 방법 적용
닷 파일에 넣어놓은 태그 리스트
- 기본 범용으로 넣어 사용한다. 아래 방법으로 추가 할 수 있다.
파일 별로 선언하는 태그 리스트
- 다음과 같이 선언하고 사용할 수 있다. 헤딩 마다 빠르게 분류할 수 있기에 편하다.
- 헤딩이 매우 중요하다는게 이런 이유다.
, #+TAGS: { outcome(o) reading(r) programming(p) testing(g) calling(c) mailing(m) organizing(z) errand(e) writing(w) talking(t) searching(s) purpose(u) principle(n) information(i) installing(l) } { pisanzapra(1) unpisanzapra(2) hoyotojokomeshi(3) }
TODO refile, inbox, slipbox 정책 업그레이드
- Clock Table 을 어떻게?! 결과 포멧? 굴직한 목표에 필요한 일만 나열해서 해당 일만 하도록 밀고 가면 엇나가는 것을 방지하겠지?
- inbox -> dayily refile 이 목적이다. 그렇게 되면 숏잡이다.
- slipbox task 관리와는 관계 두지 않고 지식 노트 측면에서 ? 이게 분리가 되는가?
- refile - clock-in 메커니즘 일단 다 정리 해야 한다.
3 개를 하나로 써도 좋고 다 좋은데
- clock table 이 되야 한다. clock report
- clock in/out
- daytree 로 refile 해서 언제든 내가 뭘 했는지 볼 수 있어야 한다.
- 주제별 작업 선후 관계도 알 수 있어야 한다. 하루에 끝낼 게 아니니까 이건 굴직하게 클락 리포트에 분류로 들어갈 수준이다. daytree 에 들어갈 거 아니다. 마치 프로젝트 트리?!
DONE 어떻게 REFILE 을 정리 할 것인가?!
아주 어렵고도 중요한 문제다. 현재 나의 문서는
- org/roam
- docs
- todo.org
- workflow/
- journal
등에 나뉘어서 저장되어 있다. 이 파일들은 다 부분 부분이다. 통합해야 한다. 통합의 대상은 할 일과 로깅 데이터가 다 하나이다.
DONE rogue-layer
일단 그냥 타이핑하는게 때론 정신 차리는데 도움이 된다.
타이핑을 하다가 불이 붙은 다음에 문득 org-books 를 찾았다. 그리고 rogue 레이어를 알게 되었다. 특별히 없다.
Display tags at the beginning of each section · ahyatt/ek…
DONE 대분류로 묶어라.
- 헤딩을 구분하자. 어떻게?! 일단 다 홈피 공개 그거 하려는거다. 일단 그게 먼저다. 그게 시작이다. Emacs 풀이 하는거. 그거 하고 글쓰기는 단계별로 추가하는 방향으로 하자.
- 파일 1 개로 일단 다 모으자.
- 버퍼 관리에 대한 통찰 persp-mode 는 프레임 전체에 반영. 즉 탭도 해당한다. 그러니 persp-mode 를 벗어날 수 없다. 그러니 persp-mode 를 사용하는게 좋다. persp-mode 를 좀 더 세밀하게 관리하려면 tab 을 사용하면 된다. 여기에 tabspaces 가 좋은 역할을 한다.
DONE 대분류 아래로 내용을 일단 다 복붙하라
P: Emacs Workflow and Samples
Function F1-12 Key
- F6 Bookmark :
C-f6
Save,<f6>
Jump- bookmark-set “SAVED”, bookmark-jump “SAVED”
- F7 imenu-list Toggle
- F8 logos Focus mode
- F9 Org/Agenda
- F10 Treemacs Toggle
Emacs Workflow
완벽한 Workflow 를 찾아라!
주체적인 인간이라면
현재 나의 워크플로우
org-capture :: work or personal
캡처 할 때 지금 시작할 일이 아니라도 스케줄을 뭐라도 잡아 놓는다. 스케줄을 잡아놔야 어젠다에 보인다. – 사실 인박스 확인할 때 분류하긴 한다. 안잡아 놓을거면 LATER 로 선언하라. 그냥 나중에 할 일이니까.
org-agenda :: 오늘 할 모든 것
org-journal :: 오늘 나의 대쉬보드
SPC o j
오늘 날짜 저널에 현재 시각 + 한줄 로깅[2 / 5] focusing tasks theonething 태그 넣어 놓음
- 어젠다에서 오늘 할 일을
C-c j g
복사해서 리스트에 넣음 - 처리하면
C-c
누르면 마킹 됨.
- 어젠다에서 오늘 할 일을
왜? 이렇게 하는가? 어젠다에 DONE 으로 되는 태스트크는 refile 해서 archive.org 파일에 해당 월로 이관됨. 각 할 일의 헤딩에 org-id 와 날짜 정보 등이 기입되어 있어서 다시 되살릴 수도 있으나 불편한 일임. org-agenda 에 거기까지 기대할 필요는 없다. 오늘의 journal 파일에 링크를 기입하고 처리하는 것으로 충분하다. – 고수한테 배움
장점이 있는가? org-agenda 일정 처리에 엄청난 장점이 있다. 시스템 관점 뿐만 아니라 내 입장에서도 엄청 편하다. 유명한 org workflow 파일에 보면 refile.org 이 떨렁 하나 있다. 분류하지 않고 일단 refile 에 넣는 것이다. 그리고 처리하는데 어찌보면 GTD 메커니즘인가? effort 도 정의하는 것을 보면 설계한 사람들이 그쪽에 관심이 많았던게 아닌가?
이렇게 되면 정말 큰 장점이 org-agenda 가 할 일이 줄어든다는 것이다. vulpea 패키지 생각이 문득 난다. Logseq 도 마찬가지 이슈가 있다. 파일 하나로 처리가 다 되니까 시스템이 굳이 다 뒤져가면서 할 일 목록을 생성할 필요가 없다.
구조적/계층적 태그 관리 시스템
org-mode 에서 결국 내가 생각한 중요한 부분은 파일, 제텔카스텐의 백링크도 있지만 태그랑 카테고리다. 이건 오그롬하고 관계 없다. 원래 있는 기능이다. 이걸 왜 내가 관심을 가질까?
제텔카스텐과 디렉토리/파일 계층 구조
제텔카스텐의 핵심은 계층 구조를 격파하는데 있다고 말한다. 우리는 뭔가 글을 쓴다고 할 때 목차를 잡는데 시간을 보낸다. 그러다가 나가 떨어진다. 제텔카스텐을 적용해도 마찬가지로 나중에 목차도 잡고 해야 한다. 다만 목차를 잡는 것이 더 쉽다. 기존 연결된 나의 노트를 일련의 순서로 나열하면 될일이다. 더욱이 A 라는 글을 쓰고자 할 때 A 폴더 아래에 노트, 글, 메모가 있어야 할 필요가 없다. 디렉토리 구조 계층적인 구조는 그 계층 안에서만 의미가 존재한다. 즉, 그 넘어의 창조를 만들어 내지 못한다.
제텔카스텐 노트 프로그램으로 로그시크를 예를 들어보자. 옵시디언이 더 유명하지만 조금 더 극단적인 예를 들어보려고 한다. 로그시크의 모든 노트는 기본적으로 pages 폴더 아래에 다 들어가 있다. 하위 폴더로 만들 수도 없다. 폴더 안에 파일 리스트만 본다면 기존의 경험으로는 어이가 없다. 그러나 파일 안에는 메타 정보로 모든 파일을 그래프 구조를 지닌다. 연결된 지식 체계를 지닌다는 것이다.
제텔카스텐에서는 중간 중간에 인댁스카드를 정비한다. 이러한 인덱스는 각 주제에 대해서 찾아가는 실마리를 제공한다. 그래서 Index, Root, Tree 건 파일 하나를 만들어서 주제, 프로젝트 별로 핵심 노트들을 링크한다. 핵심 노트란 것은 ‘제텔’이 될 것이다.
제텔카스텐에서 노트는 나의 경우 fleeting, literature, permanent, zettels 로 나눈다. 모든 노트는 fleeting 으로 분류 한다. 어떻게 분류하는가가 나의 관심사 중에 하나이다. org-roam 을 만든 사람의 블로그를 보니 디렉토리로 분류를 하는 샘플 코드가 있다. 흠… 그 친구의 emacs dotfiles 이 공개되어 있으니까 지금은 어떻게 하는 볼 수 있다. 그렇게 하는게 맞을까? 폴더로 구분하는 것은 좋은 방법이 아닌 것 같다. 나중에 옮기는게 더 귀찮은 일이라… 그냥 로그시크 처럼 하나의 폴더에 몽땅 넣는 방식이 간단한 것 같다.
그럼에도 구분하는 것은 중요하다. 그래서 org 에서는 태그, 카테고리를 사용하면 된다. 커스텀하게 프로퍼티를 만들 수도 있으나 그렇게 하면 기존 org 시스템에 기능들을 이용하는데 커스텀 함수를 또 만들어야 한다. 귀찮은 일이다.
결론적으로 나는 org 모드에서 agenda 와 journal 을 기존 전통적인 방식으로 활용하면서 org-roam 을 지식 아카이브, 세컨드브레인, PKM 으로 만들려고 한다. org-roam 에도 사실 daily-journal 이라는 확장 기능이 있다. journal 이랑 비슷하다. 나도 처음에 이 기능을 활용해서 노트를 작성했었다. org-roam 노트 간에 연결 관리가 편해진다.
근데 나는 이게 너무 싫었다. 커스텀 코드를 넣으면 되지만 또는 옵션이 있을 수도 있지만 org-roam finde 하는데 저널 날짜가 쭉… 있다. 저널 날짜 차체에는 아무런 정보가 없다. 나의 지식 창고에 왜 이게 들어가 있지? 이왕이면 잘써야겠네?! 이런 생각이 들어서 daily-journal 에 할 일도 만들고 노트도 쓰고 열심히 썼다. 그러다보니 실제 org-roam 노트는 생각보다 만들게 없었다. 찾으려면 택스트 검색으로 다 daily-journal 에서 찾아야 했다. 더불어 개별 저널에 할일 관리를 넣으면 org-agenda 에 등록이 되어야 하고 물론 파일 리스트를 추가하면 되는 일이지만 파일이 많아질수록 느려진다. 이 문제를 해결하는 예로 vulpea 패키지도 있고. 간단한 방법으로는 데이비드 처럼 카테고리에 프로젝트라고 적어 놓고 찾는 방법 등이 있다. 아무튼 커스텀 코드가 필요하다. 별로다.
다시 말해, 기존 전통 방식은 간단하다. 거기에 집중한다. 그리고 지식으로 의미가 있는 이야기는 다 org-roam 에 fleeting 노트를 만든다. 그걸로 충분하다. org-agenda, org-journal 은 할 일 목록, 상태, 날짜, 시간 등에 집중한다. 역할이 나뉘게 된다.
커스텀코드 없이 간단하면서도 확실하게 텍스트 기반 워크플로우, 지식 시스템이 완성되는 것이다.
태그, 카테고리 이야기
앞선 제텔카스텐 이야기 하다보니 본론은 들어가지도 못했다. 허허. 이게 진짜인데. 태그와 카테고리는 신중하게 생각하고 설계해야 한다. 특히 카테고리는 최소한으로 처음에 못박는 것을 크게 벗어날게 없어야 한다.
org 모드에서 태그는 참 다행히고 그룹핑을 지원한다. 용도에 따라서 그룹을 만들어서 다로 관리할 수 있다는 것이다. 거기에 관심이가서 태그 활용에 굉장히 고민을 하고 있다.
왜? 태그를? 아직 정답은 모르겠지만… 워크플로우에서 만드는 노트들을 큰 틀에서 묶어야 한다는 생각이 든다. WORKFLOW -> LIFE, PKM, CONTEXT
이렇게 일단 잡았는데 LIFE 에는 비전, 목표, AOF, 프로젝트를 하위 그룹으로 가진다. 이 말은 내가 쓰는 글들이 특정 프로젝트만을 위한 것이 아니기 때문이다. 나의 삶 전체를 기준으로 분류할 수 있다. 그러기에 그래프 구조를 지니는 것이 아닌다. 비전, 목표는 설정을 하고 꾸준히 단련해야 한다. 그 지점을 나타내는 태그가 있어야 한다.
두번째로 PKM 이다. 제텔카스텐을 말하는 것이다. 노트는 생성되면 fleeting 이 되고 가공되는 시간과 노력에 따라서 다음 단계로 진화한다. 합쳐지고 나뉘어 지면서 zettels 에 도달하게 된다. 그러면 나의 의미로서 블로그, 책 등에 포스팅을 하면 된다.
그리고 CONTEXT 는 무엇일까? 공과 사를 구분하라! 라는 말처럼 나눌 수가 있다. 워크플로우는 즉 캘린더와 연동이 되는데 일적인 것만 적을 필요는 없다. 그리고 개인의 삶에도 얼마나 할 일이 많은가? 사는 것은 곧 철학 배우는 일이다. 더불어 콘텍스트에는 Subject 가 하위 태그로 들어간다. 이게 우리가 일반적으로 생각하는 태그가 아닐까한다.
22/10/10–10:31 :: 일단 여기까지만… 다음에 범용 태그를 만들고 그룹핑하는 방법에 대해서 적어보자. 여기에는 정답이 없다. 오히려 잘 모으고 일괄 변경하는 커스텀 함수가 더 필요할 것이다. 그리고 태그에는 룰이 있어야 한다.
IDE Flow
조직 모드 활용 Clojure 기록 팁 (작업 중)
- 명령문이 없이 표현식만 존재한다는 말의 의미?
- Reagent 가 하는 역할?
- Atom
- @app-statue 에서 @ 연산자의 의미
>> 글쓰기 워크플로우
사이드노트
logos mode, narrow, and M-[ M-] 로 정리하는 방법 매우 효과적임
palimpseat C-c C-r 사용. 하단으로 이동 시킨다.
해미타이머
클락인
번역 툴
사전
용어 사전
키바인딩
문단 넘기기와 palimpsest
헤딩 단위로 이동하면 아래로 저장할 수 있다.
- Glossary + Highlight 활용
- 핵심 용어를 도드라지게 하여 글에 집중하게 한다.
- 타임스탬프 박기
abbrev yasnippet 활용팁
PDF 듀얼 번역 시 설정 참고
다음 구성을 통해 번역 효과를 빠르게 조정할 수 있습니다.
带图模式: 将原文中的图还原到译文中
그림 모드 사용: 원본 텍스트의 그림을 번역으로 복원
重叠限制: 为了防止译文的段落之间相互重叠,限制了译文跟原文段落同等高度
중복 제한: 번역 문단이 서로 겹치는 것을 방지하기 위해 원본 문단과 동일한 높이로 번역이 제한됩니다.
间距紧凑: 去掉默认间距,因为段落默认间距会导致在小屏中, 译文内容偏高被限高隐藏掉
좁은 간격: 단락의 기본 간격으로 인해 작은 화면의 높이 제한으로 인해 번역 내용이 높아지고 숨겨지기 때문에 기본 간격을 제거합니다.
启用段首缩进
단락 들여쓰기 활성화
调整译文布局的距离左边百分比
번역 레이아웃의 왼쪽 비율 조정
调整译文字号
번역 크기 조정
可通过以下配置调整译文分段
번역 세분화는 다음 구성을 통해 조정될 수 있습니다.
行间距:줄간격
字间距:단어간격
引用间距:인용간격
그림은 볼 때는 끄고 저장할 때는 살리든가 선택.
단락 들여쓰기 활성화. 번역 크기 조정. 세분화 구성을 통해 사이즈를 맞추면 대략 잘 보인다. 코드가 번역되는 것은 어쩔 수 없다. 파일에 따라서 다르다.
Denote
링크 확인. Wai Hon 님 참고.