Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub!

Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다.

FedifyHolloBotKit、そしてこのサイト、Hackers' Pubを作っています。

嗨,我是 FedifyHolloBotKit 以及這個網站 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

Hackers' Pub에도 팀 계정 같은 걸 만들어야 하나 싶은 생각이 가끔 드는데… 이를테면 현재로서는 Hackers' Pub 공식 계정을 깔끔하게 만들 방법이 떠오르지 않는다. 안 쓰는 메일 주소로 새 계정을 파는 식으로 해야 하는데, 별로 그런 식으로 풀고 싶지가 않다.

7

현재의 이른바 “에이전틱” 코딩 어시스턴트들은 종래의 정적 분석 기술을 활용하지 못하는데, 아마도 머지 않은 미래에 둘이 결합될 날이 올 것 같긴 하다. 다시 말해, 애초에 LLM이 컴파일조차 안 되는 코드를 뱉지는 못하게 할 수 있을 거라고 생각한다. 그 때가 되면 정말 평균적인 사람 프로그래머가 이룰 수 있는 품질의 코드를 내놓을 수 있지 않을까? 컴파일도 되고, 겉보기에는 잘 돌아가지만, 몇몇 코너 케이스에서는 여전히 깨지는… 그럼 그때는 또 LLM이 QA도 하고 코드 리뷰도 해서 고치는 미래가…!?

4
6

레코드 및 튜플 제안도 그렇고 어째서 JavaScript는 동등성 연산을 커스텀하게 구현할 수 있게 하지 않고 변죽만 울릴까? Symbol.equalitySymbol.hash 같은 거 정해주고 Map이든 Set이든 내부적으로 그거 쓰게 하면 좋을 것 같은데.

4

이것으로 BotKit 0.2.0에 넣으려고 생각했던 기능은 다 추가했다. 이대로 0.2.0 출시하면 되려나? 뭔가 놓친 게 없으려나? 🤔

2
3
3
3
9
4
2

바이브 코딩에 줄곧 Claude Sonnet 3.7만 쓰다가, 오늘 Gemini 2.5 Pro를 써 봤는데, 코딩을 더 잘 하는지는 잘 모르겠지만 응답 속도 하나만은 훨씬 빨라서 좋다. 바이브 코딩을 하다가 결국 답답함을 못 참고 내가 직접 코딩하게 되는 까닭 중 하나가 기다림의 지루함이었는데, 그 부분이 많이 완화된달까?

3

For my library and CLI projects, I've been writing documentation before writing any code. It helps me imagine the final interface early on, which usually leads to better design. Sure, sometimes I miss implementation details and have to revise later, but hey—it's just docs. Docs are easy to change.

This tiny habit has surprisingly big payoffs. When I focus on how things will be used rather than how they'll be built, I end up with interfaces that actually make sense.

Anyone else do this? Curious about your experience with documentation-first approaches.



RE: https://hollo.social/@hongminhee/01964c76-ef1e-7994-b3f0-57f967742566

8
8

살면서 RTL 언어 지원을 한 번도 해 본 적이 없어서 무섭게 느껴진다. 아마 서양 프로그래머들도 CJK 보면 이런 느낌일까?

4
6
2
4
0
1

Hackers' Pub은 현재 원격 콘텐츠에 포함된 온갖 이미지를 캐시하지 않고 원격 URL 그대로 서빙하고 있는데, 일부 ActivityPub 구현은 계정 프로필 사진이 바뀌면 기존 프로필 사진을 아예 삭제해 버려서 가끔씩 원격 계정의 프로필 사진이 로딩이 안 되고 깨지는 문제가 발생하고 있다. 음… 귀찮아서 캐시를 안 하고 있었는데 역시 캐시를 하긴 해야 하나?

2

Hackers' Pub에서는 현재 PostgreSQL 드라이버로 Postgres.js를 쓰고 있는데, 문제는 이 드라이버가 OpenTelemetry 지원하지 않는다… 수동으로라도 계측 코드를 짜려면 훅이 필요한데, 훅 API도 들어올 예정이 없다.

그래서 PostgreSQL 드라이버를 아예 node-postgres로 바꿀까 싶기도 한데, 이미 @fedify/postgres 패키지가 Postgres.js에 의존을 하고 있기 때문에 한 애플리케이션에서 두 종류의 드라이버를 쓰는 꼴이 된다. 음, 아무래도 상관 없으려나?

1
2

Deno는 console.log()에서 %c 형식 지정자를 통해 간단한 CSS를 사용할 수 있다.

console.log("%cHello World", "color: red");
console.log("%cHello World", "background-color: blue");
console.log("%cHello World", "text-decoration: underline");
console.log("%cHello World", "text-decoration: line-through");
console.log("%cHello World", "font-weight: bold");
console.log("%cHello World", "color: red; font-weight: bold");
console.log("%cHello %cWorld", "color: red", "color: blue");
console.log("%cHello World", "color: #FFC0CB");
console.log("%cHello World", "color: rgb(255, 192, 203)");

위 코드는 아래처럼 출력된다:

Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
4

I've been wrestling with implementing content support in Hackers' Pub, our -powered platform for software engineers.

While ActivityPub theoretically supports multilingual content through the contentMap property, the reality is that most server implementations (Mastodon, Misskey, etc.) don't properly handle this content as of April 2025. This creates a significant challenge for us.

We want our users to share their knowledge in multiple languages, but we need to ensure compatibility with existing ActivityPub servers. I'm considering several approaches:

  1. Creating separate posts for each language with clear language indicators, linking them through inReplyTo relationships (so translations appear as replies to the original post)
  2. Using the primary language in content while storing translations in contentMap
  3. Adding "View in other languages" links at the bottom of each post
  4. Implementing inline language dividers that degrade gracefully on non-supporting servers, for example:
    <div lang="en">
      <h3>English</h3>
      <p>This is the English content…</p>
    </div>
    <hr>
    <div lang="ko">
      <h3>한국어</h3>
      <p>한국어 내용입니다…</p>
    </div>

I'm leaning toward a hybrid approach—showing content in the user's preferred language when possible while providing easy access to other language versions.

Has anyone tackled this problem effectively? I'd love to hear about your experiences or ideas for making multilingual content work well in the fediverse, especially when dealing with server implementations that don't fully support ActivityPub's multilingual features.

11
0
0

소프트웨어 엔지니어를 위한 연합우주 서비스 Hackers' Pub을 알고 계신가요? 저희가 특별히 중요시하는 것은 다른 플랫폼과는 조금 다른 행동 강령입니다.

저희는 현실 세계의 불평등이 온라인 공간에도 그대로 반영된다는 사실을 인식하고 있습니다. 그래서 “모든 사람을 동등하게 대우”한다는 표면적인 중립성이 아닌, 구조적 불평등에 적극적으로 대응하는 자세를 분명히 하고 있습니다. 이러한 접근의 일환으로, 차별적 발언과 차별에 대항하는 발언을 구분합니다. 이를 통해 “차별은 안 된다”는 명목 하에 차별 비판까지 동일시하는 “양비론”의 함정을 피할 수 있다고 생각합니다.

기술 커뮤니티에서 자주 볼 수 있는 문제로는 특정 기술 선택에 대한 비판이나 기술 수준에 따른 계층화가 있습니다. “이것도 모르냐?”는 태도는 학습을 방해할 뿐입니다. 저희는 초보자와 경험자 모두 동등하게 존중받는 환경 조성을 중요시합니다.

또한, 연합우주의 핵심 가치로 프라이버시가 있지만, Hackers' Pub에서는 특히 익명성의 권리를 강조합니다. 타인의 신원을 특정하려는 행위나 익명이라는 이유로 차별하는 것을 금지함으로써, 안심하고 참여할 수 있는 공간을 지향합니다.

이러한 행동 강령 자체도 완벽하지 않으며, 커뮤니티와 함께 발전해 나가는 것이라고 생각합니다. 모든 구성원이 개선안을 제안할 수 있는 체계를 마련함으로써, 더 나은 환경을 함께 만들어 나가고자 합니다.

자세한 내용은 Hackers' Pub 행동 강령을 참조해 주세요. 연합우주에서 더 건강한 기술 커뮤니티를 함께 키워나가지 않으실래요?

11
0
0

그 동안에는 Mastodon 등 다른 연합우주 인스턴스에서 앙케트를 만들면 Hackers' Pub에서는 앙케트의 선택지가 보이지도 않고 참여할 수도 없었는데요, 이제 Hackers' Pub에서도 앙케트(poll)에 참여할 수 있게 되었습니다. 다만, 아직 Hackers' Pub에서 새 앙케트를 만드는 기능은 구현되지 않았습니다. 새 앙케트를 만드는 기능은 필요하다는 의견이 많으면 구현하도록 하겠습니다. 언제나 같은 패턴이지만, UI 만드는 게 힘들어서요. 😅

3
5

사소한 업데이트지만… 기존에는 다른 연합우주 인스턴스로부터 비디오가 첨부된 단문이 왔을 때 비디오는 아예 누락되었는데, 이제는 비디오의 섬네일이 보이고 누르면 비디오가 재생되도록 만들었습니다. 다만, 여전히 Hackers' Pub에서 비디오를 첨부하는 기능은 구현되지 않았습니다. (우선 순위가 낮아서 언제 구현될 지 저도 모르겠네요.)



RE: https://hollo.social/@hongminhee/01963809-041e-7b26-a242-a8e1cc4b0afc

3
2
0
1

요즘 바이브 코딩을 계속 시도해 보고 있는데, 국제화 등의 작업에서는 아주 만족스러운 반면, 다소 복잡한 과업에서는… 너무 헤매거나, 너무 오래 걸리는 것 같다. 결국 답답해서 직접 코딩하게 되는 것의 반복.

아, 일단 여태까지는 Claude Sonnet 3.7을 주로 쓰긴 했다. Gemini 2.5 Pro도 써 보긴 해야 하는데…

2

그나저나 작년 12월에 MVP로 목표했던 기능 중에 하나가 패스키였는데… 이것으로 처음 생각했던 MVP는 달성한 것 같다.

6

지금까지 Hackers' Pub은 반드시 이메일을 통해 로그인 링크를 수신하는 식으로만 로그인이 가능했는데, 사실은 많이 번거로웠죠?

이를 해결하기 위해 Hackers' Pub에 패스키 기능을 추가했습니다. 패스키 추가는 설정패스키 페이지에서 할 수 있으며, 패스키가 등록된 기기 및 브라우저에서는 로그인 페이지에서 자동적으로 패스키를 사용할 것인지 묻는 창이 뜨게 됩니다.

Hackers' Pub의 패스키 설정 페이지. 위쪽에는 패스키 등록을 위한 폼이, 아래쪽에는 등록된 패스키를 나열한 표가 보인다.Hackers' Pub의 로그인 페이지. 우측 상단에 패스키를 사용하여 로그인할 것인지 묻는 창이 보인다.
9
0
3
0
4

다른 연합우주 서버로부터 앙케트 조사를 담은 Create(Question) 액티비티가 자주 들어오고 있는데, Hackers' Pub에서도 적어도 앙케트 조사를 열 수는 없어도 참여할 수는 있게 해야 하나 고민하고 있다. 그런데 이것도 결국 UI가 귀찮은 문제인데…

3
14
0
0

Hackers' Pub은 검색에서 몇 가지 기본적인 문법들을 지원하고 있습니다. 문서화되지 않았기 때문에 한 번 정리해 봅니다.

문법 설명 예시
" 키워드 " 따옴표 안에 들어간 문자열을 띄어쓰기를 포함하여 찾습니다.
대소문자는 구분하지 않습니다.
(따옴표 안에 따옴표를 넣으려면 \"와 같이 이스케이프.)
"Hackers' Pub"
from: 핸들 해당 사용자가 쓴 콘텐츠만 추립니다. from:hongminhee
from:hongminhee@hollo.social
lang: ISO 639-1 해당 언어로 쓰여진 콘텐츠만 추립니다. lang:ko
# 태그 해당 태그가 달린 콘텐츠만 추립니다.
대소문자는 구분하지 않습니다.
#Fedify
조건 조건 띄어쓰기 양 옆의 조건을 모두 만족하는 콘텐츠만 추립니다(논리곱). "Hackers' Pub" lang:ko
조건 OR 조건 OR 연산자 양 옆의 조건 중 하나라도 만족하는 콘텐츠를 추립니다(논리합). 해커즈퍼브 OR "Hackers' Pub" lang:ko
( 조건 ) 괄호 안의 연산자들을 먼저 결합합니다. (해커즈퍼브 OR 해커즈펍 OR 해커스펍) lang:ko

구체적인 동작 방식은 Hackers' Pub 소스 코드를 보시면 더 자세히 알 수 있습니다.

4
3

드디어 @xtjuxtapose 님이 기다리시던 차단 기능이 구현되었습니다. 차단할 사용자의 프로필 페이지에 가서 팔로·언팔로 버튼 오른쪽에 보이는 말줄임표 아이콘에 마우스 커서를 갖다 대면 (모바일에서는 터치하면) 상세 메뉴가 나오는데, 그 안에 팔로워 삭제 버튼과 차단 버튼이 생겼습니다.

ActivityPub 프로토콜 수준에서는 차단은 Block 액티비티를 차단한 액터에게 보내며, 차단을 해제할 경우 Undo(Block) 액티비티를 보냅니다. 그러나, 그 액티비티를 받은 인스턴스의 구현이 차단한 사용자의 콘텐츠를 볼 수 없도록 막지 않을 수도 있습니다…만, 실질적으로는 모든 구현이 막고 있습니다. 아, 당연하지만 차단은 자동적으로 상호 언팔로를 수행합니다. 차단을 해제하더라도 풀렸던 팔로 관계는 자동적으로 회복되지 않습니다.

언팔로 버튼 오른쪽에 말줄임표 모양의 아이콘이 보이며, 그 아래 드롭다운 메뉴가 보인다. 드롭다운 메뉴에는 팔로워 삭제 버튼과 차단 버튼이 보인다.
12

Hackers' Pub에 차단 구현하면서 지금 만들고 있는 코드인데… fromAccountToTarget/fromTargetToAccount 말고 좀 더 짧으면서 좋은 이름이 없을까? 🤔

export type RelationshipState =
  | "block"
  | "follow"
  | "request"
  | "none";

export interface Relationship {
  account: Account & { actor: Actor };
  target: Actor;
  fromAccountToTarget: RelationshipState;
  fromTargetToAccount: RelationshipState;
}
2
3

차단 기능의 밑작업으로… 차단 당하는 기능을 만들었습니다. Hackers' Pub 사용자 여러분은 이제 연합우주 내 다른 인스턴스의 사용자로부터 차단 당할 수 있습니다. ActivityPub의 Block 액티비티 및 Undo(Block) 액티비티를 수신하고 처리할 수 있게 되었다는 뜻입니다. 하지만 아직 차단을 하는 건 안 됩니다. 오늘은 일단 여기까지 하기로 하고… 차단 기능은 아마 내일이나 완성될 것 같군요.

5
3