아 맞다 환경세팅
notJoon
@joonnot@hackers.pub · 34 following · 41 followers
Uncertified Quasi-pseudo dev
오늘 문장은 맘에 든다
탐라보다가 들켜버렸네요! 오랜만에 #자기소개 할 기회가 생겼습니다:)
- 저도 해커스펍을 만드는 사람은 아니고,
@kodingwarriorJaeyeol Lee 님께서 초대해주셔서 눌러 앉은뒤로 종종 트위터에서 잘 올리지 않는 이야기들을 여기서 하곤 해요.
- 일단 대학원에서 PL 전공을하고 있는데요. 동료와 지인들에게서 딥한 타입 이론들을 듣는 것도 때로는 좋아하지만, 정적분석과 퍼징 같은 실용적인 프로그램 분석 기술에 더 관심이 많아요. JavaScript 생태계의 이런저런 툴체인들과 스펙 자체를 뜯어보고 기여하고 있습니다.
- 좋아하는 언어는 Scala이고 연구할 때 주로 씁니다. 툴링이 좀 별로지만 정말 좋은 언어라고 생각해요. 그 외에도 TypeScript나 Golang, OCaml, Rust 가리지 않고 씁니다.
- 함수형 언어... 이것저것 써본 적도 있고 관심도 가져왔지만 Scala가 제일 손에 익네요. Haskell에 늘 부채감을 느끼고 있습니다.
- 이런저런 기술들에 관심이 많지만 그 모든 것을 follow-up할 여력은 되지 못해 늘 아쉽습니다. 무언가를 혼자서 알아가는 시간도 즐겁지만, 사람과의 교류를 통해 새로운 것을 알아가는 것을 즐깁니다. 기술 외적인 부분에서도요! 최근에는 커피 생두를 가공하고 변인 통제를 하는 것에 대한 이야기를 들었는데 정말 재밌었어요.
- 에디터는
@xiniha 님의 추천이 첫 계기였던 것 같은데, 주로 Zed를 씁니다. 가볍고 빠르고 vim 키 바인딩도 익숙해지면 편하구요. 만족하고 있습니다.
- 20대 중반...이네요. 분명 대학생이었는데 말이죠... 서울에서 살고 있는 시스헤테로남성입니다.
- 사실 해시 거는 거 까먹어서 다시 작성했어요...
@kodingwarriorJaeyeol Lee 아무래도 제가 좀 😎
@kodingwarriorJaeyeol Lee 님에게 들킨 김에 써보는 #자기소개
- 퍼리입니다. 언젠간 해커스 펍을 털로 뒤덮으려는 아름다운 마음을 품고 있습니다.
- 재작년 부터 web3 쪽으로 전향했고 주로 코어 쪽을 건들고 있습니다. 하지만 여전히 블록체인은 잘 모릅니다.
- 언어 만드는걸 좋아하고 관련 프로젝트들에 기여를 하고 있습니다
- 좋아하는 언어는 러스트와 OCaml인데 안 쓴지 오래되서 조만간 까먹을거 같네요
- 파서나 상태머신, 정적분석을 좋아합니다. - 관련해서 요즘은 개발하고 있는 언어에 린터를 만들고 있습니다
- 활자 중독입니다. 해커스펍은 읽을게 많아 좋네요. 책은 주로 철학이나 건축 쪽을 읽고 있습니다.
- 의외로 백엔드나 프론트엔드를 해본적이 없어서 항상 애매한 포지션에 있는 것 같습니다.
- 밴드활동도 하고 있습니다. 원래 대충 모여서 술마시는 것에 의의를 뒀었는데 올해는 공연 뛸 일이 많아졌네요.
- 20대 중반이고 서울에서 거주 중입니다
여러모로 잘 부탁드립니다. 추가로 깃헙 프로필은 https://github.com/notJoon입니다.
해커스펍 개발 환경 세팅 해봐야겠다
초대링크 덕분에 초대장 거의 다 뿌렸다. 굿
notJoon shared the below article:
“조용한 연합우주” 문제를 해결하는 두 가지 접근법: 대화 백필링 메커니즘

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub
이 글은 연합우주(fediverse)에서 발생하는 "조용한 연합우주" 문제, 즉 대화의 일부만 보이는 현상의 원인과 해결책을 탐구합니다. ActivityPub 프로토콜의 분산 특성으로 인해 대화가 여러 서버에 분산되어 저장되면서 발생하는 이 문제를 해결하기 위해, 답글 트리 크롤링과 컨텍스트 소유자 기반 방식이라는 두 가지 주요 접근법을 제시합니다. 답글 트리 크롤링은 모든 답글을 순차적으로 가져오는 방식이지만 네트워크 취약성과 작업량 증가의 단점이 있고, 컨텍스트 소유자 방식은 대화의 원 작성자가 대화 내용을 관리하는 중앙화된 접근법이지만 컨텍스트 소유자에 대한 의존성이 높다는 단점이 있습니다. 또한, 모더레이션 패러다임의 충돌과 상위 전파 누락 문제와 같은 논쟁점을 지적하며, 주기적 크롤링, 사용자 트리거, 멘션 기반 백필과 같은 추가적인 백필 메커니즘을 소개합니다. 마지막으로, FEP 수렴 논의와 구현체 간 협력 현황을 통해 향후 개발 방향으로 하이브리드 접근법의 표준화를 제시하며, 다중 전략 구현, 리소스 관리, 모니터링 및 로깅의 모범 사례 가이드라인을 제시합니다. 이 글은 연합우주가 더욱 풍부하고 연결된 소셜 네트워크로 발전하기 위한 노력과 사용자 경험 개선의 중요성을 강조합니다.
Read more →이번에 설계한 구조의 평이 좋아서 기분이 좋아졌다. 하지만 일하기는 귀찮군
유한 상태 머신의 각 상태를 집합의 원소로 생각한다면, 이산 유한 집합으로 생각할 수 있다. 이 집합은 매끄러운 0차원 매니폴드의 한 예시이기 때문에 자연히 상태 머신도 이렇게 모델링 할 수 있지 않을까?
한번 찾아보니까 Kronhn-Rhodes 분해정리가 나오는데 이건 또 트랜스포머하고 이어지는군
유한 상태 머신의 각 상태를 집합의 원소로 생각한다면, 이산 유한 집합으로 생각할 수 있다. 이 집합은 매끄러운 0차원 매니폴드의 한 예시이기 때문에 자연히 상태 머신도 이렇게 모델링 할 수 있지 않을까?
강화학습 스터디 끝나면 WASM을 깊게 파보는 시간을 가져야겠다
@joonnotnotJoon 와 대박 혼자서 정리 다하신건가여 ㄷㄷ 낫준님이 주관하는 스터디 무임승차하고 싶다
@kodingwarriorJaeyeol Lee 저 파트만 제가 정리하고 있어요. 저도 마센세에게 무임승차 하고 싶네요 👀👀👀
이번달은 강화학습 스터디 그룹을 시작했다는게 가장 큰 성과인듯. 오랜만에 설명하려니 다 까먹은건 안타깝지만
요즘 건축잡지 <미로>를 읽고 있는데 투고된 글들의 깊이와 주제가 상당해서 읽으면서 압도되는 느낌을 강하게 받는다.
깃헙에 선언문 넣어두니까 코드 짤 때 신경쓰게 되는군
파이콘 안간지 꽤 되긴했는데 다시 파이썬을 건들기 시작했기 때문에 올해는 가야겠다
🌐 FediCon is happening August 1st & 2nd in Vancouver 🇨🇦
It is the first ever Fediverse & Social Web conference in Canada.
Want in? Join the early bird list:
See you there?
#FediCon #Fediverse #OpenSocial #OpenSocialWeb #SocialWeb #DeSo #FeSo #LoSo
@bglbgl gwyng
@hongminhee洪 民憙 (Hong Minhee) ㅋㅋㅋㅋㅋㅋ 이렇게 될까봐 안하고 있어요
@joonnotnotJoon 누구라도 환영입니다! ㅎㅎㅎ 모두 데려와 주세요.
해커스펍에도 퍼리맨들 데려와서 털 뿌리고 싶지만 참는 중
브레인 포그가 역대급이라 아무것도 못하겠다
글을 통해 자신의 생각을 막힘없이 표현할 수 있다는건 정말 부러운 능력이다
완전 봄 같다
@joonnotnotJoon
This document, sounds good.
I'll copy it too 🙏
@daidaisuke It would be my honor. Please feel free to use it as much as you'd like 👍
시스템과 설계에 대한 짧은 생각들을 정리해 내 행동강령으로 삼기로 했다. https://github.com/notJoon/menifesto
@joonnotnotJoon 합격자로 뵙
@kodingwarriorJaeyeol Lee (a.k.a. kodingwarrior)
오랜만에 설레네요 될지 안될지는 모르겠지만
지원 완료. 자소서는 프리스타일로 적음
@joonnotnotJoon 님아 저도 지원했는데
아무튼 최근 생각은 전부 정리했고 조만간 퇴사 요청 면담을 해야할듯
오랜만에 초심을 되찾고자 OSS 컨트리뷰톤에 지원을 하려 했으나 자기소개서 쓰기 귀찮아서 바로 포기함
요즘 작업량이 터져서 딴 짓할 겨를도 없다.
젠장, 하스켈 나는 네가좋다!!!!
러스트 10주년 행사 가는 중
예쁘군
러스트 10주년 행사 가는 중
슬슬 이직을 할 계획을 세워야겠다
5월 24일(土) 한국 연합우주 개발자 모임(FediDev KR)에서 두 번째 스프린트 모임을 개최합니다! 장소는 뚝섬역 5번 출구쪽에 위치한 튜링의 사과(@TuringAppleDev튜링의 사과)입니다.
참고로 스프린트 모임이란 함께 모여서 오픈 소스 코딩을 하는 자리인데, 한국 연합우주 개발자 모임의 스프린트에서는 새로운 연합우주 서비스나 앱을 개발하거나, 번역이나 문서에 기여하는 등 연합우주와 관련된 다양한 오픈 소스 활동을 모여서 함께 합니다. 지난 스프린트 모임의 기록을 스프린트 블로그(@sprints.fedidev.kr한국 페디버스 개발자 모임)에서 살펴보실 수 있습니다.
저는 그날 Fedify, Hollo, Hackers' Pub에 기여하시고자 하는 분들을 옆에서 도와드릴 예정입니다. Fedify, Hollo, Hackers' Pub에 기여해보고 싶었던 분들이 계시다면 모임에 참가하여 저와 함께 스프린트를 해보는 것도 좋을 것 같습니다.
이번 모임에 관심이 있으신 분은 행사 신청 페이지를 참고하시기 바랍니다.
러스트 위크에 도착했다
코드를 수정하지 않아도 되는 이유를 수식으로 증명했다. 그래도 구현 상 허점이 있는지는 다시 꼼꼼히 봐야겠음.
AI가 짠 코드의 테스트코드를 AI한테 짜게하고 있으니 Who watches the watchman? 이 떠오르는 것이다.
Hackers' Pub에 글 올릴 때 도표를 Graphviz로 그리면 좋은 점: 도표 안의 글자도 함께 번역된다!
러스트 위크 참여하러 유럽 감
@joonnotnotJoon 가볍게 읽을거면 Atomic Habits 요거 많은 엔지니어 블로그에서 샤라웃 받는 책이에요
@kodingwarriorJaeyeol Lee 아 사놓고 잊고 있었네요. 이참에 읽어야겠다
비행기에서 읽을만한 책 추천 받습니다
바이브 코딩
(이상한 생각 하지 마세욧)
Get back to work
My agent is coding
Hmm go ahead
xkcd.com/303/
취약점 관련 기여는 처음 해봤는데 새롭다
notJoon shared the below article:
업자를 위한 아주 인포멀한 모나드 설명

lionhairdino @lionhairdino@hackers.pub
1.
함수형에선, 스트림 [1,2,3]
에
(+1)
을 map
해서 [2,3,4]
를 만들고,
(+2)
를 map
해서 [3,4,5]
를 만드는 작업을,
(+2) ∘ (+1)
를 [1,2,3]
에 map
하는 걸로 표현할 수 있어야 한다.
(+1)
, (+2)
, ((+2) ∘ (+1))
함수들은 모두 Int -> Int
함수를 원하는 곳에 넣어 줄 수 있는 함수들이다.
위와 같이, 완벽하게 정보를 유지하진 않지만, 같은 "류"의 작업을 두 번 하는 것을, 한 번 작업하는 것으로 표현할 수 있는 경우도 있다. 예를 들어,
첫 번째 작업으로, "hello"
를 로그로 남기고,
두 번째 작업으로, " world"
를 로그로 남기는데,
이를 한 번의 작업으로, "hello world"
를 로그로 남기는 작업으로 표현할 수 있다.
여기는 로그를 남기는 횟수 정보는 필요 없고, 최종 로그만 필요하다는 인위적 정보 선택이 들어가 있다. 이 인위적 선택(여기선 로그 문자열을 합치는 것)을 수긍해야만 가능하다.
로그를 남기는 작업을 m
이라 부를 때, m a
를 받는 곳에 m (m a)
를 넘길 방법이 생긴다는 뜻이다. 달리 말하면, m (m a)
로 표현되는 작업을 인위적인 절차를 거쳐 m a
로 만들어도, 내가 필요한 정보는 사라지지 않는다는 뜻이다.
2.
무언가가 하나인데, 유심히 보면 하나가 아닌 경우, 이게 바로 모노이드다. mono
는 하나를 뜻하고, ~oid
는 "척"하는 걸 말한다. (예. 인간인 척 하는 휴머노이드) 하나인척 하는 게 모노이드다. 수학 책 앞 부분에서 이항 연산, 결합 법칙, 항등원이 있으면 모노이드라는 설명을 하는데, 그래서 모노이드가 뭐에 쓰는 물건인지는 한참 공부해야 알 게 된다.
(아래는 혼자만의 생각입니다.)
모노이드를 바라 보는 눈 중 하나로, "모든 대상을 이항 연산으로 표현"을 들 수 있다.
0
을 포함한 자연수들 0,1,2,3,...
들은, +
이항 연산과, 이 연산의 항등원 0
이 있으면, 모두 ○ + ○
한 가지 모양으로 표현할 수 있게 된다.
0
-> 0+0
1
-> 0+1
2
-> 0+(1+1) = 1+1
...
모노이드 구조이기에, 어딘가에서 ○ + ○
모양을 원한다면, 0,1,2,3,...
을 모두 넣어 줄 수 있다.
3.
"어딘가에서 m a
를 원한다면, m a, m (m a), m (m (m a)), ...
를 모두 넣어 줄 수 있다."를 위와 비교하며 보자.
위에서 얘기한 인위적 선택 작업을 join
으로 표현하면,
m (m a)
--join--> m a
m (m (m a))
--join--> m (m a)
--join--> m a
...
m
반복 작업을 모두 ○ --join--> ○
모양으로 표현할 수 있을 것만 같다. 그런데, 딱 하나는 표현하지 못한다. join
은 m
이 두 개 있는 걸, 하나로 만드는 작업이라, m
하나를 ○ --join--> ○
로 표현하지 못한다. m
을 join
이 들어간 모양으로 표현하려면, 자연수, +
에서 처럼 0
에 대응하는 것이 필요하다. m
하나를, m
두 개로 만들되, 최종 결과에 영향을 미치지 않는 pure
라는 작업을 만든다. 위 로그 작업을 예로 들면, 로그로 빈문자 ""
을 추가하는 작업을 pure
로 만든다. 그러면 이제야 비로소, 모든 반복된 m 을 join으로 표현할 수 있게 된다
m a
--pure--> m (m a)
--join--> m a
m (m a)
--join--> m a
m (m (m a))
--join--> m (m a)
--join--> m a
...
이제, join
절차가 항상 있는 m a
를 원하는 곳에 m a
도 m (m (m a))
도 넣어 줄 수 있게 되었다.
"hello"와 " world"를 남기던 두 개의 작업 합쳐, "hello world"를 남기는 하나의 작업으로 표현할 수 있게 되었다.
※ 지금 눈에 명확히 보이진 않지만, m 둘을 합성하는 연산을 .
이라 하면, .
만으론 모노이드 이항 연산 역할을 못하지만, join
의 도움을 받고, id 만으론 항등원 역할을 못하지만, pure
의 도움을 받아 모노이드 구조를 이룬다.
결론.
당연히 모든 내용이 담겨 있진 않고, 모나드를 무엇의 모노이드로 보는 내용을 비수학적으로 풀어 봤다. 모노이드는 모두를 하나의 모양으로 표현 할 수 있다는 걸, 보증해주는 거대한 개념이지만, 업자인 나에겐 "그렇게 해도 된다"는 정도의 느낌만 있다. (결합 법칙이 빠졌는데, 나중에 코드를 모듈화 하는 것과 연관지어 보면, 명확한 대응을 알 수 있다.)
모나드는, 조금 다르게 생긴 것을, 당장 필요한 요소만 잘 관리한다면 "같은 걸로 치자"를 멋지게(,어렵게) 형식화한 이론이다.
사족.
저와 대화를 나눠본 분들은 아시겠지만, 제가 비전공자라 용어 선택이나 개념 정의가 매우 인포멀해서 인상을 찌푸리는 경우도 자주 만듭니다. PL 전공자분들처럼 깊숙히 이론을 파고 싶은 게 아니라, 현실에 적용할 수 있을 만큼의 눈만 가지고 싶습니다. 현실을 모델링할 때, "인위적 정보 선택"을 해서 필요한 정보를 남길 수 있는 경우를 알아채는 눈을 길러야 되는데, bind
또는 flatmap
, return
또는 pure
가 있는 구조가 모나드라고만 배우면, 이런 눈을 가지는데 매우 오래 걸리는 것 같습니다.
비전공 업자분이 보셨다면, 얻어 가시는 아이디어가 있었으면 좋겠고, 전공자분이 보셨다면, 인포멀한 부분에 너무 인상 찌푸리지 마시고, 틀린 개념이 있다면, 부드럽게 조언을 해주시면 좋겠습니다.
※ 모나드 용어는 mono
와 triad
에 온 게 아닐까 의심한다는 설이 있습니다.(검색해 보면 근거는 미약해 보입니다.) 모나드는 join
, return
그리고 위에서 명시적 언급은 안했지만, 펑터의 fmap
, 이렇게 세 개 triad의 도움을 받아 모노이드로 만들 수 있는 구조입니다.
※ "정교한" 내용이 아님을 강조하고 선입견이 생기지 않기 위해, 일부러 제목을 달지 않고, 반말(혼잣말)투로 썼습니다.
제목은
- 함수형
- 모노이드
- 모나드
순서 입니다.
문서 작업은 전부 LLM에 던지고 코드만 짜니까 아주 좋다
@bglbgl gwyng 네 러스트로 구현 중이에요
@joonnotnotJoon 약간 초치는거 같아서 죄송한데, 파싱 후에도 AST가지고 해야할 잡다구리한 일들이 있단 말이죠. 대표적으로 포매터? 본격적으로 언어를 위한 툴링을 만들려면 그런것들을 만들어야하는데, space/comment preserving을 지원하도록 업그레이드하는게 필요이상으로 고단할수 있습니다. 그래서 파서 컴비네이터 자체가 아니라 언어 개발이 목적이라면 type_sitter 요런걸 고려해보시는걸 추천드립니다. 제가 Rust를 할줄 몰라서 저걸 못썼는데 늘 부러웠어요.
@joonnotnotJoon 약간 초치는거 같아서 죄송한데, 파싱 후에도 AST가지고 해야할 잡다구리한 일들이 있단 말이죠. 대표적으로 포매터? 본격적으로 언어를 위한 툴링을 만들려면 그런것들을 만들어야하는데, space/comment preserving을 지원하도록 업그레이드하는게 필요이상으로 고단할수 있습니다. 그래서 파서 컴비네이터 자체가 아니라 언어 개발이 목적이라면 type_sitter 요런걸 고려해보시는걸 추천드립니다. 제가 Rust를 할줄 몰라서 저걸 못썼는데 늘 부러웠어요.
@bglbgl gwyng 트리시터가 AST를 다룰 일이 있을 때 진짜 좋은 도구죠. 말씀해주신 부분들도 상당히 공감이 되는 것들이라 저는 최대한 고통을 줄이기 위해 컴비네이터 자체만 구현을 할 계획입니다. 물론 또 다른 애로사항들이 생기긴 하겠지만요