snacks.dashboard 헤더 다색으로 칠하기 — 그리고 평면 ASCII 아트의 레이어 한계
snacks.nvim 대시보드 헤더를 영역별로 다른 색으로 렌더링하는 방법(text 조각 배열 + 조각별 hl, 섹션 align 중앙정렬)과, 그 과정에서 부딪힌 '평면 ASCII 아트는 겹친 그림을 색으로 분리할 수 없다'는 근본 한계·우회법.
snacks.nvim 대시보드 헤더를 영역별로 다른 색으로 렌더링하는 방법(text 조각 배열 + 조각별 hl, 섹션 align 중앙정렬)과, 그 과정에서 부딪힌 '평면 ASCII 아트는 겹친 그림을 색으로 분리할 수 없다'는 근본 한계·우회법.
챗 창만 쓰다 사이드바를 보면 낯선 메뉴가 늘어서 있다. Projects·Artifacts·Customize·Code·Design, 그리고 Code 웹 안쪽의 Routines·Dispatch까지 — claude.ai 웹의 메뉴가 실제로 무엇을 하고 언제 무엇을 쓰면 되는지, 두 제품 표면으로 나눠 한 바퀴 돈다.
클로저·코루틴·제네릭·소유권처럼 언어에 속하지 않는 개념 11편을 하나로 묶은 학습 지도. 'C++이 발판, Go·Rust는 변주'라는 관점으로 네 축의 읽는 순서와 선행 관계를 정리한다.
값을 바꿀 수 있는가를 누가·어떻게 통제하는가. C++ const correctness를 발판으로, '기본이 가변이냐 불변이냐'와 '바인딩만 막느냐 값까지 막느냐' 두 축으로 Rust(불변 기본 + mut 옵트인)·Kotlin val·JS const·함수형 영속 자료구조를 비교한다. Kotlin val 리스트 내용이 왜 바뀌는지(바인딩 vs 값), Rust의 &T/&mut T 규칙이 데이터 레이스를 막는 지점까지 대응시킨다.
null 참조가 왜 '10억 달러 실수'인지에서 출발해, 없음(absence)을 다루는 세 모델 — 구분 없는 널(C++ 포인터·Java·Go), Option 타입(Rust·Swift), nullable 타입(Kotlin·TS·C#)을 '타입에 드러나는가'와 '언제 막히는가' 두 축으로 비교한다. C++ std::optional이 Rust Option과 같은 물건이면서 무엇이 다른지, Go의 'nil인데 nil이 아닌' 함정까지 대응시킨다.
람다가 컴파일러가 만드는 '클로저 객체'(operator()를 가진 익명 타입)라는 실체에서 출발해, 캡처 방식([=]/[&]/init-capture)과 [&] 댕글링 함정, 여러 호출 가능 객체를 한 타입에 담는 std::function의 비용, C++14 제네릭 람다까지 C++ 관점으로 정리한다.
RAII의 동기로만 스치던 예외를 정면으로 다룬다. throw/try/catch 기본, 예외가 스택을 거슬러 오를 때 소멸자가 자원을 정리하는 스택 언와인딩, 예외 안전 3등급(basic·strong·nothrow), 그리고 noexcept가 왜 이동 생성자와 vector 성능에까지 얽히는지 정리한다.
org-mode가 '단일 통합 시스템'으로 독보적인 반면 Neovim은 플러그인을 조합해 PKM을 구성한다. 평문 마크다운·로컬 저장이라 Neovim과 충돌 없이 공존하는 Obsidian을 중심으로, 왜 갈아타기보다 병행이 자연스러운지 정리한다.
DAP(Debug Adapter Protocol)는 LSP와 같은 뿌리(VS Code)에서 나온 디버깅용 표준이다. nvim-dap 플러그인 스택, 언어별 어댑터(debugpy·delve·codelldb), 그리고 LSP와 결정적으로 다른 '세션 중에만 뜨는' 생명주기를 정리한다.
세 XSS의 갈림길은 '악성 스크립트가 어디서 페이지에 삽입되는가'다. 서버 응답이면 Reflected, 저장 후 전달이면 Stored, 클라이언트 JS의 DOM 조작이면 DOM-based. View Source로 구분하는 법과, DOM-based를 관통하는 Source→Sink 흐름을 정리한다.