"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

`ncal -3` 직접 Perl으로 짜봤다


ncal -3 이 뭐냐하면:

https://man7.org/linux/man-pages/man1/cal.1.html

…뭐 이런건데, 개인적으로 저전력 글쓰기 전용머신에서 사용하는 스크립트에서 배포판이 달라서 패키지를 못찾겠어서 1, …그냥 직접 짜서 대체했다.

https://github.com/ageldama/configs/commit/66bd92b42ba5a5ee03b9336370c3a8f84293e488

그래서 스크린샷은:

/2023-03mar/journal-edit-cal3.png

재밌었던 부분은:

  1. 어차피 Perl으로 전부 짜서 쓰는 스크립트였는데, 아예 외부 커맨드라인 도구 의존성을 더 없애서 뿌듯하다.
  2. 매달 달력을 문자열으로 뽑았는데, 3달치를 뽑아서, 이걸 한 row에 표시하고 싶었는데, Text::Table으로 적절히 간단히 완료.
  3. Term::ANSIColorperlre을 써서 깔끔하게 원하는 일자에 highlighting 해서 편안했다.
  4. …더 해킹을 해서, calendar(..) 결과문자열을 적당히 파싱해서, 작은 Text::Table으로 만들어서, 그것들으로 조합하고 했었어도 될거 같아.

C++: Golang-ish `defer`-macro


별거 없는데, 문득 심심해서 툭닥거려봤다.

원하는 것과 접근법

  1. https://go.dev/blog/defer-panic-and-recover
  2. https://docs.rs/defer/latest/defer/fn.defer.html
  3. https://ziglang.org/documentation/master/#defer

golang/zig에서처럼 defer 등록한 LIFO순서대로 호출되도록.

검색해보면, 대부분 RAII을 사용하거나 하는 것들이 보인다:

…그냥 std::shared_ptr<void> 을 이용하는 방식이 마음에 들었다. 그리고 조금 더 간단하게 사용하려고 매크로로 만들어 봤다.

defer.inl :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
  /* -*- mode: c++; -*- */

  #ifndef defer_INL
  #define defer_INL 1

  #include <memory>

  #define _Defer_CONCAT_IMPL( x, y ) x##y
  #define _Defer_CONCAT( x, y ) _Defer_CONCAT_IMPL( x, y )

  #define Defer(blk) std::shared_ptr<void> _Defer_CONCAT(Defer_, __COUNTER__ )(nullptr, blk)

  #endif /*defer_INL*/

__COUNTER__ 이용해서 매크로가 생성한 std::shared_ptr<..> 변수의 이름이 겹치지 않도록 해봤다. (…위에 검색한 링크들에도 사용하듯이)

Ping 26/02/2023 .01 : 디자인 css 가볍게 수정


아예 아무런 스타일도 주지 않고, 그냥 알아서 html/css만으로 잘 보이도록 고쳤다. 웹폰트니 그런것도 그냥 껐고.

불필요한 스타일이나 폰트로딩을 줄여서 가볍고, 어차피 웹브라우져의 'reader mode' 지원 같은걸로 내가 스타일 주는 것보다 훨씬 읽기 편안하게 볼 수 있을테니까.

lynx, w3m 같은 텍스트 웹브라우져에서 읽으나 그냥 무거운 웹브라우져으로 읽으나 사람마다 알아서 잘 읽히도록 하는데에만 집중해봤다.

Ping 19/02/2023 .02 : 이름에 대한 추측 (2) HAL, IBM, JCL


(…지난번 C/C++/D/Zig 이름에 대한 추측 에 이어서, 그냥 떠올라서)

  1. HAL 9000 –> IBM

    1. ASCII방식, 혹은 그냥 알파벳에서 한글자씩 앞으로 땡기면, "IBM"이 된다.
  2. JCL

    1. IBM의 "Job Control Language", 메인프레임 등에서 스크립팅을 위해 쓴다고 한다.
    2. "IBM"에서 다시 또 한글자씩 앞으로 땡기면, "JCL".

ㅎㅎ뭐 그냥 그렇다고.

Ping 19/02/2023 .01 : 어른이 되기


(최근 며칠 우울하고 내가 어른이기는 한가 싶은 자괴감에 빠졌었다. 그래서인지 자기합리화를 위해 이런 글을 쓰고 있는거 같기도 하다.)

나의 옛날 이야기

80년대의 기억에는, 참 자주도 불량식품 단속에 대한 이야기가 나오던 것 같아. 그리고 실제로도 만화, 애니메이션, 게임, 장난감 등등의 라이센스나 품질관리에 대한 관념이 희박했던거 같아.