https://github.com/bglgwyng/deferred-cleanup-resource-map 이런 라이브러리를 만들었다. ref counting 해서 GC 해주는 map인데, 해제를 임의로 늦출수 있다. LRU 캐시같은걸 일반화한 형태라고 보면 된다.
이름이 참 저질인데, 나도 upyo같은 센스있는 이름을 붙이고 싶었지만, 이게 클로드랑 머리맞대서 나온 최선이다;;
@bgl@hackers.pub · 97 following · 121 followers
https://github.com/bglgwyng/deferred-cleanup-resource-map 이런 라이브러리를 만들었다. ref counting 해서 GC 해주는 map인데, 해제를 임의로 늦출수 있다. LRU 캐시같은걸 일반화한 형태라고 보면 된다.
이름이 참 저질인데, 나도 upyo같은 센스있는 이름을 붙이고 싶었지만, 이게 클로드랑 머리맞대서 나온 최선이다;;
@bglbgl gwyng 그런 부분도 있고, 코드의 수명도 더 짧다는 인식이 있어서 그런 것도 있는 것 같아요.
@hongminhee洪 民憙 (Hong Minhee) 위에 제가 한 얘기를 약간 다르게 말하는 방법이 생각났는데, 우리가 쓰고있는 언어가 라이브러리 만드는 작업까진 좋은 언어지만 앱개발 작업에는 아직 구린 언어일수 있어요
@bglbgl gwyng
@kodingwarriorJaeyeol Lee React Native라는 이름의 게임…
@hongminhee洪 民憙 (Hong Minhee)
@kodingwarriorJaeyeol Lee 그렇게라도 생각하면서 견디겠습니다ㅋㅋ
와.... Windows 환경 지원을 위해서 피시방에서 개발한다는 발상은 생각도 못해봤는데...
피시방도 Windows 지원되는 PaaS 점포다 <<<<<
@kodingwarriorJaeyeol Lee 사실 저한텐 요즘 튜링의 사과가 게임 못하는 피시방 정도로 인식되어가고 있습니다. 혹시 해도 되나?
쌀집 앞에 참새가 많아 공유합니다. 좋은 하루 되세요!
사실 애플리케이션 만드는 것보다 라이브러리 만드는 게 훨씬 재밌다. 왜 그런지는 잘 모르겠음… 아마도 UI 개발에 약해서?
@hongminhee洪 民憙 (Hong Minhee) 애플리케이션 코드에는 아직 충분히 형식화하지 못한 문제들을 어영부영 해결하는 코드가 들어가서 그런거 아닐까요. 가령 최근데 Relay가 알아서 reactivity를 부여하지 못하는 부분에 대해서(Relay만의 문젠 아니지만) 땜빵으로 refresh 코드를 몇군데 넣어줘야 하더라고요.
사실 애플리케이션 만드는 것보다 라이브러리 만드는 게 훨씬 재밌다. 왜 그런지는 잘 모르겠음… 아마도 UI 개발에 약해서?
그냥 엄청 재미없는 놀이공원에 왔다고 생각하니 예비군 훈련도 할만하다
새로운 한주를 시작하는 귀중한 월요일 아침 시간을 맥북에 커피 쏟은거 수습하는데 쓰고 말았다...
Show GN: Upyo: 현대적인 JavaScript/TypeScript용 크로스 런타임 이메일 전송 라이브러리
------------------------------
안녕하세요. 개인적으로 이메일 발송 라이브러리를 만들어서 공유해봅니다.
## 왜 만들게 되었나요?
최근에 여러 프로젝트를 진행하면서 Node.js, Deno, Bun 등 다양한 런타임을 사용하게 되었는데, 이메일 발송 부분에서 매번 다른 라이브러리를 찾거나 설정을 다시 해야 하는 불편함이 있었습니다. 특히 D…
------------------------------
https://news.hada.io/topic?id=21971&utm_source=googlechat&utm_medium=bot&utm_campaign=1834
에디터에서의 undo/redo가 그냥 버전관리랑 통합됐으면 좋겠다. 그러니까 undo 한 다음, redo로 다시 돌아가지 않고 다른 수정을 하면, 그 끝점이 anonymous commit 같은 걸로 남는거지.
@bglbgl gwyng @robin 저는 그냥
@xiniha 선생님의 방침을 따라 scope-auth 방식을 쓰고 있습니다…
@hongminhee洪 民憙 (Hong Minhee) @xiniha
@robin 어라, 저도 저거 쓰고 있는거 같은데요(아직 v3라 이름만 다른듯?). 저거 쓰면 권한없는거 null로 떨구지 않나요?
평소에 GraphQL 설계를 할 때 권한에 따라서 같은 리소스의 타입을 다르게 (예를 들어 프로필 타입을 MyProfile과 PublicProfile로 나눈 후 PublicProfile에만 email 등의 필드를 구현한다던가) 하는 설계를 많이 했었는데 Relay에 호환되게 짜려고 하니 node(id) 구조랑 충돌하는 거 같아서 고민이다... id만으로는 그게 Public인지 My인지 알 수도 없고...
@robin 저도 비슷한 경우가 있었은데요. 그런 필드들을 nullabe로 바꾸는 걸로 해결했어요. 의미론상 문제가좀 있긴하지만요.
@tedpool테드풀
@kodingwarriorJaeyeol Lee
@gaebalgom개발곰
@nyeongAn Nyeong (安寧) @joonnotnotJoon
@crohasang크롸상
@z9mb1wwj @r4bb1t톡기
@2chanhaeng초무
@cosmic_elevatorSooji Choi @ooheunda @woaol벨
@meneleHanal Ae
@devomdv @eottabom
@hjleee93hyeonjeong lee 오늘 발대식에서 만나 뵈어서 반가웠습니다! 다시 한 번 앞으로 잘 부탁드립니다! 화이팅!
피드 내리다가 살짝 위로 스크롤하면 탑바(네비게이터)가 노출 되면 편할꺼 같다
튜사에 왔는데 몰입형 공간이 꽉차서 더블 모니터를 못쓰는 관계로, 어쩔수없이 오늘은 하스켈을 좀 해야겠다...
bgl gwyng shared the below article:
중고 자몽차(따뜻함) @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) 이름이 멋집집니다
.NET으로 서버 만들 때는 이메일 보낼 때 FluentEmail이라는 패키지를 유용하게 썼는데, JavaScript 쪽에도 비슷한 게 있나 찾아봤지만 뭔가 다 조금씩 마음에 안 드네… 내가 원하는 건 다음과 같다:
오히려 파일 첨부 같은 부가 기능은 없어도 되기 때문에 간단하게 필요한 라이브러리를 찾을 수 있을 거라고 생각했는데, 못 찾고 있다. 음… 바이브 코딩으로 하나 만들까?
결국 하나 만들었습니다. “우표”라는 이름으로…
@bglbgl gwyng
@lionhairdino 오 시간이 되실때 소개해 주시면 감사히 배우겠습니다.
@jasonkim자손킴
@lionhairdino 아 별건 아니고요ㅋㅋ 펑터 자체에 대한 설명이라기보단, 그런걸 공부한다는게 무슨 의미일까, 쓸모가 있단걸 다른 사람한테 어떻게 설득할까 고민하다 만든 설명입니다
@bglbgl gwyng
@lionhairdino 보통 railway oriented programming 이라고 부르더라구요. 독자적으로 생각하신거라면 엄청 자랑스러우실 것 같아요! 부끄럽지만 전 보고서도 이해하는데 꽤 시간이 걸렸었어요 ㅎㅎㅎ
@jasonkim자손킴
@lionhairdino 아항 제가 생각한거랑은 좀 다르네요. ROP의 시각화가 마음에 듭니다.
@jasonkim자손킴
@lionhairdino 아 철길 비유가 이미 널리 쓰이고 있었나요? 얼마전에 재발명해놓고 뿌듯해하고 있었는데 부끄럽군요
@lionhairdino @jasonkim자손킴 음 철길 비유가 정확히 어떤 비유죠? 검색을 하면 Railway Oriented Programming이란게 나오는데 이거인가요?
@lionhairdino 저도 그래서 상자나 철길 비유를 가급적 피하려고해요. 너무 구체적이라 추상화의 핵심을 표현하는데 한계가 생기더라구요.
@jasonkim자손킴
@lionhairdino 아 철길 비유가 이미 널리 쓰이고 있었나요? 얼마전에 재발명해놓고 뿌듯해하고 있었는데 부끄럽군요
@bglbgl gwyng
@hongminhee洪 民憙 (Hong Minhee) 한시간에 3천원정도 아니었나요? 제가 옛날 요금제만 알고 있어서 그런가...
@akastoot악하
@hongminhee洪 民憙 (Hong Minhee) 24시간권이 25,000원입니다
1만 * 1만 = 1억 이 상식인줄 알았는데 아닌가 봅니다? 오늘만난 제 문과친구 두 명이 저걸 모르길래 뭐라했더니 저보고 별것도 아닌걸로 잘난척하지 말라고합니다. 상식... 아닌가요?
@akastoot악하 12시간권 사면 좀 낫더라고요.
@hongminhee洪 民憙 (Hong Minhee)
@akastoot악하 한시간 천원 정돈데 저는 한달에 4,5 만원 정도나갈거 같은데요?
@bglbgl gwyng 이거 이제 정규 이벤트가 되는 건가요?
@jhhuhJi-Haeng Huh 앗 내일 오시나요?
@bglbgl gwyng 수정을 구체적으로 지시해서 수정하거나, 아니면 제가 실제로 수정한 버전을 첨부해서 그 위에서 작업하게 시켜요.
@hongminhee洪 民憙 (Hong Minhee) 아뉘 잠깐... 클로드가 쓴 결과물을 마우스로 긁으면 '업데이트'라고 피드백 줄수있는 메뉴가 뜨는데요?
@bglbgl gwyng 저는 Claude 웹을 씁니다.
@hongminhee洪 民憙 (Hong Minhee) 중간 수정같은건 어떻게 하시나요?
AI 도움 받아 글쓰기할때 주로 어떤 방식으로 하시나요?
GPT와 최근에 같이 작업한 주제에 대해서 아예 커스텀 GPT를 만들었다.
https://chatgpt.com/g/g-68706e91bb348191a0053c8a2399e63b-gugsan-amho-korea-cryptography
@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
내일도 튜링의 사과 출근해야지
js 커뮤니티는 환경변수 주입 정도는 컴파일타임 의존성 주입처럼 생각하긴 하는듯. 과거에 subpath import, export 없을 때 많이 쓰이던 방식이 고착화된게 아닌가 하는 뇌피셜이 있음..
이와 비슷하게 청개구리 스택 경로라는 것도 생각해 볼 수 있겠다. 예를 들어 Deno를 선택했으면 Fresh는 청개구리 스택 경로가 아니다. 그런데 Deno를 선택한 다음 Next.js를 선택하면 오히려 청개구리 스택 경로가 된다.
예전에 카페에서 코딩하는데 처음 보는 사람이 보더니 혹시 프로그래머냐고 자기 좀 도와달라길래 무슨 문제냐고 하니까 자바 환경설정 좀 도와달라길래 바로 GG치고 튐
bgl gwyng shared the below article:
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 →
bgl gwyng replied to the below article:
RanolP @ranolp@hackers.pub
이 글에서는 프로젝트 진행 시 기술 스택 선정에 대한 경험적 법칙인 "힙스택 보존 법칙"을 소개하며, 힙한 기술 스택을 과도하게 선택할 경우 프로젝트가 산으로 갈 수 있음을 경고합니다. 저자는 신기술 도입 시 발생하는 호환성 문제와 그로 인한 추가 작업의 부담을 설명하며, 커뮤니티가 크고 성숙한 기술의 중요성을 강조합니다. 힙한 기술을 사용하더라도 프로젝트를 성공적으로 이끌 수 있는 두 가지 조건, 즉 기술의 안정성과 개발자의 숙련도를 제시하며, 힙스택을 사용하기 전에 충분한 학습과 경험을 통해 기술적 내성을 길러야 함을 역설합니다. 이 글은 기술 스택 선택의 중요성과 개발자의 역량 강화 필요성을 동시에 강조하며, 균형 잡힌 기술 스택 선택이 프로젝트 성공에 미치는 영향을 시사합니다.
Read more →@ranolp 역사와 전통의 스택인줄 알고 골랐는데, 프로젝트 중간에 갑자기 함정 카드 발동해서 힙스택 갯수가 3을 초과하는 경우도 있지요. 최근에 R모 라이브러리로 인해 겪었습니다.
bgl gwyng shared the below article:
RanolP @ranolp@hackers.pub
이 글에서는 프로젝트 진행 시 기술 스택 선정에 대한 경험적 법칙인 "힙스택 보존 법칙"을 소개하며, 힙한 기술 스택을 과도하게 선택할 경우 프로젝트가 산으로 갈 수 있음을 경고합니다. 저자는 신기술 도입 시 발생하는 호환성 문제와 그로 인한 추가 작업의 부담을 설명하며, 커뮤니티가 크고 성숙한 기술의 중요성을 강조합니다. 힙한 기술을 사용하더라도 프로젝트를 성공적으로 이끌 수 있는 두 가지 조건, 즉 기술의 안정성과 개발자의 숙련도를 제시하며, 힙스택을 사용하기 전에 충분한 학습과 경험을 통해 기술적 내성을 길러야 함을 역설합니다. 이 글은 기술 스택 선택의 중요성과 개발자의 역량 강화 필요성을 동시에 강조하며, 균형 잡힌 기술 스택 선택이 프로젝트 성공에 미치는 영향을 시사합니다.
Read more →
@bglbgl gwyng 더 미래의 자신이 처리해줄거라 믿습니다
@joonnotnotJoon 그렇군요. 지금 이순간 '과거의 미래의 나'로써, 다시 한번 미래의 나에게 위임하겠습니다.
뭔가 any를 떡칠한거 같지만 미래의 내가 알아서 잘 없애주겠지?
@joonnotnotJoon 궁금해서 제 레포를 검색해보니 3년된
// FIXME: remove any가 있군요
bgl gwyng replied to the below article:
robin @robin@hackers.pub
이 글은 마인크래프트 모드 서버를 운영하며 겪은 시행착오와 해결 과정을 담고 있습니다. 서버를 항상 켜두는 대신 필요할 때만 자동으로 켜지도록 구성하여 비용을 절감하고자 했습니다. 이를 위해 Pulumi를 사용하여 AWS 인프라를 구축하고, RCON 프로토콜 대신 `netstat`을 활용하여 접속자 수를 정확하게 파악하는 방법을 소개합니다. 또한, IMDSv2 설정 문제와 ASG 환경에서 볼륨 마운트 실패 문제를 해결하는 과정도 공유합니다. 마지막으로, 서버 파일 EFS 이전 및 도커라이징을 통한 ECS 배포라는 향후 개선 방향을 제시합니다. 이 글은 마인크래프트 서버 운영 비용을 절감하고 자동화된 인프라를 구축하려는 사람들에게 유용한 인사이트를 제공합니다.
Read more →@robin Pulumi 유저를 만나서 반갑네요
Node.js 커뮤니티는 환경 변수를 너무 좋아하는 것 같다. 거의 라이브러리 API의 일부로 생각하는 듯?
Deno만 해도 환경 변수는 --allow-env 플래그를 통해 명시적으로 허용하지 않으면 접근 못하고, Haskell에서도 getEnv는 String이 아니라 IO String을 반환하게 되어 있다.
반면 Node.js에서는 process.env로 너무 쉽게 접근 가능해서 그런가, 환경 변수 접근이 입출력이라는 생각을 아예 안 하는 모양이다.
오늘 오전에 저와 같은 하늘을 보신 분이 계실지.. 더위 조심하시고, 맛점하시길 바랍니다 ☺️
아마 다들 비슷한 경험이 있으실겁니다. 태어나서 처음으로 쌍방향 연결에 성공해서 두 클라이언트가 대화할 수 있게 했을때의 기쁨... 저는 딱 15년만에 하는거라(...) 처음 해본것처럼 기쁘네요
@theeluwin제이미 거기에 x100 정도 해서 ARPAnet 개발자들이 느꼈을 감동을 시뮬레이션해봅시다
아마 다들 비슷한 경험이 있으실겁니다. 태어나서 처음으로 쌍방향 연결에 성공해서 두 클라이언트가 대화할 수 있게 했을때의 기쁨... 저는 딱 15년만에 하는거라(...) 처음 해본것처럼 기쁘네요
역시 프로젝트를 빨리 이해하려면 직접 써보는게 가장 확실한거 같다