After 15 years of writing #Haskell code, I think I am finally ready to understand Lenses and Optics.
洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 1007 following · 714 followers
Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub! My main account is at
@hongminhee洪 民憙 (Hong Minhee)
.
Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다. 제 메인 계정은:
@hongminhee洪 民憙 (Hong Minhee)
.
Fedify、Hollo、BotKit、そしてこのサイト、Hackers' Pubを作っています。私のメインアカウントは「
@hongminhee洪 民憙 (Hong Minhee)
」に。
Website
- hongminhee.org
GitHub
- @dahlia
Hollo
- @hongminhee@hollo.social
DEV
- @hongminhee
velog
- @hongminhee
Qiita
- @hongminhee
Zenn
- @hongminhee
Matrix
- @hongminhee:matrix.org
X
- @hongminhee
Javascript/Typescript 생태계에는 소스코드 간 의존관계를 유향그래프(Direct Graph)로 시각화하는 CLI 도구가 있다는 사실... 알고 계신가요? madge, 적극적으로 추천합니다.
그냥 JS/TS 프로젝트 뿐만이 아니라, jsx 파일이 들어간 경우도 의존관계를 아름답게 시각화해줍니다. fedify 소스코드 통독하면서 이걸 적극적으로 써볼까 합니다. 마치.... 탐정이 사건 추적하면서 지도에 X 표시하는 감성으로...
이번에는 디렉토리 단위로 그룹화한 버전...
depcruise fedify --include-only "^fedify" --output-type dot -- fedify/**/*.ts | dot -T svg > dependency-graph.png
dependency-cruiser라는 리포지토리도 있다.
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
노는 랩탑 하나를 장난감용으로 밀어버려야겠군요. 이번엔 NixOS를 써보려 합니다.
어제 OSSCA 끝나고 큐브러버 보러 갔는데
화장 지우고 그대로 잠들었음.... 피곤했나바
생각해보니 여기선 해시태그를 한 번도 써본 적이 없네요 추천 알고리즘을 좋아하지 않는게 #fediverse 의 분위기다 보니, 서로 관심사를 공유하는데엔 해시태그가 주로 사용되고 있습니다.
내일은 진짜 mock 작업하던거 끝낸다
I made a quiz about the JS Date parser. It's very easy and you will score very high.
오 이렇게도 추가할수 있음!!
Oynx boox 아주 만족스럽다.. 일단 아이패드 보다 가볍고 눈이 덜 피로함
이제 발대식도 했으니까 빡겜모드다
@tedpool테드풀
@kodingwarriorJaeyeol Lee
@gaebalgom개발곰
@nyeongAn Nyeong (安寧) @joonnotnotJoon
@crohasang크롸상
@z9mb1Jiwon @r4bb1t톡기
@2chanhaeng초무
@cosmic_elevatorSooji Choi @ooheunda @woaol벨
@meneleHanal Ae
@devomdv @eottabom
@hjleee93hyeonjeong lee 오늘 발대식에서 만나 뵈어서 반가웠습니다! 다시 한 번 앞으로 잘 부탁드립니다! 화이팅!
모든 OS에서 웹콘텐츠 렌더링이 가능한 경량화된 js 엔진을 만들고싶다
제발 TC39 Temporal 주세요
제발
I scored 11/28 on https://jsdate.wtf and all I got was this lousy text to share on social media.
OSSCA 너무 일찍 도착했다....
OSSCA 거의 도착 인데 1시간 가까이 남음...
OSSCA 발대식에 사람이 정말 많다.
정말 파파괴의 언어...
I scored 11/28 on https://jsdate.wtf and all I got was this lousy text to share on social media.
피드 내리다가 살짝 위로 스크롤하면 탑바(네비게이터)가 노출 되면 편할꺼 같다
튜사에 왔는데 몰입형 공간이 꽉차서 더블 모니터를 못쓰는 관계로, 어쩔수없이 오늘은 하스켈을 좀 해야겠다...
OSSCA 발대식 옴
.NET으로 서버 만들 때는 이메일 보낼 때 FluentEmail이라는 패키지를 유용하게 썼는데, JavaScript 쪽에도 비슷한 게 있나 찾아봤지만 뭔가 다 조금씩 마음에 안 드네… 내가 원하는 건 다음과 같다:
- Mailgun, SendGrid, SMTP 등 다양한 이메일 전송 트랜스포트를 하나의 일관된 API로 사용할 수 있어야 한다.
- 멋대로 환경 변수에 의존하지 말아야 한다.
- Node.js는 물론 Deno에서도 동작해야 한다.
오히려 파일 첨부 같은 부가 기능은 없어도 되기 때문에 간단하게 필요한 라이브러리를 찾을 수 있을 거라고 생각했는데, 못 찾고 있다. 음… 바이브 코딩으로 하나 만들까?
결국 하나 만들었습니다. “우표”라는 이름으로…
I got suddenly inspired yesterday to build an email sending library for Node.js/Deno/Bun/edge functions. Meet Upyo: a TypeScript-first email library with a unified API that works across all JavaScript runtimes. It features pluggable transports (SMTP and Mailgun so far), built-in connection pooling, and comprehensive type safety. Still early days but already loving how clean the API turned out!
By the way, check out this cute Upyo logo here! Just FYI, 郵票 (upyo) means postage stamp in Korean. You can view the SVG source code on GitHub.
I got suddenly inspired yesterday to build an email sending library for Node.js/Deno/Bun/edge functions. Meet Upyo: a TypeScript-first email library with a unified API that works across all JavaScript runtimes. It features pluggable transports (SMTP and Mailgun so far), built-in connection pooling, and comprehensive type safety. Still early days but already loving how clean the API turned out!
洪 民憙 (Hong Minhee) shared the below article:
객체 프로퍼티 키 평가 과정
Lee Dogeon @moreal@hackers.pub
이 글은 AI도 틀리는 JavaScript 퀴즈를 풀면서 발견한 JavaScript의 흥미로운 동작 방식에 대한 탐구 과정을 담고 있습니다. 퀴즈의 예제 코드를 실행했을 때 예상과 다른 결과가 나타난 이유를 분석하며, JavaScript에서 세미콜론 자동 삽입(Automatic Semicolon Insertion) 규칙과 쉼표 연산자의 동작 방식을 설명합니다. 특히 배열이 객체의 프로퍼티 키로 사용될 수 있는 이유를 파악하기 위해 ECMAScript 명세를 깊이 파고들어 `Symbol.toPrimitive`라는 개념을 소개합니다. 이를 통해 객체가 프로퍼티 키로 사용될 때 JavaScript 엔진이 어떻게 객체를 문자열로 변환하는지, 그리고 `Symbol.toPrimitive`를 사용하여 이 동작을 어떻게 커스터마이징할 수 있는지 보여줍니다. 비록 퀴즈의 정답과는 거리가 멀어졌지만, 이 과정에서 얻게 된 새로운 지식을 공유하며 JavaScript의 숨겨진 동작 원리를 이해하는 데 도움을 줍니다.
Read more →
洪 民憙 (Hong Minhee) shared the below article:
AI도 무조건 틀리는 Javascript 퀴즈
중고 자몽차(따뜻함) @dvbeetle@hackers.pub
이 JavaScript 퀴즈는 `age` 객체와 `preferences` 객체를 사용하여 각 이름에 대한 나이를 출력하는 문제입니다. `forEach` 메서드를 통해 배열의 각 요소(이름)를 `printAge` 함수에 전달하고, 이 함수는 템플릿 리터럴을 사용하여 "name is age" 형태의 문자열을 콘솔에 출력합니다. Claude Opus, GPT 4.5, Gemini 2.5 Pro와 같은 고급 AI 모델들도 이 문제에서 오답을 냈다는 점이 흥미롭습니다. 이 코드를 통해 JavaScript의 객체 접근과 배열 메서드 사용법을 다시 한번 상기할 수 있습니다.
Read more →
@hongminhee洪 民憙 (Hong Minhee) 요것이 사실 대표 오답입니다...! 다시 보시면 금방 찾으실지도...?
@dvbeetle중고 자몽차(따뜻함) 아,
preferences가 안 쓰인다고 생각했는데 세미콜론이 없어서 뒤로 이어지는군요… JavaScript는 역시 어렵네요.
洪 民憙 (Hong Minhee) replied to the below article:
AI도 무조건 틀리는 Javascript 퀴즈
중고 자몽차(따뜻함) @dvbeetle@hackers.pub
이 JavaScript 퀴즈는 `age` 객체와 `preferences` 객체를 사용하여 각 이름에 대한 나이를 출력하는 문제입니다. `forEach` 메서드를 통해 배열의 각 요소(이름)를 `printAge` 함수에 전달하고, 이 함수는 템플릿 리터럴을 사용하여 "name is age" 형태의 문자열을 콘솔에 출력합니다. Claude Opus, GPT 4.5, Gemini 2.5 Pro와 같은 고급 AI 모델들도 이 문제에서 오답을 냈다는 점이 흥미롭습니다. 이 코드를 통해 JavaScript의 객체 접근과 배열 메서드 사용법을 다시 한번 상기할 수 있습니다.
Read more →@dvbeetle중고 자몽차(따뜻함) 출력은 대충 아래와 같을 것 같은데…
ruby is 18
ayumu is 19
siki is 20
근데 preferences는 정의된 채로 전혀 안 쓰이네요?
1만 * 1만 = 1억 이 상식인줄 알았는데 아닌가 봅니다? 오늘만난 제 문과친구 두 명이 저걸 모르길래 뭐라했더니 저보고 별것도 아닌걸로 잘난척하지 말라고합니다. 상식... 아닌가요?
@bglbgl gwyng 부끄럽지만 모르고 있었습니다… 😂
튜링의 사과 매주 주말마다 간다고 계산하면... 한달에 10만원 쯤 나가는구나... 거기 그 민생지원금 사용 되나요????
@akastoot악하 12시간권 사면 좀 낫더라고요.
튜링의 사과 매주 주말마다 간다고 계산하면... 한달에 10만원 쯤 나가는구나... 거기 그 민생지원금 사용 되나요????
洪 民憙 (Hong Minhee) shared the below article:
내가 애정하는 터미널 도구들 - Wezterm 편
Jaeyeol Lee @kodingwarrior@hackers.pub
이 글은 개발 환경에서 자주 사용하는 도구인 Wezterm을 소개한다. dotfiles에 대한 간략한 설명과 함께, Rust 기반의 GPU 가속 터미널 에뮬레이터인 Wezterm의 특징과 장점을 설명한다. Linux, MacOS, 윈도우즈 등 다양한 환경에서 사용 가능하며, Lua 스크립팅을 통해 확장 가능한 기능을 제공한다. 폰트 설정, 단축키를 이용한 반투명도 조정, 탭 이름 변경, 시각적 알림 등 Wezterm을 커스터마이징하는 다양한 방법을 예시 코드와 함께 제시하여 독자들이 Wezterm을 쉽게 시작하고 자신만의 환경을 구축할 수 있도록 돕는다. Wezterm의 유연성과 사용자 정의 가능성을 강조하며, 독자들에게 생산성을 향상시킬 수 있는 강력한 도구임을 어필한다.
Read more →여성향 커미션 중개 플랫폼 크레페를 운영하는 쿠키플레이스에서 시니어 백엔드 엔지니어 채용을 진행중입니다. 채용공고에 해당 직무 소개, 복지, 연봉, 회사문화의 내용이 포함돼 있습니다. 많은 관심 부탁드립니다. Node.js, TypeScript, GraphQL에 대한 높은 숙련도 및 지식으로 팀에 기여해주실 분을 쿠키플레이스에서 극진히 기대하고 있습니다.
크레페에서는 이런 기술스택을 사용합니다
- Node.js, TypeScript, Vitest, Fastify
- GraphQL - Yoga, Relay, Pothos, Prisma
- ElasticSearch, MongoDB, FCM
- Docker, Github Actions
- AWS - ElasticBeanstalk, CloudWatch, Aurora PostgreSQL, Lambda, SES, S3, ElastiCache (Redis)
- Grafana, Sentry
구성원의 성장과 덕질을 지원해요
- 희망 도서 구매 (만화책 및 TRPG 룰북 포함)
- 워크샵 및 교육 프로그램 지원
- 전시, 공연 및 각종 행사 티켓 지원
- 월 5만 크레페 포인트
- 전동작탁 AMOS JP-EX COLOR
- 6인용 TRPG/보드게임 테이블
지원자님이 예상하실 수 있는 처우는 이래요
- 연봉: 최소 8000만원 ~ 최대 2억원 (주 40시간)
- 스톡옵션 부여에 열려있는 포지션
@hongminhee洪 民憙 (Hong Minhee) 아뉘 잠깐... 클로드가 쓴 결과물을 마우스로 긁으면 '업데이트'라고 피드백 줄수있는 메뉴가 뜨는데요?
@bglbgl gwyng 아, 네 그것도 종종 씁니다. ㅎㅎㅎ
@hongminhee洪 民憙 (Hong Minhee) 중간 수정같은건 어떻게 하시나요?
@bglbgl gwyng 수정을 구체적으로 지시해서 수정하거나, 아니면 제가 실제로 수정한 버전을 첨부해서 그 위에서 작업하게 시켜요.
AI 도움 받아 글쓰기할때 주로 어떤 방식으로 하시나요?
- 클로드 웹. 모델은 좋은데 인터페이스가 글쓰기 최적화는 아닙니다.
- Cursor/Windsurf 등. 모델이 코딩 고문을 당해서 그런가 글을 잘 못씁니다.
@bglbgl gwyng 저는 Claude 웹을 씁니다.
내가 예민한건가. LLM이 "여기서 as any 한 번 정도는 괜찮아요"라며 구슬린다
@mck 하지만 사람들도 많이 그럽니다…
내가 예민한건가. LLM이 "여기서 as any 한 번 정도는 괜찮아요"라며 구슬린다
이슈 적당히 어려워보이면서 할만해보이는걸로 고르니까 코드베이스가 더 잘 익혀진다
내일도 튜링의 사과 출근해야지
@bglbgl gwyng 앗… 저는 일요일에 가려고 했는데!
Diffsitter – A Tree-sitter based AST difftool to get meaningful semantic diffs
Link: https://github.com/afnanenayet/diffsitter
Discussion: https://news.ycombinator.com/item?id=44520438
@hongminhee洪 民憙 (Hong Minhee) 벌써내일이네요!!! 저도 기대가 됩니당 ㅎㅎ
@hjleee93hyeonjeong lee 네, 내일 뵙겠습니다…!
js 커뮤니티는 환경변수 주입 정도는 컴파일타임 의존성 주입처럼 생각하긴 하는듯. 과거에 subpath import, export 없을 때 많이 쓰이던 방식이 고착화된게 아닌가 하는 뇌피셜이 있음..
역시나 UCPC 일정으로 OSSCA 발대식 참여하기 어려운 분들이 많으시군아 흠흠
@kodingwarriorJaeyeol Lee Fedify 프로젝트에서는 두 분 불참하신다고 하셨어요.
내일은 OSSCA 발대식… 처음으로 기여자 분들 만나는 자리다. 어떤 분위기일까 걱정도 되고 기대도 된다.
어제의 나는 제정신이 아니였군 as any를 이렇게 남발하다니
洪 民憙 (Hong Minhee) shared the below article:
펑터Functor
lionhairdino @lionhairdino@hackers.pub
하스켈 펑터 입문자를 위한 이 글은 `Maybe Int` 타입의 값에서 `Int`를 직접 "꺼내올 수 없다"는 개념을 설명합니다. `Maybe`의 `fmap`이나 `fromJust`가 마치 값을 꺼내는 것처럼 보이지만, 이는 실제로는 값을 꺼내는 것이 아니라, 원본 타입(`Int`)의 구조를 보존하며 새로운 `Maybe Int` 타입의 값을 "생성"하는 과정이라는 것입니다. 미끄럼틀 비유를 통해, `Maybe Int`의 `Just 1`은 `Int` 값 `1`과 연관되어 있지만, `Just 1` 자체가 `1`을 의미하는 것은 아닙니다. 펑터는 원본 타입의 관계(구조)를 그대로 유지하며 다른 타입으로 변환하는 역할을 합니다. `fmap`은 `Maybe Int` 안의 `Int`를 직접 조작하는 것이 아니라, 원본 `Int` 값의 관계를 바탕으로 새로운 `Maybe Int` 값을 만들어내는 것입니다. 상자 메타포가 유용할 때도 있지만, 펑터의 본질을 오해하게 만들 수 있습니다. 상자 안의 값을 꺼내는 것이 아니라, 값의 "성격"은 값을 다루는 함수들의 동작에 따라 결정된다는 점을 강조합니다. 이 글은 "없을 수도 있는 수를 꺼낸다"는 표현의 모순을 지적하며, 펑터의 개념을 더 깊이 이해하도록 돕습니다.
Read more →예전에 카페에서 코딩하는데 처음 보는 사람이 보더니 혹시 프로그래머냐고 자기 좀 도와달라길래 무슨 문제냐고 하니까 자바 환경설정 좀 도와달라길래 바로 GG치고 튐
- 아직 OSSCA 튜토리얼 돌려보진 않았어서 빠르게 훑어보기
- @fedify/nestjs 계속 만드는 중인데, 한바퀴 돌려볼 수준으로는 만들어놓기 (만들다보니 이렇게 하는게 맞나 싶음....)
- 파이콘 발표 준비.....
- 파이콘에서 데모할 영상 녹화하기
- 파이콘 발표 슬라이드 대본 채우기
- Ubucon BoF 슬라이드 자료 완성하기






