"One of the nice things about getting older is that you come to understand that you can integrate multiple aspects of your life together. When you're young, you think everything has to be binary, as that's exactly how you feel at that age".
- Min Jin Lee

radio-recorder 프로젝트 설명


2년전쯤에 한국 라디오를 혼자 듣고 싶었었다. 하지만 시차가 많이 나는 지역에 살았었다. (8시간 정도 느림)

그래서 한국 인터넷 라디오를 녹음해서 개인적으로 들을 수 있다면 좋겠다는 아이디어로 작업했던 프로젝트 소스코드를 공개한다.

https://github.com/ageldama/radio-recorder

방송사의 인터넷 라디오를 녹음 하는 스크립트는 커밋에서 제외하고 공개한다. 이는 방송사에게 문제가 될 수 있으므로 개인적으로 알아내서 사용하고 타인과 공유하지 않기를 바란다.

프로그램 구성

cron 서버

  • 지정된 시간에 녹음/인코딩 스크립트를 실행하는 스케쥴을 담당한다.
  • 오래된 임시 파일 정리 등등도.
  • 한국의 시간대와 내가 있는 시간대가 달라서 다른 cron scheduler을 쓰지 않고 그냥 짰었던거 같다.

Org 파일으로 Hugo 포스팅 테스트


적당히 잘 동작하는거 같으니 앞으로는 그냥 혼란스러운 Markdown 대신에 그냥 Org 파일으로 블로깅 하며 될거 같다. 행벜.

예전 버젼 Hugo에서는 지원을 제대로 못하던거 같은데, 어느샌가 업데이트 하니까 되는거 같아서 그냥 슬그머니 쓰기로. https://gohugo.io/content-management/formats/

기존 마크다운들도 인라인 이미지 문법을 바꾸고, ToC 표시 설정도 바뀌어서 조금 변경.

아쉬운건 여전히 Org 파일에서 ToC 지원은 빠져 있는거 같아서… https://github.com/snosov1/toc-org 설치해봤다. 그냥 고민할 필요가 없었구나. ㅋ

제일 좋은건 code syntax highlight이 예뻐졌다.

Table of Contents <– :TOC: –>

First release of cl-state-machine


Made a small state machine library/DSL in/for CommonLisp.

https://github.com/ageldama/cl-state-machine

커먼리습 설정하기, ASDF 시스템 코드를 받기


1. ASDF을 최신 버젼으로 설정한다

(이부분에서 많이 고생했는데) SBCL와 다르게 CLISP, ECL 은 최신 버젼의 ASDF을 내장한걸 패키징해놓지 않았다.

대부분은 문제가 없이 동작하지만, 내가 작성한 커먼리습 시스템에서 실행파일을 빌드할 때 문제가 많았다.

  1. ASDF 의 최신 버젼을 git clone 해서 적당한 디렉토리에 받는다.
  2. make을 내려받은 ASDF 디렉토리에서 실행한다.
    • 실행하면 build/asdf.lisp 파일으로 한 파일으로 뭉쳐서 로딩하게 편안한 파일을 생성해준다.
  3. 내 커먼리습 구현체의 시작설정파일 맨 앞에 다음처럼 추가한다.
    • (load "~/local/asdf/build/asdf")
      • 여기서 나는 $HOME/local/asdf/ 에 ASDF을 받았다고 가정.
      • 그리고 asdf.lisp 파일이더라도, 마지막에 .lisp 확장자는 생략했다.
    • ECL은 $HOME/.eclrc
    • CLISP은 $HOME/.clisprc.lisp
  4. 그리고 중요한데, 그 다음에 Quicklisp 초기화 내용이 오도록 한다.
    • Quicklisp을 초기화하기 전에 ASDF 최신 버젼이 로딩되어 있는게 더 나을테니까.
    • 어차피 위의 (1~3)의 순서대로 ASDF 먼저 설정한 다음에 Quicklisp설치한 다음에 ql:add-to-init-file 실행하면 이런 순서로 추가해준다.

…별거 아닌데, 이거 때문에 빌드한 결과 실행파일이 이상해서 좀 고생했다.

(Common Lisp의 어두운 면) Equality


오늘은 커먼리습의 어두운 면을 이야기 해볼까. 보통 나는 리습 팬보이니까 리습에 대해 불리한 이야기는 잘 쓰지 않는거 같아서 한번 써보기로 생각했다. 그리고 놀랍게도 이 글의 끝에 가서는 다시 이런 리습의 결점을 리습의 위대함으로 승화시키는 단계까지 끌어가 보도록 하려고함.

뭐 커먼리습의 CLHS - HyperSpec을 읽다보면 비슷한데 아주 약간씩 미묘하게 달라서 지원하는 것들이 있다:

이렇게 나열해 놓으면 꽤 무서워 보이지만, 막상 차이를 이해하면 별로 복잡하지도 않아서 나중엔 더 편안해진다. (정말로)