`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 같은 텍스트 웹브라우져에서 읽으나 그냥 무거운 웹브라우져으로 읽으나 사람마다 알아서 잘 읽히도록 하는데에만 집중해봤다.