Profile img

bgl gwyng

@bgl@hackers.pub · 99 following · 123 followers

GitHub
@bglgwyng
4

(최근에 직장을 옮겨 풀타임 근무를 시작함)

새 동료들과 이야기하다 함수형 언어 이야기가 나왔는데, 밈에 불과한 이야기만 나와서(함수형 언어 사용자들의 컬트스러움 등) 좀 아쉬웠다. 답답하거나 짜증난다기 보단, 빨리 그부분을 스킵하고 진짜 재밌는 이야기로 넘어갔으면 하는 생각이 들었다. 다행히 동료들이니 앞으로 이야기할 기회가 아주 많을 것이다.

불변성, 사이드이펙트 없음, 아름다움(?) 추구 등의 이야기가 나왔는데, 물론 다 함수형 언어와 관계있지만 본질적인건 아니다. 내게 함수형 언어는 코드를 조합하는 방법을 연구하고, 조합이 잘되는 코드를 짜는걸 실천하는 것이다. 이를 통해 많은 것을 공짜로 안전하게 얻는 것이 목표이다. 그래서 '함수형'의 칭호를 부여받지 못한 방법론들은(ex: 상속), 그냥 해보니까 조합성에 한계가 있어서, 설계를 구성하는 근본적인 요소로 포함시키기에 부적절하다고 결론이 내려졌을 뿐이다. 그럼... 그냥 좋은 방법들을 엄선해놓은게 함수형인가? 그럴지도? 다함께 좋은거 합시다.

12
2
2
5

요즘 AI 수학자/과학자를 만들겠다는 스타트업들이 생기고있는데, 멤버들도 빅테크 출신에 쟁쟁하고 투자도 크게 받는 등 절대 장난같은건 아니다. 그치만 의문이 드는건 피할수가 없는데... 만약에 AI 사업가를 만드는 스타트업을 세워서 VC를 찾아가면, '...그냥 직접 비즈니스를 하시죠?'라고 할게 당연하지 않나. AI 수학자/과학자를 만드는 스타트업도 비슷한 느낌이다. 그냥 연구 결과 낸다음 빅테크 인수될 계획이라고 하면 할말은 없다만.

4

많은 언어들의 많은 패키지 매니저들이, 패키지에 대한 테스트를 돌릴 방법은 제공하면서(npm test 등) 막상 그 패키지 레포를 클론떴을때 그 패키지를 사용하는 아무 예제나 실행시켜볼 쉽고 통일된 방법은 잘 제공 안하는 거 같다. 가령 examples/*의 코드들을 실행시킬 방법은 npm 패키지들마다 제각각이다. 왓더??

3

돌이켜보니 내가 처음으로 소프트웨어의 '품질'을 경험한게 스타1이랑 디아2였다. 게임이 재밌는거랑 별개로, 그때 기준으로 저 두 게임은 소프트웨어로써 품질이 훌륭했다. 그당시 다른 게임들은 느리고, 심각한 버그가 있고, UI가 덜컹 거리기 일쑤였다. 스타1, 디아2는 게임을 켤때부터 끌때까지 매끄러운 경험을 줬다.

7
4

git submodule 쓰다가 생각난건데, VCS 레벨에서 수정할 파일과 아닌 파일을 구분해주는게 좋을거 같다. 읽기 전용 파일의 경우엔 복사하지않고 심볼링 링크만 제공해도 되어서 성능적 이점도 있을 것이다.

3

여자친구가 나한테 과학 이야기 해달라고 해서 '혹시 아인슈타인이 뭐 했는지 알아?'라고 물으니까 '다이너마이트 만들었잖아!'라고 대답했다. 흠..

6
3

방금 보이스피싱을 당할뻔 한거 같은데, 내가 법원등기서류를 수령 못했다면서 온라인으로 받아보라고

http://온라인검찰민원.kr/ 이 사이트로 들어가도록 유도했다. 보다시피 인증서가 없는 페이지이다. 그래서 바로 전화를 끊고 보이스피싱 신고사이트에 신고했다.

근데 나야 인증서 확인하고 이렇게 했지, 만약 우리 엄마였으면 그대로 당했을거같아서 기분이 안좋네..

3

클로드 코드 쓰고있으니 더 나은 VCS에 대한 욕심이 커진다. 나는 클로드가 브랜치를 더 자주 쪼개서, 원하는 시점으로의 롤백이 더 편해졌으면 좋겠다.

하나 생각나는 아이디어는 브랜치 명을 hierachial하게 만들어서 가령 fix-bug-1/refactor-class-foo/fix-function-bar 이런식으로, 무슨 일하는지의 맥락을 브랜치명에 나타내는 것이다. 그리고 a/b 브랜치는 a 브랜치의 자식이어야 한다는 제약도 강제한다.

2
3

요즘 심심할때 굴리고 있는 VCS에 대한 나이브한 아이디어가 있는데

  • 각 커밋에 대해 메타데이터를 줄수 있어야 한다

    레포 내의 metadata.json 같은 파일을 인식해도 되고, 아니면 Commit -> Metadata를 해주는 프로그램을 hook으로 등록하게 해줘도 된다. 이를 통해 package.json, cargol.toml 같은 파일을 읽어서 거기에 버전 의존성을 커밋의 메타데이터로 추출한다.

  • 메타데이터에 대해 인덱싱을 한다

    가령 version이라는 메타데이터가 있을때 2 <= version < 3를 만족하는 커밋의 범위를 인덱스를 활용해 빠르게 알아낼수 있게 한다.

  • 메타데이터로 커밋을 찾는 표현식을 제공한다

    max(2 <= version < 3 and has(fix-bug-foo) and has(add-feature-bar) 이런식으로 하면, 구간 내의 버전에서 foo 버그가 해결되고 bar 피쳐가 추가된 커밋중 가장 최신의 커밋을 구한다. git에서는 fix-bug-foo, add-feature-bar 각각의 브랜치로는 쉽게 갈수 있지만, 해당 브랜치가 main에 머지되기 전까지 그 브랜치 밖을 벗어나 작업하기가 까다로워진다.

  • 이런 레포들을 모아서 모노레포를 모은다음, 메타데이터에 상호 의존성을 기술한다

    그리고 dependency resolve를 해서(메타데이터 검색의 일종일 뿐임) 조건을 만족하는 모노레포 스냅샷을 구한다. 이제 우린 패키지 매니저를 공짜로 얻었다.

이 아이디어는, 현재 패키지 매니저와 VCS가 분리되어있는데 사실 그래선 안된다는 생각에서 나온것이다. 기존의 비슷한 아이디어를 찾아봤는데 gitman 이런게 있더라. 근데 내가 원하는만큼 일반적이진 못하다.

5

챗봇 UI를 만들고 있는데, AI한테 툴 사용을 따로 주지말고, 채팅 자체를 어떤 REPL안에(Python이라던가) 임베딩 시키는게 나은 디자인인거 같다. 근데 이거 먼가 모나드트랜스포머스러운데..

2
9
2

emacs 개발자들은 LLM 시대에 빛을볼 중요한 선견지명을 가지고 있었는데

  1. 텍스트 에디터는 범용 인터페이스다(반 OS가 되어버린 emacs)
  2. RAG할 지식데이터베이스를 만들고 관리할수 있어야한다(org-mode).

근데 이걸 알고도 한푼도 못벌었다ㅋㅋㅋ 열매는 cursor와 notion에게로...

4
5

테슬라 팬보이들이 좀 밉상이긴 하지만, 그래도 기술에 대한 이해도가 높은 편일거라 생각했는데. 얼마전에 어디 게시글에서 FSD에 카메라 외에 라이다 등의 추가 센서를 쓰면, 여러 센서 입력 중에 뭘 신뢰해야하는지 결정해야하는 문제가 추가로 생겨서 안좋다... 라는 얘기를 보았다(그리고 다른 테슬라 팬보이들이 동조함).

1

해외리모트잡 페이가 국내에 비해 너무 좋길래, 주변에 어떻게 이럴수 있냐고 했더니 다들 너무 당연하게 국내 페이가 싸서라고 한다. 그리고 해외에서 한국 개발자 선호하는것도 그냥 단순히 싸고 가성비 좋아서라고 한다.

세계 10위권의 경제대국의 국민으로써 느낌이 좀 이상하다. 그러니까 나는 K-인도 개발자였구나..

10
3

타입시스템이 충분히 좋은 언어는, 특정 함수(타입을 만족하는 프로젝트 내의 아무 함수)를 CLI 바이너리로 빌드하는 기능을 one-liner로 지원할 수 있을 것이고, 그건 아마 지원할만한 기능일 것이다.

Context: Cabal의 어떤 내부 함수를 끄집어내서 CLI 툴로 만드는데 황금같이 귀중한 내 주말을 써야했다.

5

주로 하스켈만 하는 분께 좀 유명한 JS 라이브러리의 깃헙 링크를 공유드렸는데, 스타가 10k인걸 보고는 엄청나게 훌륭한 프로젝트인가보다... 하시길래 / 20 정도로 보정을 하라고 했다.

8
4
3
3
3
5

IQ 테스트로 인간을 판별하고 구분짓는것에는 불편한 느낌이 들지만(그게 쓸모없단 얘긴 아님), 그와중에 우리집 강아지 견종인 요크셔테리어가 똑똑한 견종으로 분류되는 글을 보면 진심으로 뿌듯하다...

4

https://github.com/bglgwyng/nix-x-cabal

한달간의 삽질끝에 Nix + Haskell 빌드 프레임워크를 완성했다. 늘 Nix, Haskell에 기여하고 싶었지만, 솔직히 이걸 내가 직접해야하는 상황이 올줄은 몰랐네. Nix 디버깅하느라 정말 개고통이었다..

4

몇년전에 모 기업 공채를 지원했는데. 마지막 인적성 면접만 남긴 상태에서 간접적으로 그때까지의 점수를 짐작할 방법이 있었는데, 정말 99% 합격했다고 생각했다. 결국 인적성 면접보고 떨어졌는데 거기서 정말 점수를 엄청나게 까먹었단 얘기다. 근데 지금도 이유가 뭔지 모르겠다. 진짜 모든 질문에 무난~한 대답만 했는데 말이지... 그거 떨어지고 다른 회사 갔는데 거기서 커리어도 꽤 꼬여서, 종종 다시 생각하면 아쉬워진다.

3

부연설명을 하자면. Git에선 브랜치 자체로는 '변경 사항'이라는 의미가 없습니다. 왜냐면 끝점만 있고 시작점만 있으니까요. 변경 사항을 논하려면 비교 대상인 커밋이 필요합니다.

Rebase를 하는 이유는 연속된 커밋들로(예쁩니다) '변경 사항'을 나타내기 위해서입니다. 그 의도한 '변경 사항'을 만들기 위해, 비교 대상이 될 커밋을 바꾸는게 리베이스입니다. 그러니까 개발자가 의도한 diff를 그대로 표현하지 못해서, diff = head - x니까 이 방정식을 만족시키는 x 커밋을 찾아서 diff를 의도한데로 계산되게 만드는거지요.

참 뻘스럽습니다.

1

Git 떡밥이 지나갔군요. 리베이스가 왜 필요할까요? Git 브랜치에 시작점의 개념이 없기 때문입니다. 브랜치는 커밋 ref가 아니라 (시작 커밋 ref, 끝 커밋 ref)가 되어야 합니다.

3

친구 회사에서 react-form-mozard의 잠깐 언급되었는데, Generator 기반인게 문제가 되어 도입이 바로 기각되었다. yield*async, await, try, catch 등등과 달리 혐오스러운 외양을 갖고 있는게 문제가 되었다. 여러분 제발 키워드 차별을 멈춰주세요ㅠㅠ

5

소스코드 사이의 안정적인 하이퍼링크를 만들수 있는 기능이 없다. 가령 A.hs에서 주석을 쓰면서 B.hs의 foo란 함수의 구현의 특정 부분을 언급하고자 할때, 그냥 B.hs L:77 이렇게, 소스코드가 수정이라도 되면 바로 유효하지 않게되는 방식으로 언급할수 밖에 없다. 만약 소스 코드 어디에서든 전역적인 심볼을 자유롭게 선언할 수 있다면 이 문제를 해결할 수 있을텐데...

3
4

지금 리눅스 진영에서 컨테이너/네임스페이스의 입지가 어떻게 될까요? 사실 요즘 서비스 배포할때는 죄다 컨테이너 쓰잖아요? 근데 또 컨테이너로 할수 있는 것중 상당수는 그냥 기존 권한 관리로도 가능하단 말이죠? 근데 컨테이너를 쓸땐 기존 권한 관리를 그냥 없는셈 치고 접근하게 되는데 이게 정말로 다들 동의하는 방식인지가 궁금합니다.

3

'둠'의 개발자 존 카멕이 '게임의 스토리는 포르노 영화의 스토리와 똑같다. 있어야 하긴 하지만, 딱히 중요하진 않다고'라고 말한적이 있다. 뭐 곧이 곧대로 이해해도 괜찮은데 약간 재밌게 해석하는 방법이 있는데.

종종 스토리가 훌륭하다고 언급되는 게임들이 있다. 나한텐 그런 게임으로 하프라이프2가 처음이었는데, 실제로 해보면 흥미진진하고 몰입감이 상당하긴 하다. 근데 막상 엔딩을 보고 무슨 내용이었지, 하고 돌이켜보면 전체 플레이타임(한 40시간?)에 비해 그렇게 플롯이 밀도있지 않다는걸 깨닫게 된다.

  • 죽기 싫으면 A로 가세요
  • A로 가려면 무슨 아이템이 필요해서 B를 먼저 가야하네요?
  • B로 갔더니, 여기가 아닌가벼~ C로 가야겠군요
  • 이러쿵저러쿵하다가 결국 A에 도착

이런게 대부분이라, 의미있는 내용만 추리면 전체 게임의 스토리가 아마 세줄 요약도 가능할 것이다. 사실 하프라이프만 이런게 아니라, 대부분의 스토리가 훌륭하다는 게임이 까보면 이런식이다. 잉, 그럼 스토리가 좋다는 얘긴 다 허상이었나?

자, 근데 포르노 영화의 스토리가 어땠더라? 움베르토 에코가 어떤 영화가 멀쩡한 영화인지 포르노 영화인지 구분하는 방법을 알려주는 가벼운 에세이를 쓴 적이 있다. 여기서 포르노 영화라 함은, 21세기에 인터넷에서 볼수 있는 '야동'보단, 옛날에 영화관에서 상영되던, 꼴에 1시간이 넘는 상영시간을 가지는 포르노 '영화'를 뜻한다.

아무튼 그 방법이 뭐냐면. 가령, 남녀 주인공들이 만나서 택시를 타고 집으로 간다. 이때 집으로 가는 동안의 시간을 아무 편집없이 그대로 보여주면 그게 포르노다. 멀쩡한 영화는 당연히 쓸데없는 장면은 바로 끊고, 집에 도착해서 거사를 치르고, 그리고 다시 다음 내용으로 이어질 것이다. 하지만, 지금 당신이 보고 있는게 포르노 영화라면! 택시 타고 가는 아무 의미없는 장면을 10분간 본다음, 그 다음에야 원래 보려고 했던걸 보게 된다.

도대체 왜 10분 동안 택시 타는걸 보여줄까? 움베르토 에코의 대답은, 만약 그 쓸데없는 장면이 없이 주인공들이 바로 물고빨기 시작해버리면, 관객들이 그걸 못 버틸거란 것이다. 아무리 그걸 보려고 온 관객들이라지만, 너무... 바로 그래버리면 쪼끔 부담스럽고 그렇다. 그래서 완충제 역할을 할, 택시에서의 10분이 필요하다. 21세기의 포르노는 고전 포르노 영화에 비해 완충제 구간이 많이 짧아지긴 했지만, 그래도 여전히 흔적은 남아있다.

다시 게임으로 돌아와서. 눈치챘겠지만, 게임에서의 전투(나 아무튼 핵심 플레이)가 포르노의 섹스씬에 대응된다. 그럼 게임에서의 스토리는, 포르노 영화에서 남녀 주인공이 택시를 타고 가는, 플레이어의 정서적 안정감을 위해서가 아니라면 굳이 필요없는 그런 역할을 한다는 얘기가 된다. 게임의 즐거움은 총칼로 맘에 안드는 놈들을 한 3,000명 쯤 조지는데 있는데, 그게 아무리 즐거운 활동이라지만 브레이크가 전혀 없이 스트레이트로 3,000명을 해치우는것은 정서적으로 만만치않은 일이다. 그래서 100명씩, 30번씩 나눠서 죽일 방법이 필요하고, 그 사이를 매꿔주는것이 것이 하프라이프2에서의 '여기가 아닌가벼~'란 결론이다.

존 카멕 님아, 이런 의도로 말씀하신거 맞죠?

2

난 어떤 CLI 툴들이 자기가 실제로 쓰고있는 설정값(기본값이거나, 환경변수에서 왔거나, 파일에서 왔거나)를 읽는 명령어를 필수적으로 포함했으면 좋겠다. 사실 법제화까지 하고싶다..

2

커뮤니티에서 정치적 발언을 하는 것을 금지하는 것의 문제는, 정치적인(또는 그렇게 들린다고 다른사람들이 주장하는) 발언으로 문제가 생겼을때(안 생길수가 없다) 발언의 옳고그름을 떠나, 발언이 정치적인지 아닌지를 따지는쪽으로 흘러가기 때문이라고 생각한다.

아 물론, 대놓고 정치적 발언을 많이 해서 커뮤니티 구성원들을 피곤하게 하는건 좀 다른 문제고, 그걸 피하기 위해 정치적 발언을 금지하는 강령이 있는것일 테다. 근데 이건 그냥 각자 눈치껏 잘치기길 기대하는 수준이고, 커뮤니티의 방향성과는 무관한, 각자 지켜야할 운전 매너에 가깝다. 내 말은, 언젠가 커뮤니티내에서 큰 의견 차이가 생겼을때, '정치적 발언 안됨'이 해결책이 되길 기대할순 없단거다.

2
5

방금 친구랑 모의면접을 봤는데(내가 면접관), 면접으로 알아낼 수있는게 딱히 있는지에 회의가 생겨버렸다. 아 물론, 내가 초보 면접관이라 면접스킬이 떨어지긴 한다만, 친구 얘기론(면접관 경험이 더 많음) 그래도 무난의 범위엔 든다고 한다. 이력서 기반으로 이것저것 물었는데, 만약에 이력서가 구라로 점철되있으면 그걸 걸러낼순 있었을 것이다. 근데 친구의 이력서는 당연히 그렇지 않았으니, 그냥 이력서가 구라가 아니란 사실 정도만;; 알아낼수 있었다. 이 이상 뭔가 더 꿰뚫어 보는게 가능할까... 하겠지? 그럼 어떻게 하는걸까.

4

디버깅을 하다가 도저히 모르겠어서 Gemini한테 시켜서 해보라고했는데, 걔도 나랑 똑같은 시도를 한다음에 잘 모르겠다고 하니까 덤앤더머같다;;

5
12

만약 페디버스가 지금보다 훨씬 활성화되어서, 사람들이 커스터마이징된 개성있는 인스턴스를 갖게 되면, 그게 UX의 측면에서 정말로 좋을까요? 가령, 트위터를 하는데 사용자마다 UI가 다르다고 상상해보세요.

사실 저는 크게 부정적이진 않는데(좋은 쪽으로 개성있을수도 있으니까), 그런 상황이 머릿속에서 아주 잘 시뮬레이션 되지 않네요. 어떨거 같나요?

6
2
0