Ping 13/Oct/2019


집중하는게 내게 더 좋겠다는 생각이든다.

단시간에 어떤 일에 집중하는 일은 만족스럽다. 그런 시간단위의 집중이 아니라 기간이라고 할만큼 며칠, 몇주에 걸쳐, 한정된 한두개의 주제에만 집중해서 생각하고 만들거나 글을 써가는게 필요하다.

혼자 관심이 가거나 생각하는 주제가 떠오르면 Org파일 한 개나 메모지, 핸드폰에 적어놓는다. 그리고 내가 가진 정리하는 방식에 따라 조금씩 생각이 다듬어질때마다 저장매체를 바꿔가며 기록해나간다. 문득 그 Org 파일 을 열었는데, 너무 많은 내용들이, 그것도 폭넓은 다양한 주제들에 대해서 걸쳐있음을 봤다.

다양한 주제에 관심이 있는건 어쩔 수 없겠지만 각 주제마다 내가 투사하는 시간과 노력이 너무 분산되는거 아닌가 생각해왔다.

Zettelkästen?


어제 Ping에서 계속 블로깅을 하면서 생각 하는걸 계속 다듬어 갔으면 좋겠다는 말을 했었는데,

마침 HN에 그런걸 하기 적절해 보이는 글이 올라와서 읽어봤다.1

간략히 정리해보면,

  1. 생각 적기: 짧은 길이 메모를 적어서 생각만으로 카드를 만들고,2 3
    1. 이 상태에서는 우선 각 카드는 “순번없음 (Unsorted)” 상태 deck으로 쌓아만 놓는다.
  2. 순서매기기(1): 카드끼리 1, 2, 3 같이 순서를 두고 정렬.
    1. Unsorted’ deck에서 꺼내와서 정리하는거겠지.
    2. 각 순서는 생각의 순서일수도 있겠고,
    3. 아니면 그냥 구분되는 다른 생각의 단절을 나타내는 방법으로 쓸수도 있겠지.
  3. 순서매기기(2): 그리고 위에 만든 1, 2, 3와 같은 순서 카드에 딸린 하위 생각들은,
    1. 1a, 1b, 2a, 2a1, 2a2 와 같이 alphanumeric으로 하위 생각들을 표현해 나간다.
  4. 연결하기: 그리고 각 카드들의 서로 연결 을 적어나간다.
    1. 예를 들어, 1a에서 하위 카드가 아닌데도 연관이 있는 2a1,
    2. 2a2으로 연결을 갖는다면, 1a 카드에 2a1, 2a2을 링크 라고 적어준다.

위 3단계에서 계층적으로 순서를 할당하는걸 시각화해보면 다음과 같은 트리가 되겠지4:

rutils으로 커먼리습 확장해서 clojure 비슷하게, 더 편하게


커먼리습은 CLHS 이후로 언어 자체 정의는 변하지 않았다.

구현체마다 조금씩 확장이 있을수도 있지만 딱히 그렇게 하지도 않는거 같다. 그럴만도 하다고 생각하는게 어차피 커먼리습에서 lisp reader을 확장하는게 CLHS에서 정의해놓은 기능 중 하나이고, 구현체들도 스펙을 잘 구현해놓았으니까.

결국 커먼리습에서 문법이나 그런게 조금 마음에 안들거나 확장하고 싶으면 언제든지 매크로를 만들듯이 확장하면 되니까.

‘커먼리습 언어 자체를 커먼리습으로 프로그램 할 수 있다’

이런 커먼리습 확장 ‘라이브러리’ 들이 여러가지 있는데, 가장 요즘에 쓸만할거 같다고 생각하는건 rutils이다. https://github.com/vseloved/rutils

(eval-when (:compile-toplevel :load-toplevel :execute) ...) 같은거 매번 반복해서 쳐넣는걸 그냥 eval-always으로 바꿔준다거나. gensym하는것도 with-gensyms 제공하거나 하는 이런류의 라이브러리들에서 보통 제공하는것들부터.1