Ping 08/03/2023 .01 : 전자책읽기


linux에서 전자책 편안하게 읽는 방법들 간단하게 몇가지 팁들만 나열, 별로 내용은 길게 늘여 쓰지 않으려고:

  1. linux, 그중에서도 가벼운 하드웨어와 단순하게 잘 동작하는 배포판.

    • 여러가지 불필요한 군더더기 없고, 패키지들이 조금 오래된 버젼이어도, 안정적으로만 동작하면 상관 없음.
    • 그래서, debian stable -or- testing 쓰면 속이 편함.
    • 하드웨어는 raspberry pi 3/4 둘 다 좋았다. 1 …특히 전력소모도 거의 없고, 딱 모니터 연결해 놓고 팬소음 거의 없이 쾌적하게 책을 읽기 좋다.
  2. calibre 책파일 관리, 읽기 모두 만족스러움

`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<..> 변수의 이름이 겹치지 않도록 해봤다. (…위에 검색한 링크들에도 사용하듯이)