K오픈소스라… TS에서 map이나 groupBy 같은 함수들을 체이닝해주는 라이브러리가 있는데 맛도리라서 놀랐고 한국 기업에서 만든 라이브러리라서 더 놀랐던

洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 415 following · 277 followers
Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub!
Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다.
Website
- hongminhee.org
GitHub
- @dahlia
Hollo
- @hongminhee@hollo.social
DEV
- @hongminhee
velog
- @hongminhee
Qiita
- @hongminhee
Zenn
- @hongminhee
Matrix
- @hongminhee:matrix.org
X
- @hongminhee
@hongminhee洪 民憙 (Hong Minhee) Hollo를 사용하려고 합니다. 오라클 클라우드의 S3 호환 오브젝트 스토리지도 Hollo가 지원하나요?
@curry박준규 네, 별 문제 없다면 쓸 수 있을 겁니다.
대충 만든 Open Graph 이미지 생성기도 좀 제대로 다시 짜야 하는데… 지금은 너무 울퉁불퉁함.
@xtjuxtapose 아마 신고 기능 먼저 구현할 것 같아요.
@xtjuxtapose 좀 더 생각해 봤는데, 댓글 막는 기능이 구현이 아주 어렵진 않을 것 같아서, 일단 지금 하고 있는 작업 마치면 그 다음에 착수하도록 하겠습니다.
@xtjuxtapose 그건 우선 순위가 좀 낮을 것 같습니다… 죄송합니다… 🥲
@xtjuxtapose 아마 신고 기능 먼저 구현할 것 같아요.
@hongminhee洪 民憙 (Hong Minhee) 댓글 막는 기능은 언제 들어올까요
@xtjuxtapose 그건 우선 순위가 좀 낮을 것 같습니다… 죄송합니다… 🥲
Hackers' Pub에 다국어 콘텐츠 기능 추가하는 중… 일단 맨 처음에는 기계 번역 먼저 넣고, 나중에 수동 번역 기능도 넣으려고 합니다.
Drizzle ORM이 어서 Temporal.Instant
를 지원했으면 좋겠다. 그 전에 드라이버가 먼저 지원해야 하려나? PostgreSQL의 timestamp with time zone
타입이 나노초 정밀도인데 Date
는 밀리초 정밀도라 값이 손실되고 있다.
@hongminhee洪 民憙 (Hong Minhee) 안 그래도 깎아보던 중입니다 😂
@hongminhee洪 民憙 (Hong Minhee) 안 그래도 깎아보던 중입니다 😂
@xiniha 오오…!!
@hongminhee洪 民憙 (Hong Minhee) 네, 그렇긴 한데 graphviz를 직접 적으면 팬피에서는 이미지 표시가 안 되더라고요!
@curry박준규 아, Mastodon에서
<svg>
태그를 지워버리니까 그렇겠네요. (Hollo에서는 Phanpy를 써도 도표가 표시됩니다!)
저는 소셜 서비스의 핵심이 ‘좋아요(Like
)’라고 생각합니다. 저는 제가 페이스북에서 처음으로 ‘좋아요’를 많이 받아서 너무 신났던 감정을 잊을 수 없습니다. 그리고 저는 지금도 ‘좋아요’의 노예⋯(사람들은 그런 너를 관종이라고 부른단다.)
@curry박준규 좋아요가 없어서 하트 찍어드렸습니다.
그나저나, 도표는 이미지로 첨부하지 않더라도 Hackers' Pub 자체 기능으로도 그릴 수 있어요!
@hongminhee洪 民憙 (Hong Minhee) 안 그래도 Evan Prodromou 님이 쓴 책을 읽다가 든 생각을 적은 것인데 신기하네요!
@curry박준규 오, 그 책을 읽고 계셨군요! 전 아직 읽어 본 적 없는데, 조만간 저도 읽으려고요…!
We're pleased to announce that #Fedify has been included in the Nivenly Fediverse Security Fund program!
The @nivenlyThe Nivenly Foundation Foundation has launched a security bounty fund to support contributors who identify and help fix #security vulnerabilities in popular #fediverse software. Both Fedify and
@holloHollo
are among the selected projects that meet their responsible security disclosure requirements.
This program will run from April–September 2025, with bounties of $250–$500 USD for high and critical security vulnerabilities.
We're honored to be recognized alongside other established fediverse projects like Mastodon, Misskey, and Lemmy. This further encourages our commitment to maintaining strong security practices.
If you're interested in contributing to Fedify's security, please follow our responsible disclosure process outlined in our SECURITY.md file.
Learn more about the program:
https://nivenly.org/blog/2025/04/01/nivenly-fediverse-security-fund/
@curry박준규 어쩐지 모든 것을 다 구현하는 프로젝트인 Friendica에서는 구현했을 것 같아서 테스트해 보니, 실제로 구현하고 있네요. 제가 아래 인용한 글이 Friendica에서 위치 공유해서 쓴 글인데, ActivityPub 프로토콜에서는 아래와 같이 표현되고 있습니다:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
{
"ostatus": "http://ostatus.org#",
"vcard": "http://www.w3.org/2006/vcard/ns#",
"dfrn": "http://purl.org/macgirvin/dfrn/1.0/",
"diaspora": "https://diasporafoundation.org/ns/",
"litepub": "http://litepub.social/ns#",
"toot": "http://joinmastodon.org/ns#",
"featured": {
"@id": "toot:featured",
"@type": "@id"
},
"schema": "http://schema.org#",
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
"sensitive": "as:sensitive",
"Hashtag": "as:Hashtag",
"quoteUrl": "as:quoteUrl",
"conversation": "ostatus:conversation",
"directMessage": "litepub:directMessage",
"discoverable": "toot:discoverable",
"PropertyValue": "schema:PropertyValue",
"value": "schema:value"
}
],
"id": "https://venera.social/objects/85a863ed-6368-115b-fd7f-671987855891",
"type": "Article",
"inReplyTo": null,
"diaspora:guid": "85a863ed-6368-115b-fd7f-671987855891",
"published": "2025-04-29T23:08:45Z",
"url": "https://venera.social/display/85a863ed-6368-115b-fd7f-671987855891",
"attributedTo": "https://venera.social/profile/hongminhee",
"sensitive": false,
"conversation": "https://venera.social/objects/85a863ed-6368-115b-fd7f-671987855891#context",
"name": "Setting my location",
"content": "This post purposes to test what if I set my location in a post.",
"contentMap": {
"en": "This post purposes to test what if I set my location in a post."
},
"source": {
"content": "This post purposes to test what if I set my location in a post.",
"mediaType": "text/bbcode"
},
"attachment": [],
"tag": [],
"location": {
"type": "Place",
"name": "Seoul, South Korea",
"latitude": "37.5666791",
"longitude": "126.9782914"
},
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://venera.social/followers/hongminhee"
]
}
RE: https://venera.social/display/85a863ed-6368-115b-fd7f-671987855891
@curry박준규 아, 그리고 오늘 마침 이런 게 떴네요.
洪 民憙 (Hong Minhee) shared the below article:
places.pub
Evan Prodromou @evanprodromou@socialwebfoundation.org
I'm making an initial version of places.pub available today. places.pub is a collection of Place objects suitable for use in geosocial applications on the ActivityPub network. Part of my work in the Social Web Community Group at the W3C has been participation in the GeoSocial Task Force. This is a sub-group of the SocialCG that focuses on implementing user stories in ActivityPub related to the intersection of geographical systems and social networking, for example, tagging an image with […]
Read more →액티비티 퍼브에 Place
타입이 아마도 트위터나 페이스북에서 글을 쓸 때 현재 위치를 남기는 용도인 것 같은데 장소에도 Like
를 하면 재밌을 것 같은데 생각해보니 페이스북에 이미 있는 것 같다.
@curry박준규 어쩐지 모든 것을 다 구현하는 프로젝트인 Friendica에서는 구현했을 것 같아서 테스트해 보니, 실제로 구현하고 있네요. 제가 아래 인용한 글이 Friendica에서 위치 공유해서 쓴 글인데, ActivityPub 프로토콜에서는 아래와 같이 표현되고 있습니다:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
{
"ostatus": "http://ostatus.org#",
"vcard": "http://www.w3.org/2006/vcard/ns#",
"dfrn": "http://purl.org/macgirvin/dfrn/1.0/",
"diaspora": "https://diasporafoundation.org/ns/",
"litepub": "http://litepub.social/ns#",
"toot": "http://joinmastodon.org/ns#",
"featured": {
"@id": "toot:featured",
"@type": "@id"
},
"schema": "http://schema.org#",
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
"sensitive": "as:sensitive",
"Hashtag": "as:Hashtag",
"quoteUrl": "as:quoteUrl",
"conversation": "ostatus:conversation",
"directMessage": "litepub:directMessage",
"discoverable": "toot:discoverable",
"PropertyValue": "schema:PropertyValue",
"value": "schema:value"
}
],
"id": "https://venera.social/objects/85a863ed-6368-115b-fd7f-671987855891",
"type": "Article",
"inReplyTo": null,
"diaspora:guid": "85a863ed-6368-115b-fd7f-671987855891",
"published": "2025-04-29T23:08:45Z",
"url": "https://venera.social/display/85a863ed-6368-115b-fd7f-671987855891",
"attributedTo": "https://venera.social/profile/hongminhee",
"sensitive": false,
"conversation": "https://venera.social/objects/85a863ed-6368-115b-fd7f-671987855891#context",
"name": "Setting my location",
"content": "This post purposes to test what if I set my location in a post.",
"contentMap": {
"en": "This post purposes to test what if I set my location in a post."
},
"source": {
"content": "This post purposes to test what if I set my location in a post.",
"mediaType": "text/bbcode"
},
"attachment": [],
"tag": [],
"location": {
"type": "Place",
"name": "Seoul, South Korea",
"latitude": "37.5666791",
"longitude": "126.9782914"
},
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://venera.social/followers/hongminhee"
]
}
RE: https://venera.social/display/85a863ed-6368-115b-fd7f-671987855891
Drizzle ORM이 어서 Temporal.Instant
를 지원했으면 좋겠다. 그 전에 드라이버가 먼저 지원해야 하려나? PostgreSQL의 timestamp with time zone
타입이 나노초 정밀도인데 Date
는 밀리초 정밀도라 값이 손실되고 있다.
Programming languages should have a tree traversal primitive https://lobste.rs/s/ctopbt #programming
https://blog.tylerglaiel.com/p/programming-languages-should-have
어디 RFC 문서 의존 관계 정리된 거 없나요?
@curry박준규 혹시 말씀하신 의존 관계라는 것이 참조라는 것과는 좀 다른 걸까요? 같은거라면 요런 기능도 있는 것 같아요
어떤 싸움이 났을 때 만약 블루스카이나 X였다면 당사자들과 어울리는 맞팔들이나 조금 신경쓰지 않았을까 싶습니다. 알고리즘이 없기에 한 사건이 다른 유저들에게 일파만파 퍼지는 게 더 쉽고, 게시물의 플로우는 역설적이게도 중앙 집중형처럼 퍼지는 것 같아요. 탈중앙화 SNS인데도 불구하고, 게시판이나 포럼처럼 말입니다.
그냥 그렇다고요. 그냥 문득 떠오른 생각인데, 본 계정에 올리면 아까 한국어권 연합우주에서 일어난 것으로 보이는 어느 싸움(보지를 못해서 싸움인지, 사이버 불링인지, 아니면 아무것도 아닌지는 모르겠습니다. 그런데 뭔 일이 있었던 것 같기는 합니다.)에 신경 쓰고 싶지 않은 분들을 방해할까봐 여기에 써봅니다.
그나저나 Hackers' Pub에는 내용 경고 기능이 없는 것 같네요...?
@markeb54맹꽁이 네, Hackers' Pub에 올라오는 글들의 주제 특성상 내용 경고 기능을 쓸 일이 거의 없다고 생각해서 아직 구현하지 않았습니다. 구현 우선 순위도 좀 낮습니다.
어디 RFC 문서 의존 관계 정리된 거 없나요?
@curry박준규 그러게요. 생각해 보니 그런 게 없는 게 이상하네요. 하나 만들어 보셔도…!?
어디 RFC 문서 의존 관계 정리된 거 없나요?
UI 개발을 어렵게 만드는 가장 큰 요인은 테스트 아닐까... 비즈니스 로직이나 상태에 대한 유닛 테스트는 UI 차원에서 커버리지가 너무 낮다. E2E 테스트는 사이클이 너무 크고, 스냅샷 테스트는 시각적인 차이까지 캐치하지는 못한다.
https://github.com/denoland/fresh/pull/2253 아니 지금 보니까 작년초에 올라온 PR이었잖아...?
@perlmint 근데 Hackers' Pub은 Fresh 2.0 알파 버전을 쓰고 있어서 어떻게 될 지 모르겠네요…
@youknowone 님 어서 오세요!
10만년 만에 오픈소스 기여해봄. 러스트로 UI 개발해본건 처음인데 언어보단 UI가 더 까다로웠다 https://github.com/faiface/par-lang/pull/42
왼쪽 나 오릉쪽 홍
각자 조용히 할 일 중인데
거기서 거기임
웃겨
새 키보드는 ABKO KN03BT TKL로 정했다!
새 키보드를 산 지 며칠이나 됐다고, 오늘 또 키보드와 스위치를 샀다. 새 키보드는 FL·ESPORTS OG87, 새 스위치는 LEOBOG 세이야축.
링크 첨부때문에 가로 스크롤이 생겼었는데 언제 시라졌데요.
@lionhairdino 오늘 정오에 적용되었습니다.
뒤늦은 서울숲하스켈 조교 후기: 왠지 모르겠는데, 다들 운동을 열심히 하시는지 몸이 굉장히 좋으셨다. 건강한 신체에 건강한 정신이 깃든다를 실천하고 계신 분들이었다.
...는 농담이고(근데 사실입니다), 커리큘럼이 내가 상상하던 방향이랑은 꽤 달라서 흥미로웠다.
마지막 회차에 하스켈로 웹서버를 띄우는 것을 목표로 진행중이었는데, 이를 위해 Monad Transformer(Monad는 진즉에 해치우고), Tagless Final, Lens를 모두 소개한 상태였다. 근데 저 개념들이 '왜 하스켈에선 이거 안 돼요? 왤케 불편해요?' 같은 질문을 회피하지 않으려면 꼭 가르쳐야 하는 부분들이긴 하다. 가령, 'Monad만 배우면 이제 하스켈에서 명령형 코딩 할수 있다'라는 이야기가 이론상은 맞는데, Monad Transformer나 Algebraic Effect 같은거 안쓰면 웹사이트등 실제로 쓸모있는 프로그램을 사실상 짤수가 없다. 그래서 가르치긴 해야한다.
문제는 저걸 다 가르치려면 상당히 빡셀테니, 나는 만약에 내가 하스켈 부트캠프를 한다면 일단은 저런걸 회피하고 하스켈의 멋진 부분에 집중하는 커리큘럼을 짜야겠다고 그동안 생각했었다. 근데 또 이건 어찌보면 기만이기도 하다. 그런데 서울숲하스켈에서는 어찌저찌 다들 따라오도록 구성을 잘하신것 같다 하스켈을 이질적인(긍정적으로든 부정적으로든) 프로그래밍 언어로 소개하는게 아니라, 언젠가 본인의 작업에 활용할 언어의 후보로 올리게끔 하려면 저런 내용들을 다 다뤘어야 할것이다.
암튼 그동안 수고많으셨습니다. @eunmin은민
#ActivityPub "The Good, the Bad and the Ugly" is a good article by @dominikDominik Chrástecký - Blog
https://chrastecky.dev/technology/activity-pub-the-good-the-bad-and-the-ugly
The two mentioned examples in "The Bad" are long-time issues that were also discussed at #SocialHub. I just responded to one of them on the forum..
The #Mastodon Update(Note) quirk. https://socialhub.activitypub.rocks/t/update-note-quirk/4545/14
The other one is around Direct Messages which are a hack (a Note with special sauce). #LitePub specifies ChatMessage object type here, which is the intended way to extend the protocol. #FEP
이번 변경으로 홈 화면에 추가
로 해커즈펍을 설치하면 android, iOS 양쪽 모두, 단독 앱인 것 같은 느낌으로 쓸 수 있게됩니다. 다만, 이메일의 로그인 링크가 설치 된 쪽으로는 안열리는 문제가 있으니 미리 로그인 된 상태에서 설치를 하셔야 곤란하지 않습니다.
@hongminhee洪 民憙 (Hong Minhee) 약간 딴 얘긴데, 저는 들여쓰기가 그냥 안좋은 문법요소 같습니다. 코드의 복붙을 unreliable하게 만들어버려서요. 반대로 space sensitive한 문법은 괜찮다고 생각합니다. 복붙시 문제가 생겨도 스페이스 한번 치면 해결되니까요. 들여쓰기 대신에 {} 쌍을 쓰게 만들되, 에디터에서 보여줄때 어떻게 알아서 예쁘게 보여주는게 낫다고 생각해요.
@bglbgl gwyng 동감합니다.
저도 비슷한 생각인데, Haskell이나 Rust는 코너 케이스를 다루지 않고는 컴파일도 못 하게 금지하는 경우들이 꽤 많고 (그래서 좋은 언어지요), 빠르게 해피 패스만을 검증하고 싶을 때는 Python 같은 널널한 언어(복잡하고 규모가 큰 소프트웨어를 만들 때는 나쁜 언어가 되지요)가 쉽게 느껴질 수 있다고 생각합니다. 즉, Haskell이나 Rust가 어렵다고 말할 때의 어려움은 개념적 이해의 난도라기 보다는 시행착오의 커브의 경사를 얘기하는 것 같아요.
비슷한 측면에서 저는 Python의 들여쓰기를 강제하는 문법이 프로그래밍 초심자에게 좋은 습관을 처음부터 정착시키는 데에는 일조할 수 있겠지만, 결코 쉽지는 않다고 생각합니다.
RE: https://hackers.pub/@bgl/01967f97-67ab-7a98-a6e5-16cb3ef31856
@hongminhee洪 民憙 (Hong Minhee) 약간 딴 얘긴데, 저는 들여쓰기가 그냥 안좋은 문법요소 같습니다. 코드의 복붙을 unreliable하게 만들어버려서요. 반대로 space sensitive한 문법은 괜찮다고 생각합니다. 복붙시 문제가 생겨도 스페이스 한번 치면 해결되니까요. 들여쓰기 대신에 {} 쌍을 쓰게 만들되, 에디터에서 보여줄때 어떻게 알아서 예쁘게 보여주는게 낫다고 생각해요.
저도 비슷한 생각인데, Haskell이나 Rust는 코너 케이스를 다루지 않고는 컴파일도 못 하게 금지하는 경우들이 꽤 많고 (그래서 좋은 언어지요), 빠르게 해피 패스만을 검증하고 싶을 때는 Python 같은 널널한 언어(복잡하고 규모가 큰 소프트웨어를 만들 때는 나쁜 언어가 되지요)가 쉽게 느껴질 수 있다고 생각합니다. 즉, Haskell이나 Rust가 어렵다고 말할 때의 어려움은 개념적 이해의 난도라기 보다는 시행착오의 커브의 경사를 얘기하는 것 같아요.
비슷한 측면에서 저는 Python의 들여쓰기를 강제하는 문법이 프로그래밍 초심자에게 좋은 습관을 처음부터 정착시키는 데에는 일조할 수 있겠지만, 결코 쉽지는 않다고 생각합니다.
RE: https://hackers.pub/@bgl/01967f97-67ab-7a98-a6e5-16cb3ef31856
러스트가 어렵다는 이야기가 숙고없이 재생산 되는거 같긴 합니다. 제가 러스트를 별로 안써봐서 실제로 얼마나 어려운진 모르겠습니다.
그런데 말씀하신 모나드, 트레잇, 오너십 등의 개념들과 클래스는 좀 차이가 있다고 생각합니다. 그러니까 자바에서 클래스 때문에 어떤 코드를 못짜게 되진 않잖아요? 자바를 하면서 클래스를 제대로 쓰지않고도 뭔가 만들순 있습니다. 반면 전자의 개념들은 잘못된 코드를 짜는걸 막고, 초보자 입장에서 뭔가 하고싶은게 있는데 그게 금지되는 상황에서 어렵다는 느낌을 (필요이상으로 크게) 받을수 있다고 생각합니다.
Hackers' Pub 저장소에 보내주신 @perlmint 님과
@morealLee Dogeon 님의 CSS 및 PWA 관련 패치들이 모두 적용되어 배포까지 완료되었습니다.
- https://github.com/hackers-pub/hackerspub/pull/44
- https://github.com/hackers-pub/hackerspub/pull/45
- https://github.com/hackers-pub/hackerspub/pull/46
- https://github.com/hackers-pub/hackerspub/pull/47
여러분의 많은 기여 감사합니다. 🙏
참고로 현재 hackers.pub에 배포된 게 어떤 버전인지 알고 싶다면 https://hackers.pub/nodeinfo/2.1에 들어가셔서 software.version
을 보시면 됩니다. 버전의 마지막 부분인 빌드 넘버가 Git 커밋 해시입니다.
에디터 뭐 쓰세요...?
Vi...
vim 이요??
...sual Studio Code
#뻘글로타임라인메우기협회
fresh에서 아직 플러그인이 정적파일을 추가를 못한다고 확인을 했고, 이것에 대한 PR이 올라와 있으니, 머지되고 퍼블리시 되고나면 직접 컴파일러를 실행해서라도 Service worker, PWA 플러그인을 만들 수 있을 것 같다.
https://moreal.dev/blog/review-learning-zig/
- 요근래 안 하던 직접 메모리 할당 및 해제를 Zig하면서 해보니 Bun에서 왜 메모리 누수가 나는지 이해가 가는 부분이었다. (메모리 관리 잘 하기 어려운 것 같다)
- 컴파일 타임 코드 작성하기 편한 것은 좋았다. (comptime)
- 회고를 하며 내가 공부할 때 방황한 과정을 돌이켜 보는 것이 좋았다. "언어 철학 먼저보기"와 "표준 라이브러리에서 Write, Read 추상화하는 방식 참조하기" 정도를 먼저 하면 좋겠다는 교훈(?)을 얻었다.
- 위 글에 애자일 이야기 글 링크할 때, 애자일 이야기 검색 가능하게 만든거 잘 써서 좋았다 :D
Zig 공부 회고 |
moreal.dev
Link author: Lee Dogeon@moreal@hackers.pub
New blog post! Let's categorize our deps better with @pnpm.io catalogs!
antfu.me/posts/catego...
Categorize Your Dependencies
서울 하스켈숲 워크숍 완주했습니다...! @eunmin 님의 친절한 설명과 세심한 준비에 감사합니다 🙇
Huge respect 🫡
분명 나는 다른걸 기여하고 싶었던 것 같은데 왜 css고치고 있지...?
@perlmint 무슨 기여든 모두 감사합니다…!!
@hongminhee@hackers.pub洪 民憙 (Hong Minhee) SQLAlchemy系はAlembicを使おうとすると自動生成で外部キーの順序が間違ったテーブルを生成してきたりする (issue)のもあったり単純にPrisma (開発が終了したPrisma Client Pythonを使ってました)から入ったのが悪いんですけど使いにくいんですよね🫠
@AmaseCocoa
なるほど。それでもSQLAlchemy + Alembicに匹敵するほどの代案は中々見当たらない様ですね。🤔
@cat나는낭만고먐미 님 어서 오세요!
いいORMがにゃい
@AmaseCocoa
SQLAlchemyは気に入らないですか?
Temporal.Instant
는 나노초 정밀도를 지원한다는 것 하나만으로 Date
뿐만 아니라 JavaScript 생태계의 다른 모든 대안 시간 라이브러리가 대체할 수 없는 API라고 생각한다. 표준인데다 쓰기 쉬운 API는 덤.