이하

@evenharder@hackers.pub · 22 following · 23 followers

이것저것 해보고 싶은 사람입니다. 지금은 C++과 함께 고통받고 있습니다.

멤버변수가 200개 가량 되는 C++ 클래스 인스턴스를 정녕 우아하게 직렬화할 수는 없는 걸까? 컴파일 에러 메시지를 보니 g++ paramater pack 상한에 걸리는 느낌이다

1

TDD 실습으로 TDD의 한계점만 느끼고 있다. std::cin buffer를 바꿔치기해서 thread를 띄우고 gmock에 시간차를 두고 표준 입력을 전달하려니 이게 프로그램 테스트인지 C++ 지식 테스트인지 모르겠다. 테스트 코드가 테스트할 코드보다 어려운 현상은 매우 흔하며, 대개 src 폴더에 있는 코드보다 더욱 빠르게 레거시 코드로 상해버린다. 테스팅은 소프트웨어 개발 주기에서 필수적인 역할을 지니고 있으나 TDD가 프로그램의 명확함을 보장하는 방향으로 굴러가긴 어렵다. 명확한 프로그램은 선행되는 테스트가 아니라 명확한 설계에서 나오기 때문이다.

2

교육 받으며 Windows 11에서 nvim dotfile이랑 lazygit 깔아 쓰려고 했는데 git이 계속 타임아웃 걸려서 순정 nvim에 미니멀한 .vimrc 적용해서 쓰고 있다. 기이하게도 git이 명령 하나에 (git log, git switch 포함) 2초씩 걸리고 lazygit에서 커서를 움직이면 diff pane이 한 줄씩 갱신되는 수준의 끔찍한 속도를 자랑하고 있다. Windows는 뭐가 잘못된걸까.

1
0
1
1
1
6
1
1
3
1

이하 shared the below article:

OSSCA: Fedify 프로젝트 기여자들을 위한 안내

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

이 글은 오픈 소스 컨트리뷰션 아카데미 참여자, 더 나아가 Fedify 프로젝트에 기여하고자 하는 모든 이들을 위한 안내서입니다. Fedify 프로젝트 참여를 위한 준비 사항과 소통 채널, 개발 환경 설정, 그리고 프로젝트 구조에 대한 이해를 돕는 것을 목표로 합니다. 먼저 Fedify Discord 서버에 참여하여 자기소개를 하고, 연합우주(fediverse)에 대한 기본적인 이해를 쌓기 위해 계정을 만들어보는 과제가 주어집니다. JavaScript와 TypeScript에 대한 간략한 소개와 함께, Fedify가 ActivityPub 프레임워크로서 연합우주 SNS 소프트웨어 개발을 쉽게 만들어주는 도구임을 설명합니다. 저장소를 포크하고 클론하는 방법, Node.js, Deno, Bun 등 다양한 런타임 환경 설정 방법, 그리고 Visual Studio Code를 활용한 개발 환경 구성 방법을 상세히 안내합니다. 마지막으로, Fedify 저장소의 구조와 린트, 테스트 실행 방법을 소개하며, 기여할 일감을 찾는 방법과 추가 정보 링크를 제공합니다. 이 글을 통해 독자는 Fedify 프로젝트에 실질적으로 기여하기 위한 첫걸음을 내딛을 수 있으며, 오픈 소스 기여에 대한 자신감을 얻을 수 있습니다.

Read more →
10
0
1

회사에서 테스트 프레임워크를 대공사하며 이런저런 리팩토링을 해야하는데, config file을 어떻게 생성하고 읽어야하는지에 대한 논의가 오갔다. TOML을 쓰는 방향을 강력히 주장했는데, 다음 주에도 이어서 논의를 이어나가봐야겠다

2

Fedify에도 지원했었는데 다른 프로젝트에 참여하게 되었습니다. Hackers' Pub에 Fedify에 넉 달 동안 깊게 빠져들 멘티분들이 많이 계신데, 언젠가 연이 닿았으면 좋겠습니다. 모두 화이팅입니다 🥰

OSSCA 멘티 선발 메일 (Pyodide)

3지망이 있었으면 ThorVG에 지원할 생각이었는데, 주 언어인 C++ 프로젝트기도 했고 그래픽 라이브러리가 제겐 생소하면서도 재밌어 보였기 때문입니다. 시간이 나면 기여해보고 싶습니다.

0

Fedify에도 지원했었는데 다른 프로젝트에 참여하게 되었습니다. Hackers' Pub에 Fedify에 넉 달 동안 깊게 빠져들 멘티분들이 많이 계신데, 언젠가 연이 닿았으면 좋겠습니다. 모두 화이팅입니다 🥰

OSSCA 멘티 선발 메일 (Pyodide)
6
2
1

종종 인공지능이 사유할 능력을 앗아가는 디스토피아적 느낌이 든다. 하지만 인류가 검색 엔진에 스스로를 조형했듯이 인공지능에도 자신도 모르게 맞춰가지 않을까...

0
0
2
4

로딩과 병렬처리와 UI가 만나는 곳에서 일어난 이런저런 사단을 겪은 뒤,

FSM 을 만들어야 이후 발생할 끔찍한 일들을 막겠다 싶어서 검색을 해보니까

c++에서는 std::variant 가 최신 유행이야! 라는 말이 제일 많이 나왔습니다만, 영-_- 마음에 안들어서

가장 간단한 switch 문으로 하다가 모든 일이 그렇듯이 이걸로 감당이 안되겠다 싶어서 더 뒤지다 보니까...

TVariant라는 아이가 있더군요. (지금 쓰는 게 언리얼인지라) 하지만 그래도 마음에 안들어서 더 뒤지다보니까...

Finite State Machines (FSM) in Embedded Systems (Part 3) - Unuglify C++ FSM with DSL
이런 흑마술도 나오더군요 하지만 역시 마음에 안들어서 더 뒤지다보니까...

Oh my...

Tech Breakdown: AI with Finite State Machines

/* shorthand macro */
#define FSM_ID( SID, EID ) ( uint64(STATE_##SID) | (uint64(EVENT_STATE_##EID) << 32) )

uint32 SomeEnemy::HandleEvent( const FSMEvent& Event ) override
{
	switch( Event.MakeSwitch(State) )
	{
	case FSM_ID( STANDING_STILL, ENTER ):
	{
		/* code for entering the standing-still state */
		break;
	}
...
	}
}

상태 enum 을 비트시프트한 다음 합쳐서 switch 문의 case로 쓰고 있는 끔찍한 짓을 하고 있더군요' -'

근데 이게 마음에 들더라구요(퍼엉) 이걸로 하려구요.

@hyaline 이런 FSM은 std::variant처럼 type으로 처리하기에는 코드도 난잡해지고 bloating도 심해지겠다 싶습니다. 마지막 방안인 상태의 종류와 상태의 시점을 합쳐서 처리하는 방식은 처음 보는데, 아이디어가 되는 구현이 날 것이기는 하지만 이를 고려해 설계에 고심을 많이 한 부분이 보였습니다. 잘 읽었습니다. 😄

1
2
1

프로젝트 여러개 동시에 작업할 일이 있어서 Claude Code를 동시에 여러개 돌려야 하는데, 한 화면에서 볼 수 있는 괜찮은 멀티플렉서가 뭐가 있을까 하고 찾아봤는데.... zellij가 제 몫을 하는 것 같다.

사용방법이 어려울 줄 알고 쫄아서 시도 조차를 안했었는데, 화면 최하단에 어떤 단축키를 쓰면 어떤 동작이 일어난다고 친절하게 명시되어 있어서 진입장벽도 그렇게 있지는 않은듯....?

프로젝트별로 다른 pane으로 분리해서 각각 독립적으로 실행되는 Claude Code 에이전트를 굴리는 모습이다.
0

오늘은 파트원 한 분이 리모트 서버에 ssh-copy-id를 해도 ssh 스크립트에서 비밀번호를 요구한다기에 분석을 해봤다. 사유는 나름 흔한 문제로, authorized_keys의 잘못된 권한 설정이었다. 누가 chmod 777을 실행할 생각을 했을까.

이런 일에 익숙하진 않지만 나름 발휘한 기지 덕분에 해결까지 3분 정도밖에 안 걸렸다. ssh -v가 친절하게 문제가 되는 부분을 알려줬기 때문이다.

debug1: Remote: Ignored authorized keys: bad ownership or modes for file {.ssh directory}/authorized_keys

앞으로도 Unix 유틸리티의 verbose 로그를 잘 활용해서 분석해봐야겠다.

0
1

작년에 nvim에 연동해둔 lazygit과 git p4가 지금까지 얼마나 시간과 노고를 아껴줬는지 모르겠다. 하지만 git을 제대로 알고 쓰는 느낌은 아니라 종종 꼬이기도 한다. 조만간 Pro Git도 정독해봐야겠다.

0

종종 일 앞에 사람이 있다는 점을 간과하는 발언을 들을 때가 있다. 사람을 소울리스 코딩머신으로 취급한다거나, 부서의 상황을 배제하고 일만을 고려하는 의견들. 어느 정도는 일리가 있겠으나 성공적인 의사소통으로 평가하긴 어렵다.

3

오늘은 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

빨간 공이 n개, 초록 공이 100-n개 들어있는 불투명한 통이 있습니다. n은 0에서 100까지의 정수 중 균등하게 무작위로 선택됩니다. 통에서 첫 번째 공을 뽑았더니 빨간 공이 나왔습니다. 첫 번째 공을 꺼내두고 통에서 두 번째 공을 뽑을 때, 빨간 공과 초록 공 중 어느 공이 나올 확률이 더 높을까요 (혹은 두 확률이 같을까요)?

출처: https://x.com/littmath/status/1751648838501224790

정답 및 풀이입니다.

정답 빨간 공이 나올 확률이 높습니다.
풀이 위 문제를 조금 바꿔보면, 일렬로 놓여있는 101개의 공 중 3개를 뽑는 문제로 바꿀 수 있습니다. 첫 번째 공은 n을 결정합니다. 왼쪽 공은 빨간 공으로, 오른쪽 공은 초록 공으로 생각할 수 있습니다. 이 때 추가로 뽑는 두 개의 색상을 비교해보면 됩니다.

조금 더 고찰해보면 3개의 공의 위치는 중요하지 않고, 상대적인 위치가 중요함을 알 수 있습니다. 상대적인 위치의 순열은 3! 가지 있으며, 뽑은 순서대로 1, 2, 3이라고 하면

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

이 가능합니다. 문제 조건에 따라 2가 빨간 공이므로, 1보다 왼쪽에 있는 경우만 추리면

2 1 3
2 3 1
3 2 1

의 3가지 경우가 가능하며, 3번 공이 빨간 공일 확률은 2/3임을 알 수 있습니다.

0

빨간 공이 n개, 초록 공이 100-n개 들어있는 불투명한 통이 있습니다. n은 0에서 100까지의 정수 중 균등하게 무작위로 선택됩니다. 통에서 첫 번째 공을 뽑았더니 빨간 공이 나왔습니다. 첫 번째 공을 꺼내두고 통에서 두 번째 공을 뽑을 때, 빨간 공과 초록 공 중 어느 공이 나올 확률이 더 높을까요 (혹은 두 확률이 같을까요)?

출처: https://x.com/littmath/status/1751648838501224790

2

Meta의 "Localhost tracking" 기법, 최대 320억 유로(47조원) 벌금 위기
------------------------------
- Meta는 *Android 샌드박스 우회 추적 수단(“localhost tracking”)* 을 개발해 VPN이나 시크릿 모드, 쿠키 삭제에도 무관하게 사용자의 * 실제 신원과 웹 브라우징 활동*을 연결 추적함
- 해당 기법은 *Meta 앱(백그라운드)* 과 * 브라우저 내 Meta Pixel 스크립트*가 로컬 네트워크 포트를 통해 정보를 교환,…
------------------------------
https://news.hada.io/topic?id=21391&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

0
3
1

회사에서 C++ 애플리케이션을 만들고 고치는 개발자입니다. 개발하는 프로그램이 성능이 워낙 중요한지라 low-level 지식과 intrinsic도 살짝은 알고 있습니다. C++의 골때리는 세부사항도 많이 알게 됐습니다. 최근에는 학부에서 제대로 알려주지 못한 운영체제 지식을 학습하고자 OSTEP 을 읽고 있습니다. 주 편집기는 nvim이며, lazy에서 kickstart로 넘어가야지 생각만 하고 계속 미루고 있습니다.

학부 때는 알고리즘 문제풀이에 푹 빠져있었습니다. 동아리 운영도 2년간 했고, ICPC WF에도 출전했지만 벌써 몇 년은 된 옛 이야기가 되었습니다. 지금도 간간이 UCPC 및 ICPC 출제에 참여하고 있지만 흥미는 학부때만은 못합니다. 요즘은 제가 잘 알지 못하는 다른 주제에 대한 관심이 훨씬 더 커서, 고루고루 흡수하고 있습니다. 기술적인 관점뿐만 아니라, 사회에 선순환을 이끌어낼 수 있는 방법도 주요 관심사입니다.

코딩 외의 다른 취미로는 보드게임과 독서, 그리고 운동이 있습니다. 최근에는 친구들과 아컴호러 카드게임 헴록 베일의 축일 을 밤새 몰입하며 즐겼습니다. 기력과 여유가 더 생기면 집에 신디사이저와 오인페를 들여 다시 작곡을 해보고 싶습니다. 생각해보니, 이제 몇 년간 방치한 기술 블로그를 이 김에 되살릴 때도 되지 않았나 싶습니다.

프로필 사진은 본가에서 기르는 고양이 망고(8)입니다. 이제는 저도 몇 달에 한 번 정도밖에 못 보지만, 고양이는 귀여우니만큼 종종 타임라인에 올리도록 하겠습니다.

모두 잘 부탁드립니다. 감사합니다.

11
1

테스트를 가능케 하기 위해 들여야 하는 수고가 많거나 가늠이 안 되는 수준에서, 리뷰와 테스트는 어느 정도까지 진행이 되어야 할까. 붉은 청어마냥 집중도 분산되고 기력과 시간만 소모하기 쉬운데, 아직 느낌을 잘 모르겠다.

어디선가 테스트는 리스크에 따라 작성하라고는 했는데 어느 정도는 공감하나 리스크 판단이 또 어려운 순간이 있다. 이 함수가 잘못되면 전후조건 위배는 어느 정도로 발생하며, 시스템에 얼마나 크고 작게 영향을 끼칠지 분석이 되어야 하는데...

1

테스트를 가능케 하기 위해 들여야 하는 수고가 많거나 가늠이 안 되는 수준에서, 리뷰와 테스트는 어느 정도까지 진행이 되어야 할까. 붉은 청어마냥 집중도 분산되고 기력과 시간만 소모하기 쉬운데, 아직 느낌을 잘 모르겠다.

0
1
1
1
2