hackers.pub 계정이 아닌 마스토돈 계정 같은것도 여기서 팔로우가 되는건가? 아직 개념이 잘 안 잡히네 ㅎㅎ
洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 1018 following · 727 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
@smartbosslee이현석 네, 맞습니다! 이른바 연합우주(fediverse)라고 하는 건데, 그 안에 Hackers' Pub도 있고 Mastodon도 있고 Meta의 Threads도 있고… 그렇습니다. 그들 사이에 서로 팔로도 되고 댓글도 달리고… 상호작용이 가능해요. 자세한 것은 제가 쓴 연합우주(fediverse)와 ActivityPub 프로토콜 이해하기: 개발자를 위한 가이드를 한 번 읽어보시기 바랍니다!
@smartbosslee이현석 이미지를 업로드하려니 Alt text가 필수여서 ChatGPT 한테 써달라고 해줌. 자동으로 작성해주는 기능이 들어가도 좋을거 같다.
@smartbosslee이현석 오, 좋은 아이디어네요. 조만간 구현해 보도록 할게요!
오늘의 일기
- 웜업/쿨다운 포함해서 50분 인터벌 달리기를 했다. 그리고 집 돌아오는 길에 종아리에 쥐나서 길거리에 주저앉을 뻔했다. 슬슬 런데이 아저씨가 미워지는 구간에 진입 중.
- GitHub Pages 에서 Netlify 로 무사히 이관했다. 다음 목표는 카테고리 별로 볼 수 있게 내비게이션 바 만들고 RSS 피드 깨진 거 원인 파악해서 고치기.
- 네이버 블로그 백업용으로 GitHub Pages 를 만들면서 당시에 썼던 독서/영화 기록에 네이버 책/영화 서비스 링크를 전부 달아뒀었는데, 이번에 Netlify 로 옮기면서 전부 지웠다. 당시엔 하이퍼링크를 걸어두는 쪽이 더 범용성 있을 거라고 생각했는데 네이버 영화 서비스가 문 닫을 줄 누가 알았겠어요. 블로그로 정확히 뭘 하고 싶은지 목표가 뚜렷해야 이런 실수를 안 할 텐데, 장기적인 목표는 좀 더 천천히 생각해 봐야 할 거 같다.
- 내 포스트를 공유한 사람 목록을 보고 싶은데 아직은 방법이 없는듯.
- 블루스카이와 타임라인을 연결하고 싶은데 계정을 만든지 7일이 지나야 가능한 거 같다.
@linear 저도 누가 공유했는지 보고 싶어서 조만간 기능을 추가할 것 같습니다… 써 주셔서 고맙습니다!
오늘의 일기
- 웜업/쿨다운 포함해서 50분 인터벌 달리기를 했다. 그리고 집 돌아오는 길에 종아리에 쥐나서 길거리에 주저앉을 뻔했다. 슬슬 런데이 아저씨가 미워지는 구간에 진입 중.
- GitHub Pages 에서 Netlify 로 무사히 이관했다. 다음 목표는 카테고리 별로 볼 수 있게 내비게이션 바 만들고 RSS 피드 깨진 거 원인 파악해서 고치기.
- 네이버 블로그 백업용으로 GitHub Pages 를 만들면서 당시에 썼던 독서/영화 기록에 네이버 책/영화 서비스 링크를 전부 달아뒀었는데, 이번에 Netlify 로 옮기면서 전부 지웠다. 당시엔 하이퍼링크를 걸어두는 쪽이 더 범용성 있을 거라고 생각했는데 네이버 영화 서비스가 문 닫을 줄 누가 알았겠어요. 블로그로 정확히 뭘 하고 싶은지 목표가 뚜렷해야 이런 실수를 안 할 텐데, 장기적인 목표는 좀 더 천천히 생각해 봐야 할 거 같다.
- 내 포스트를 공유한 사람 목록을 보고 싶은데 아직은 방법이 없는듯.
- 블루스카이와 타임라인을 연결하고 싶은데 계정을 만든지 7일이 지나야 가능한 거 같다.
현재 Hackers' Pub의 안 좋은 UI로 인해 많은 분들이 알아채지 못하시는 듯하여…
- Hackers' Pub에는 X처럼 단문을 올리는 용도의 노트와 velog처럼 긴 글을 올리는 용도의 게시물이 나뉘어 있습니다.
- 노트든 게시물이든 타임라인에 뜨는 것은 같지만, 둘의 모양이 조금 다릅니다. 둘 다 Markdown을 지원하는 것은 같습니다.
- 노트는 첫 화면 타임라인 맨 위에 있는 UI로 작성합니다. (이건 다들 이미 아실 듯.)
- 게시물은 우상단 본인 계정명에 마우스 커서를 가져다 대면 나오는 메뉴 속 새 게시물 항목을 누르면 작성하실 수 있습니다.
- 게시물은 작성하던 도중 페이지를 닫더라도 임시 보관함에 자동으로 저장되므로 나중에 다시 이어서 쓸 수 있습니다.
아직 한창 만드는 중이라 여러모로 미흡합니다. 빠른 시일 내에 UI를 개선하도록 할게요!
@hongminhee洪 民憙 (Hong Minhee) 노트를 쓰는 방법은 알겠는데 게시물은 어떻게 쓰는 건가요? 저는 노트를 특정 길이 이상 쓰면 게시물이 된다고 생각했는데 설명해주신 것을 보니 그건 아닌 것 같네요.
@curry박준규 아, 우상단에 있는 본인 계정명 위에 마우스 커서를 갖다 대면 메뉴가 뜨는데, 거기서 “새 게시물”을 누르면 새 게시물 작성이 가능합니다. 이거, 안 그래도 여러 분들께 지적 받고 있는 내용이라 UI를 어서 바꿔야겠네요.
@hongminhee洪 民憙 (Hong Minhee) 2018년에 해키지에 업로드된 activitypub이라는 패키지가 있긴 합니다. 사실 activitypub을 바로 도전하기는 무서워서(?) webfinger 같은 걸 먼저 작게 구현하면 어떨까 생각만 해봤습니다.
@curry박준규 아니면 Mastodon 봇 같은 걸 만들어 보셔도 좋을 것 같네요!
해커스펍에서 노트와 게시물은 어떻게 다른가요? 작성한 글의 길이에 따라 구분되는 걸까요?
@curry박준규 용도상으로는 말씀하신 것처럼 노트는 X처럼 짧은 글을 공유하라고 만든 기능이고, 게시물은 velog처럼 긴 글을 공유하라고 만든 기능입니다. 읽을 때 UI도 좀 달라요. 각 용도에 좀 더 최적화된 UI입니다. 그리고 게시물은 기억하기 쉬운 퍼머링크(고유 URL)를 가진다는 차이도 있고요. 그렇지만 노트에 긴 글을 써도 되고 게시물로 짧은 글을 써도 되긴 합니다.
@hongminhee洪 民憙 (Hong Minhee) 감사합니다! 해커스펍에서는 다른 사람의 글에 ‘좋아요’를 누를 수 있나요? ‘조용히 공개’는 뭔가요?
@curry박준규 좋아요 기능은 조만간 구현할 예정입니다! 아직은 없어요. 😭 “조용히 공개”는 “공개”와 거의 같은데 전체 타임라인(로그인 안 했을 때 첫 화면에서 보이는 타임라인)에 안 뜬다는 차이가 있습니다.
저도 뭔가 연합우주 생태계에 코드로(이왕이면 하스켈로) 기여하고 싶은데 무엇을 하면 좋을까요?
@curry박준규 그러게요. ActivityPub 구현을 Haskell로 해 본다거나…?
해커스펍 가입 기념으로 하스켈 코드 하나 적습니다!
main = putStrLn "Hello, Hackers' Pub!"
@curry박준규 반갑습니다! 어서오세요〜!
해커스펍 가입 기념으로 하스켈 코드 하나 적습니다!
main = putStrLn "Hello, Hackers' Pub!"
Hello, HP!
【輪読会試験開催のお知らせ】
#FediLUG :fedilug: 輪読会📖第0弾として
「〜自分でActivityPub対応SNSを作ってみよう〜『自分だけのフェディバースのマイクロブログを作ろう!』輪読会」
https://github.com/dahlia/fedify-microblog-tutorial-ja
を行います!申し込みは以下からできます!ぜひ参加してフィードバックをください!!
https://fedilug.connpass.com/event/348240/
그러고 보니 DEV Community, Qiita, Zenn, velog 임포터도 만들어야 하는데…
음… 일본어권 타임라인 때문에 민감한 미디어 가리는 기능 어서 만들어야겠다.
feat(otel): Add OpenTelemetry middleware by dahlia · Pull Request #901 · honojs/middleware
中国語翻訳も追加したいけど、私の中国語力ではまだ力不足だ…
そういえば、DEV Community、Qiita、Zenn、velogインポーターも作らないといけない…
중국어 번역도 추가하고 싶긴 한데, 나의 중국어 실력이 아직은 역부족이다…
그러고 보니 DEV Community, Qiita, Zenn, velog 임포터도 만들어야 하는데…
Whew that was a lot for a Sunday afternoon: Implementing the usage of Access Grants for OAuth in @holloHollo
It's not done yet, but it's showing promise.
Previously @holloHollo
used cryptography for authorization codes and access tokens, this had some implications such as preventing us from implementing PKCE, which requires state to be tracked between the authorize screen and the authorization code token exchange.
So this paves the path to supporting PKCE in Hollo.
Whew that was a lot for a Sunday afternoon: Implementing the usage of Access Grants for OAuth in @holloHollo
It's not done yet, but it's showing promise.
@fedifyFedify: ActivityPub server framework How many queues do you use? Is it based on any mathematical rules like number of users vs cpu cores, or memory requirements? Do you always spin up a new queue or cap the number and reuse the resources as they come available?
@PossiblyMaxMax Great question about our queue implementation! Fedify doesn't actually create separate physical queues, but rather uses a single logical queue where each message contains its own destination information.
For resource management, we generally rely on the underlying queue implementation (Redis, PostgreSQL, etc.) to handle concurrent processing efficiently. Since version 1.0.0, we've introduced ParallelMessageQueue which processes multiple messages concurrently with a configurable worker count—usually set close to your CPU core count for IO-bound operations.
We don't spin up new queues dynamically; instead, we focus on making the message processing scalable. You can control the parallelism level when using ParallelMessageQueue, and for high-volume instances, you can horizontally scale by running multiple worker processes that connect to the same shared queue backend.
This approach keeps the architecture simpler while still allowing for good throughput and resource utilization that can scale with your instance size.
Just released @fedify/markdown-it-mention v0.3.0! This update adds support for bare handles (e.g., @username without domain) with the new localDomain option, allowing you to specify the domain for these shortened mentions.
Install via npm, Bun, or Deno:
npm add @fedify/markdown-it-mention@0.3.0
bun add @fedify/markdown-it-mention@0.3.0
deno add jsr:@fedify/markdown-it-mention@0.3.0
@FediChatBot Hello from Hackers' Pub! Hackers' Pub is an ActivityPub-enabled blogging platform for software engineers. You can think of it as a Fediverse version of DEV.to. As such, I'm communicating with you through ActivityPub.
Hackers' Pub is still in development, but it is also open-sourced under the AGPL-3.0 license, so anyone can participate in the development.
What do you think of the future of Hackers' Pub? How does it compare to DEV.to, Qiita/Zenn in Japan, velog in Korea, etc.? Do you think it is competitive?
해커스펍! 흥한다!
어젯밤 데비안 패드 벽돌 될 것 감수하고 데비안 12로 업그레이드했는데 생각보다 문제 없이 잘 돼서 신남! ^ㅁ^ 전부터 느끼지만 그놈 데스크톱 환경은 예상 외로 터치 친화적인데... 터치로 쓰는 사용자가 생각보다 많은 걸까?
팔로워만 볼 수 있는 글 테스트 4. 잘 보이나요?
Vim 컨퍼런스 주최를 위해 사전조사를 하고 있습니다 많관부
Hackers' Pub 쓰고 계신 분들 중에서, 자신의 Hackers' Pub 계정을 연합우주(fediverse)뿐만 아니라 Bluesky에도 노출하고 그쪽 사람들과 교류하고 싶으신 분이 있다면, 상단 검색창에 @bsky.brid.gy@bsky.brid.gy을 검색하셔서 나오는 프로필을 팔로해 보세요. 그리고 1분 정도 뒤에 Bluesky에서 본인ID.hackers.pub.ap.brid.gy로 검색하면 본인의 Hackers' Pub 계정이 Bluesky에서도 보이는 걸 확인하실 수 있을 겁니다.
ここがHacker's Pubちゃんですか
@yamanokuやまのく Hackers' Pubへようこそ〜
ここがHacker's Pubちゃんですか
昨日と今朝は主にバグ修正だけだった。
- 非公開の投稿は共有を出来なくした
- Markdown のレンダリングで GitHub スタイルのコールアウトのバグを修正
AUTHORIZED_FETCHが適用されたインスタンスからノートオブジェクトのリクエストを受けた時、無条件に401が出るバグ修正(Fedifyまでまとめて修正…)- 脚注リンクが動かないバグ修正
- 他の人のDMがタイムラインに表示されるバグを修正
- ファビコン追加
中国語翻訳も追加したいけど、私の中国語力ではまだ力不足だ…
어제랑 오늘 오전은 주로 버그 수정만 했다.
- 비공개 게시물은 공유 못 하게 막음
- Markdown 렌더링에서 GitHub 스타일 콜아웃 버그 고침
- AUTHORIZED_FETCH 적용된 인스턴스로부터 노트 객체 요청 받았을 때 무조건 401 떨어지던 버그 수정 (Fedify까지 덩달아 수정…)
- 각주 링크 작동 안 하던 버그 고침
- 다른 사람 DM이 타임라인에 뜨던 버그 고침
- 파비콘 추가
중국어 번역도 추가하고 싶긴 한데, 나의 중국어 실력이 아직은 역부족이다…
えーと…Hackers' Pubの上部のナビゲーションバーのデザインを改善する必要が有るけど、どの様に改善すれば良いのか分からない。
昨日と今朝は主にバグ修正だけだった。
- 非公開の投稿は共有を出来なくした
- Markdown のレンダリングで GitHub スタイルのコールアウトのバグを修正
AUTHORIZED_FETCHが適用されたインスタンスからノートオブジェクトのリクエストを受けた時、無条件に401が出るバグ修正(Fedifyまでまとめて修正…)- 脚注リンクが動かないバグ修正
- 他の人のDMがタイムラインに表示されるバグを修正
- ファビコン追加
아, 생각해 보니 RSS도 추가해야겠다.
어제랑 오늘 오전은 주로 버그 수정만 했다.
- 비공개 게시물은 공유 못 하게 막음
- Markdown 렌더링에서 GitHub 스타일 콜아웃 버그 고침
- AUTHORIZED_FETCH 적용된 인스턴스로부터 노트 객체 요청 받았을 때 무조건 401 떨어지던 버그 수정 (Fedify까지 덩달아 수정…)
- 각주 링크 작동 안 하던 버그 고침
- 다른 사람 DM이 타임라인에 뜨던 버그 고침
- 파비콘 추가
@noellaboのえる whats your new handle?
@liaizonwakest ⁂ His handle on Hackers' Pub is @noellaboのえる.
궁금해 하실 분들이 계실지 모르겠지만, Hackers' Pub은 아래의 기술로 만들어지고 있습니다.
- 백엔드 JavaScript 런타임으로 Deno (Node.js를 안 씁니다)
- 데이터베이스로 PostgreSQL
- 웹 프레임워크로 Fresh 2.0[1]
- ORM으로 Drizzle ORM
- 캐시 저장소로 Redis
- ActivityPub 연합을 위해 Fedify
- 로깅 라이브러리로 LogTape
- 웹 프런트엔드 프레임워크로 Preact
- 스타일링에 Tailwind CSS
- 국제화에 i18next
2025년 3월 현재 Fresh 2.0은 정식 버전이 릴리스되지 않은 상태인데, 무시하고 불안정 버전을 그대로 쓰고 있습니다. Fresh 1.0 → 2.0에서 많은 게 바뀌기 때문에 굳이 Fresh 1.0을 쓰고 싶지 않았습니다. ↩︎
気になる方がいるか分かりませんが、Hackers' Pubは下記の技術で作られています。
- バックエンドのJavaScriptランタイムとしてDeno(Node.jsは使わない)
- データベースとしてPostgreSQL
- ウェブフレームワークとしてFresh 2.0[1]
- ORMとしてDrizzle ORM
- キャッシュストレージとしてRedis
- ActivityPub連合の為のFedify
- ロギングライブラリとしてLogTape
- WebフロントエンドフレームワークとしてPreact
- スタイリングにTailwind CSS
- 国際化にi18next
2025年3月現在Fresh 2.0は正式版がリリースされていない状態ですが、無視して不安定なバージョンを使っています。Fresh 1.0→2.0で色々変わったので、あえてFresh 1.0を使いたくなかったです。 ↩︎
궁금해 하실 분들이 계실지 모르겠지만, Hackers' Pub은 아래의 기술로 만들어지고 있습니다.
- 백엔드 JavaScript 런타임으로 Deno (Node.js를 안 씁니다)
- 데이터베이스로 PostgreSQL
- 웹 프레임워크로 Fresh 2.0[1]
- ORM으로 Drizzle ORM
- 캐시 저장소로 Redis
- ActivityPub 연합을 위해 Fedify
- 로깅 라이브러리로 LogTape
- 웹 프런트엔드 프레임워크로 Preact
- 스타일링에 Tailwind CSS
- 국제화에 i18next
2025년 3월 현재 Fresh 2.0은 정식 버전이 릴리스되지 않은 상태인데, 무시하고 불안정 버전을 그대로 쓰고 있습니다. Fresh 1.0 → 2.0에서 많은 게 바뀌기 때문에 굳이 Fresh 1.0을 쓰고 싶지 않았습니다. ↩︎
Hackers' Pub 쓰고 계신 분들 중에서, 자신의 Hackers' Pub 계정을 연합우주(fediverse)뿐만 아니라 Bluesky에도 노출하고 그쪽 사람들과 교류하고 싶으신 분이 있다면, 상단 검색창에 @bsky.brid.gy@bsky.brid.gy을 검색하셔서 나오는 프로필을 팔로해 보세요. 그리고 1분 정도 뒤에 Bluesky에서 본인ID.hackers.pub.ap.brid.gy로 검색하면 본인의 Hackers' Pub 계정이 Bluesky에서도 보이는 걸 확인하실 수 있을 겁니다.
블루스카이 여러분들 하위하위
Node.js滅びてくれ
使いにくすぎる
@hongminhee洪 民憙 (Hong Minhee) 두 번 시도해서 두 번 다 타임아웃 났었는데 지금 하니까 되네요 (..) 일시적인 딜레이였던 거 같습니다.
@linear 다행입니다!
앱 개발 일만 8년간 한 사람 오늘 드디어 웹 개발 시작한다 시작은 역시 hello world 부터라고 생각합니다 netlify 가입했고 세팅했고 index.html 잘 나오는 거 확인했으니까 오늘은 여기서 끝!
프로필 링크에 아무거나 막 넣을 수 있는 게 아닌 걸까? 네이버 블로그 URL 을 넣었더니 타임아웃이 난다(..)
@linear 어라, 그건 버그 같네요! 혹시 재시도 해보셔도 안 되나요?
hackers.pub 모바일 앱이 있으면 좋겠다 일단 iOS 개발자가 손을 들어봅니다 ㅋㅋ
@linear 그러게요, 모바일 앱을 하나 만들어야 할 것 같아요. 근데 아직 웹에서 모바일 뷰도 제대로 안 되어서… 그것부터 좀 잘 만들어 두려고요!
@linear 마크다운이 먹는다니 감격스러워 ㅠㅠ
hackers.pub 모바일 앱이 있으면 좋겠다 일단 iOS 개발자가 손을 들어봅니다 ㅋㅋ
Got an interesting question today about #Fedify's outgoing #queue design!
Some users noticed we create separate queue messages for each recipient inbox rather than queuing a single message and handling the splitting later. There's a good reason for this approach.
In the #fediverse, server response times vary dramatically—some respond quickly, others slowly, and some might be temporarily down. If we processed deliveries in a single task, the entire batch would be held up by the slowest server in the group.
By creating individual queue items for each recipient:
- Fast servers get messages delivered promptly
- Slow servers don't delay delivery to others
- Failed deliveries can be retried independently
- Your UI remains responsive while deliveries happen in the background
It's a classic trade-off: we generate more queue messages, but gain better resilience and user experience in return.
This is particularly important in federated networks where server behavior is unpredictable and outside our control. We'd rather optimize for making sure your posts reach their destinations as quickly as possible!
What other aspects of Fedify's design would you like to hear about? Let us know!



