Profile img

Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub! My main account is at @hongminhee洪 民憙 (Hong Minhee) :nonbinary:.

Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다. 제 메인 계정은: @hongminhee洪 民憙 (Hong Minhee) :nonbinary:.

FedifyHolloBotKit、そしてこのサイト、Hackers' Pubを作っています。私のメインアカウントは「@hongminhee洪 民憙 (Hong Minhee) :nonbinary:」に。

Website
hongminhee.org
GitHub
@dahlia
Hollo
@hongminhee@hollo.social
DEV
@hongminhee
velog
@hongminhee
Qiita
@hongminhee
Zenn
@hongminhee
Matrix
@hongminhee:matrix.org
X
@hongminhee
0
2
3

Hackers' Pub에 로그인한 상태에서의 타임라인 구성을 조금 바꿔봤습니다. 기존의 “연합우주” 탭을 “피드”라고 수정했고, “연합우주” 탭과 “Hackers' Pub” 탭은 기본적으로 로그아웃했을 때의 “연합우주” 및 “Hackers' Pub” 탭과 동일한 타임라인이 표시되게 했습니다. 아직 팔로를 많이 하지 않은 분들에게는 “연합우주” 및 “Hackers' Pub” 타입라인이 새로운 콘텐츠를 발견하기 좋은 공간이 될 겁니다.

11
0
1
1
2
6
1
1
1
2
1
1
0

최근 TS 코딩중에 async/sync에 대해 polymorphic한 인터페이스를 제공하려하다보니 HKT의 필요성을 느끼게 되었다. 해결책은 그냥 synchronous만 제공하기로;;

1

데이터에 대한 modality, 가령 동기/비동기, 더 나아가 캐시됨, 캐시되었지만 stale됨 등에 대해 일반적인(polymorphic) 함수를 만드려면 HKT가 필요하다. Relay와 같은 현존하는 JS 상태관리 라이브러리들은 저런 modality를 한번에 다 지원하는 대신, 확장에 열려있지 않는 구조로 되어있다. 타입을 제대로 지원못한다고 해서 구현을 못하는건 아닐테니, HKT 없음이 주된 이유는 아니겠지만 말이다.

2
2
6
2

아까 멘토링 시간에, Next.js가 점점 Vercel에 종속적으로 변해가는 모습에 사용자들이 점점 이탈하지 않을까 하는 질문을 했어요. 그랬더니 아직은 걱정할 필요 없다고 3~5년은 더 갈 거라는데, 개인적으로는 아직 잘 모르겠지만 Vite같은 번들러조차도 지원하지 않는데 Deploy까지 Vercel에 모든 것을 맡겨야 한다고 하면... 눈에 보이는 사용자 이탈에 3년도 안 걸리지 않을까 하는 생각을 조심스럽게 하고 있어요.

4
3
0
0
0
0

apsigの実装を今週中にある程度終わらせたかったんだけど早めに終わらせないといけない仕事があるのでそれを片付ける必要がある (仕事って書いたけど別に契約してるわけでもお金もらってるわけでもない、ただ個人情報扱ってるので個人的に優先順位高い)

2
1

그리고 하스켈 클라이언트 예제 코드에 해커즈 퍼브 주소를 은근히 적어 넣었다!(깨알 광고)

{-# LANGUAGE OverloadedStrings #-}

module Main where

import Data.Default
import Web.Finger.Client

query :: Query
query = def { qryTarget = resource }
  where
    resource = ResAccount (Account "curry" "hackers.pub")

main :: IO ()
main = do
  manager <- newManager
  result <- webfinger manager query
  print result
10

@bubbler 문서를 읽어보인 jj에서 브랜치는 git에서와 같이 끝점이 하나인거 같은데 맞을까요? darcs와 같이 브랜치에 '시작' 리비전도 있는 경우와 비교해서 질문드렸습니다.

2

지금은 아니지만 내가 HHKB 레이아웃을 쓰고 터미널에서 이것저것 하는 것 때문에 vim 에 대해 관심을 가지는 동료들이 있었다. 가장 쉽게 적용할 수 있는 것은 예쁜 터미널 에디터였고 그 첫 후보로 nvchad 를 추천 또는 설치해주었다. https://nvchad.com/ vscode 에서 이걸로 당장 넘어오라고는 당연히 못하고 터미널에서 코드 읽어 볼 때 사용하라곤 했다. 몇몇은 vscode 에서 vim 플러그인을 설치해 사용하기 시작했다. lazyvim 과 nvchad 를 번갈아 가며 쓰고 있다. siduck 의 미감은 훌륭하다.

타이머 패널은 마우스로 드래그할 수 있다.
5

오늘은 docker 환경에서의 원시적인 CI를 간단히 구축했다. C++ 프로젝트를 마운트해서 docker 안에 있는 toolchain으로 빌드해야 했는데, docker 안에서 수행할 script를 바깥에서 같이 마운트해서 다른 script로 호출하는 구조로 땜빵했다. 다른 부서원들이 편히 쓸 수 있어보여 만족스럽다.

bash script는 짤 때마다 앎이 넓어진다. 오늘 새롭게 배운 목록이다.

  • set -o pipefail로 nonzero exit code를 pipe를 통해서도 전파할 수 있다.
  • echo -e로 backslash를 확장해서 \e[1;33m 등의 색상을 적용할 수 있다.
  • cat은 기본적으로 색상출력을 지원하지 않는다.
  • grep -q는 조건이 부합되면 바로 종료되기 때문에 앞 프로세스의 입력을 다 받지 못할 수 있다.
  • 정말 오랜만에 printf%*를 써봤다.

작성하는데 테스트까지 1~2시간 정도 걸렸는데 요즘 AI라면 금방 끝내지 않았을까 싶다...

1
0
1
1
0

@hongminhee洪 民憙 (Hong Minhee) 제 블로그에서 인용한 W3C CSS3 명세 내용에 따르면 범용성이 높은 클래스를 남용하기보다, 마크업의 구조를 따라 작성하라고 권장하고 있습니다. 꽤나 오래된 권장 사항으로 블로그 글의 레퍼런스를 조사하면서 저 명세를 CSS2 명세(2004년)로부터 알게 되었습니다.

data 어트리뷰트를 WAI-ARIA로 치환해서 같은 결과를 내놓을 수 있는데요, 이 방법의 장점은 좀 더 마크업 및 CSS Rules 작성에 대해 웹 표준을 근거로 명확한 디자인시스템을 만들 수 있다고 생각합니다.

 - my-card:state(loading) { 
+ my-card[aria-busy="true"] {
  background: url(./spinner.svg)
} 

- my-card:state(loaded) {
+ my-card[aria-busy="false"] {
  border: 2px solid green;
}
0
5
6
4

Existential Lens란걸 알게되었는데 정의는 다음과 같다

data Lens s a = forall c. Lens (s -> (c, a)) ((c, a) -> s)

돌무식 렌즈(get, set 레코드)보다는 좀더 어렵지만 Van Laarhoven Lens보다는 훨씬 더 직관적이라서 렌즈의 이해에 도움이 많이 되었다.

전체 설명은 요깄다.

7
6
1

어제부터 Jujutsu라는 버전 관리 시스템을 써보고 있습니다. git의 branch는 연속적인 단일 작업을 표현하는 느낌이 강하게 드는데 사실 그저 어느 commit을 가리키는 포인터일 뿐이라는 걸 느끼게 해주네요. Jujutsu에서는 같은 커밋에서 다음 커밋을 여러 개 만들면 그게 브랜치이고, 여러 커밋을 parent로 하는 커밋을 하나 만들면 그게 머지이고, 수정이 다 끝나면 그냥 원하는 브랜치 이름의 포인터를 적절히 옮기면 됩니다. 부분 변경을 커밋 간에 자유롭게 옮길 수 있는 것까지 합치면 재미있는 사용 방법이 많이 있을 것 같습니다. 특히 megamerge workflow를 쓰면 git 쓰다가 생겼던 "지금 하는 작업을 끝내야 다음 변경사항을 작업"하는 강박이 해소될 것 같아 기대가 많이 됩니다.

12

Claude Code 공식 문서에 따르면:

현재 Claude Code는 Windows에서 직접 실행되지 않으며 WSL이 필요합니다.

…라고 하고 있지만, Git for Windows가 깔려 있을 경우, Git Bash 안에서는 문제 없이 사용 가능하다. 다만, npm으로 설치할 때 scripts/preinstall.js 스크립트에서 Windows인지 검사하는 부분이 있어서 오류가 나며 설치가 중단되는데, 해당 스크립트는 오로지 Windows인지 검사하는 역할만 하고 있기 때문에[1] 아래와 같이 npm이 해당 스크립트를 실행하지 않도록 우회해도 설치에 문제가 없다:

NPM_CONFIG_IGNORE_SCRIPTS=true npm install -g @anthropic-ai/claude-code

다만 명령 프롬프트나 PowerShell에서 Claude Code를 실행시키려 할 경우 SHELL 환경 변수가 정의되어 있지 않기 때문에 오류가 난다. 그래서 Git Bash 안에서 Claude Code를 실행해야 한다.

일단 이렇게 설치해서 조금 써 본 결과 크게 문제는 없는 걸로 보인다.


  1. 해당 스크립트는 아래 코드가 전부다:

    /**
     * Preinstall script to check for Windows environment and exit gracefully 
     * with an informative message if detected.
     */
    
    // Check if running on Windows
    if (process.platform === 'win32') {
      console.error('\x1b[31m%s\x1b[0m', 'Error: Claude Code is not supported on Windows.');
      console.error('\x1b[33m%s\x1b[0m', 'Claude Code requires macOS or Linux to run properly.');
      console.error('\x1b[33m%s\x1b[0m', 'If you are using WSL (Windows Subsystem for Linux):');
      console.error('\x1b[33m%s\x1b[0m', '  1. Make sure you are running npm install from within the WSL terminal, not from PowerShell or CMD');
      console.error('\x1b[33m%s\x1b[0m', '  2. If you\'re still seeing this message in WSL, your environment may be incorrectly reporting as Windows');
      console.error('\x1b[33m%s\x1b[0m', 'Please visit https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview#check-system-requirements for troubleshooting information.');
      process.exit(1);
    }
    ↩︎
8