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

For those interested in supporting 's development, we do have an Open Collective page where community is welcome.

Even small contributions help sustain development and show there's interest in open source tools. Thanks to our existing sponsors who've already been helping move the project forward!

The goal remains the same: make building federated applications more accessible to developers so the can continue to grow and thrive.

tl;dr: 지금 SKT 놈들이 복제폰 안된다 운운하는 거 믿지 말고 심 카드 교체하십쇼. 심 카드 초기화는 제가 얘네가 진짜 키를 바꾸는지를 아직 검증 못해서 확답은 못드림.

예전부터 말해왔지만

* IMEI - 단말기 고유번호 - Not-so-secret number
* IMSI - 가입자 고유번호 - 역시 Not-so-secret number
* Ki/OPc/etc... - 심 카드 인증 키 - 이거 털리면 게임 오버

고, IMEI 와 IMSI "누출"은 프라이버시 이슈로 연결되지(속칭 스팅레이, IMSI-Catcher) 모바일 네트워크 무결성 침해로 이어지지 않음.

IMEI 와 IMSI 를 가지고 할 수 있는 게 뭐냐... 강남 한복판에서 마법 지팡이를 들고 님이 강남 어디에 있는지를 찾아내는 것 정도?

IMSI - Ki/OPc 쌍을 가지고 할 수 있는 건? 망에 그 정보로 인증 붙여서 "난 너야" 시전하기.

0
0
0

최근에 마주친 문제/주제들이 우연히 다들 '양방향' 이란 개념과 관련이 있다. 아래는 거기 관련된 러프/나이브한 생각들이다.

세션 타입

이건 노골적인 예시인데, 말그대로 서버/클라가 양방향으로 통신하는걸 기술하게 해준다.

Propagator

대부분의 프로그래밍 언어에서 x = 3 + 2과 같은 우변을 계산해서 좌변의 기호에 할당하는 기능을 제공한다.

그런데 3 = x + 2 라고 썼을때 x = 1을 해주는 언어는 거~의 없다. 이런 기능이 왜 필요하냐는 의문이 들 수 있지만, 이런 방식을 간접적으로 다들 매일 쓰고 있다. 예컨데 패키지 버전 관리를 생각해보자.

foo: >= 2.0.0
bar: =< 3.1.0 

이런 식의 설정 파일을 만지작 거릴텐데, 사실 foo >= 2.0.0, bar =< 3.1.0, ... 같은 부등식을 기술하고 있는 셈이다. 여기서 barfoo를 의존성으로 가지면 문제가 좀더 복잡해진다. 패키지 매니저는 조건을 만족하는 foo, bar의 값을 알아서 계산해준다.

요지는, 구체적인 값 대신에 조건을 나열하는 방식은 이미 다들 쓰고 있다는 얘기다. 그리고 패키지 매니징이 아닌 다른 문제에서도 이 방식이 좋은 경우는 흔하지만, 조건을 풀어서 값을 구하는 부분을 짜는게 까다로워서 도입하기 쉽지 않다.

여기서 양방향과 관련된 부분은 좌변과 우변의 정보 교환이다. x = 3 + 2x <= 3 + 2로, 우변의 정보가 일방적으로 좌변으로 간다고 볼수 있다. 반면 3 = x + 2는 좌변의 정보가 우변으로 가야한다.

x + 1 = y - 3란 예시를 보자. 이 식만 가지고는 x, y의 값을 구할 수 없다. 하지만 x = 3이란 정보가 들어오면 y = 4란걸 알 수 있고, 반대로 y = 5란 정보가 들어오면 x = 1인걸 알 수 있다. 이런 양방향 정보교환을 기술할수 있게 해주는것이 Propagator 패턴이다. Propagator 자체도 세션 타입과 뭔가 관련이 있을거 같은데, 뭐 찾아보면 오히려 서로 관련 없는게 없으니 일단 패쓰.

프로그래밍에서의 타입

모든 프로그래밍 언어는 메타프로그래밍이 가능하고, 대부분의 프로그래밍 언어는 메타프로그래밍을 할 자격이 없다. 나는 그중에서도 특히 자격이 없는 언어인 Nix로 메타프로그래밍을 하는 상황에 쳐해있다. Nix의 특성상 나뿐 아니라 다른 많은 Nix 유저들이 자연스레 이 토끼굴에 빠진다.

Nix의 에러메시지는 읽기가 참 힘든데, 기능이 매우 부족한 언어에다가 여러 개념을 새로 구현해서 얹어놔가지고, 긴 스택트레이스 중에 내가 관심있는 부분은 끝의 일부인데 거기까지의 흐름을 따라가려면 앞의 상관없는 코드도 대충은 이해해야한다. 이게 양방향 정보 교환이 잘 안되고 있는 부분이다.

알다시피 함수 자체는 단방향 정보이다. 스택트레이스는 함수를 통한 단방향 정보의 전달 과정을 보여준다. 그리고 개발자는 그걸 반대로 뒤집은 형태를 분석해야 하는 상황에 놓인다. 이게 개발자 <=> 코드 의 양방향 정보교환의 수단이 제공되지 않아서 생기는 문제다.

개발자 <=> 코드의 양방향 정보코드의 대표적인 수단은 타입이다. 타입은 코드가 스스로를 변호하고, 개발자의 잘못된 변경으로부터 방어하도록 해준다. 대부분의 언어가 메타프로그래밍을 할 자격이 없다는 얘기가, 코드 생성이라는 개발자 -> 코드의 단방향 정보전달만 기술하고 반대로 코드 -> 개발자 방향의 정보를 모조리 잃어버리는 형태로 이루어지기 때문이다.

그런데 타입안전한 메타프로그래밍은 그자체로 어려운 문제이고 아직은 연구주제에 가깝다고 알고있다. 혹시 그냥 개발자에게 뭔가 알려줄수있는 방법 자체를 primitive로 가질 순 없나? 그게 결국 타입이랑 똑같은 것일까? 여기에 TypeScript에서의(역시!) 무근본한 트릭이 소개되어있는데, 약간 관련있을지도 모른다.

7

안녕하세요, 여러분.

해커스펍에 들어온 시점 전후로 건강에 문제가 생겨 이제야 hello world 메시지를 남기네요. 초대해주신 @hongminhee洪 民憙 (Hong Minhee) 님 고맙습니다.

애호하고 선호하는 프로그래밍 언어는 Python이고 Back-end 직군이 본진이지만, 그때 그때 엔지니어링에 필요한 직군에서 필요한 도구를 써서 개발해요. 현재는(2025년 5월 기준) 프리랜서로 일하고 있습니다.

개발 외엔 글쓰기, 글짓기를 좋아해서 글로 먹고 살 방법도 모색하고 있어요.

잘 부탁드리며, 또 뵈어요.

8
0

I implemented data redaction for today. The feature will be available through a dedicated package called @logtape/redaction (JSR & npm). It provides two complementary approaches to protect sensitive information in your logs:

  1. Pattern-based redaction: Uses regex patterns to identify and mask sensitive data in formatted log output
  2. Field-based redaction: Redacts properties by field names in structured log data

Looking forward to releasing this with LogTape 0.10.0 soon!

0

洪 民憙 (Hong Minhee) shared the below article:

FEP-82f6: Actor statuses

Gregory @grishka@socialhub.activitypub.rocks

This proposal describes an ActivityPub extension to allow actors to publish a short status text, with optional expiration, link attachment, and history.

Some centralized communication services provide their users with the ability to set a status on their account, which is usually displayed on their profile and sometimes next to their name in other places in the UI. These are distinct from regular posts because they can not be interacted with in any way whatsoever, can't contain media attachments, and usually have a short character limit on the order of several hundred characters at most. Statuses are always visible to anyone who can see the actor itself.

https://codeberg.org/fediverse/fep/src/branch/main/fep/82f6/fep-82f6.md

Read more →
3

‘그냥 tryAny 쓰면 예외는 다 잡을 수 있는 거 아닌가? 왜 ResourceT를 써야 하지?’라고 생각했는데 찾아보니 tryAny로는 비동기 예외를 잡을 수 없다고 한다.

writeGreetingSafeAttempt :: IO ()
writeGreetingSafeAttempt = do
  dir <- getDataDir
  h <- IO.openFile (dir </> "greeting.txt") WriteMode
  _ <- tryAny do
    IO.hPutStrLn h "hello"
    IO.hPutStrLn h "world"
  IO.hClose h
4
8
1

프론트엔드 개발을 한 6년정도 하면서 생긴 아직 풀리지 않은 의문으로, 템플릿과 공식 문서에선 그렇게 세련되고 예쁜 컴포넌트들이 왜 import해서 내 프로젝트에서 쓰면 개촌스럽고 못생겨지냐는 것이 있다.

5
2
5

Good news! We've officially added support to the roadmap. We've created a detailed issue to track our implementation plan: https://github.com/fedify-dev/fedify/issues/233.

The effort will be tackled in phases, including compatibility assessment, core adaptations for Workers' environment, KV store and message queue implementations, and finally integration with Cloudflare's ecosystem. This will be a substantial project that we'll break down into several sub-issues.

If you're interested in contributing to any specific aspect of Workers support, please comment on the main issue to coordinate efforts.

0
4
1
2
5
4

洪 民憙 (Hong Minhee) shared the below article:

데이터 효율성으로 본 AI와 인간의 비교

bgl gwyng @bgl@hackers.pub

이 글은 AI와 인간의 능력 비교에서 데이터 효율성의 중요성을 강조하며 시작합니다. 현재 AI는 인간에 비해 데이터 효율성이 떨어지지만, 일단 학습된 능력은 복제 가능하다는 점을 지적하며 콜센터 직원과 같은 직업군에 대한 위협은 여전하다고 설명합니다. 데이터 효율성이 중요한 경영인과 연구자는 AI를 유용한 도구로 활용할 수 있지만, 인간의 데이터 효율성이 정말 높은지에 대한 의문을 제기합니다. Yann Lecun의 주장을 인용하여 인간이 받아들이는 데이터 양이 AI 학습에 쓰이는 양보다 적지 않음을 언급하며, 인간은 데이터를 있는 그대로 학습하지 않고 편향에 기반하여 학습한다는 흥미로운 주장을 제시합니다. 마지막으로, AI에게 인간처럼 무모한 결론을 내리도록 가르치는 것이 옳은지에 대한 질문을 던지며, 압도적인 양의 데이터를 통해 더 많은 진실을 알아낼 수 있는지에 대한 고민으로 마무리합니다. 이 글은 AI 개발 방향에 대한 새로운 시각을 제시하며 독자에게 깊은 생각거리를 제공합니다.

Read more →
8
3
7
1
1

구글이 AlphaEvolve란걸 내놨는데, AI로 새로운 알고리즘을 찾아내서 구글 인프라에 적용시켰다고 한다.

논문을 보니 Gemini 2.0 기반으로 했다는데, 몇번 채팅으로 시험해봤을때 인상적이지 않았던 2.0으로도 이런 결과를 낼수 있다는게 놀랍다. 새로 나온 훨씬 똑똑한 2.5로 하면 어떤 결과가 나올까?

AI의 재귀적 자기 개선이 먼 미래의 일이었던 과거에는, 이런식의 자기 개선 시작되면 그땐 정말로 게임오버일거라고 생각했었다. 아마 나말고도 많은 사람이 그랬을 것이다. 근데 막상 자기 개선이 시작되고나니 이 속도를 어떻게 평가해야할지 모르겠다. 사실 구글이 AI를 통해 인프라를 개선한게 이번이 처음은 아니고 한 3년전부터 있던일이다. 지금 이게 얼마나 빠른거야?

6

FEPs, SLEPs, APEs, AIPs, PEEPs, CEPs, SKIPs, SPECs, TIPs, CFEPs, NEPs, JEPs, BIPs, DEPs, DEPs, KEPs, JEPs, WEPs, IPEPs...

A lot of projects name proposals after PEPs rather than RFCs.

What are they? Where did PEPs come from? Here's @fluflThe FLUFL on the origin!

hugovk.dev/blog/2025/peps-and-

2

@hongminhee洪 民憙 (Hong Minhee) Thanks! I've used Lambda / DynamoDB / serverless for many years (and written a few things about them), so that part is easy for me. But the ActivityPub side is where I need to learn. Do you have a preferred “introduction to ActivityPub” tutorial that you recommend? I'm most interested at the moment in the architecture and what the interface requirements are. By default I'll just start with reading the W3C specs.

@mikebrobertsMike Roberts While the W3C specs exist as a reference, I wouldn't recommend starting there—they're underspecified and don't provide enough practical guidance for implementation.

Instead, I'd suggest these more practical resources:

  1. Fedify's Creating your own federated microblog tutorial:

    • Provides a hands-on, step-by-step implementation
    • Covers both the theory and practice in an accessible way
    • Shows how to handle common ActivityPub patterns
  2. For a better conceptual overview:

  3. The SocialHub forum has many discussions about implementation practices and challenges faced by developers.

  4. The FEP (Fediverse Enhancement Proposals) process documents community-developed extensions and conventions that go beyond the official spec.

The biggest challenge with ActivityPub isn't understanding the core concepts, but navigating all the de facto standards and practices that have evolved beyond the specs. Starting with practical tutorials rather than specs will give you a much clearer path forward.

0
1

유려한 transition animation을 정확하게 구현하려면, transition 후의 레이아웃을 미리 계산해야하는데 이를 위해 일종의 offscreen dry rendering을 해야한다. 실제로 web의 animation 라이브러리 중에 임시로 DOM 트리 만들어서 offsetX같은거 읽는 방식이 있는걸로 안다. 근데 이런 동작을 브라우저 렌더링 엔진이 효율적으로 처리하고 있는지 모르겠다. 혹시 web이 아닌 UI 라이브러리 중에 layout에 대한 primitive를 사용자에게 잘 노출시켜놓은 예시가 있을까?

2

I've been thinking about client-server interactions in the . isn't widely used, and most clients rely on Mastodon-compatible APIs instead.

What if we created a new standardized API based on GraphQL + Relay for client-server communication, while keeping ActivityPub for server-to-server federation?

The Mastodon-compatible API lacks formal schema definitions for code generation and type checking, which hurts developer productivity. And ActivityPub C2S is honestly too cumbersome to use directly from client apps.

would give us type safety, efficient data fetching (only get what you need), and the ability to evolve the API without breaking clients. 's features for pagination, caching, and optimistic updates seem perfect for social apps.

Would this be valuable to our community? What challenges do you see? How might we handle backward compatibility? And should this be formalized as an FEP?

Curious what others think about this approach.

3
8
0
4

@bglbgl gwyng @hongminhee洪 民憙 (Hong Minhee) CDN 같은 경우에는 해당 플랜 (무료든, 비지니스든) 에서 허용하는 요청수나 트래픽 한도를 초과하는 기간이 일정기간 계속되면 플랜 업그레이드 하라는 메일을 보내는 것으로 알고 있어요. 그래도 업그레이드 안하고 쓸 수는 있지만, 꽤나 제약이 있는 걸로 알고 있습니다. (Rate Limit 을 걸어버리거나) 엔터프라이즈 플랜 (연간계약)으로도 클라우드프론트보다는 조금 더 저렴했던 기억이 있습니다. (사실 거의 비슷하긴 했지만요)

3
0
0
1

( ~ 5/31) 제 3회 파이 웹 심포지움 참가자 모집

< 이 행사는 한빛미디어의 장소 후원을 받았습니다 > 주제: AI 시대를 위한 파이썬으로 웹 서비스 개발하기

최근 파이썬이 가장 많이 쓰이는 분야는 단연코 AI입니다. 이제 AI 서비스에 웹 개발이 필요해지는 순간이 많아졌습니다.

웹 서비스 개발 뿐 아니라 openai 나 bedrock같은 AI 서비스의 api 를 이용한 또 다른 서비스를 만들어야합니다.

AI 서비스를 만들면서 겪은 웹 서비스 기술을 함께 나누어보세요! 세션이 끝난 이후엔 다과와 함께 네트워킹 시간도 가질 수 있습니다.

일시 : 2025년 5월 31일 (토) 13:00 ~ 18:00 장소 : 서울특별시 서대문구 연희로2길 62 한빛미디어 리더스홀

https://event-us.kr/pythonkorea/event/103147

1

Figma보다 나은 디자인툴을 만들기 위해서 뭐가 필요할까? 여러 축으로의 개선이 가능하겠지만, 근본적으로 더 우월한 뭔가를 만들고 싶다면 Figma가 내부적으로 쓰는 디자인 언어보다 나은걸 만들어야 한다. 즉 flexbox + CSS + 뭐시기 보다 나은 디자인 언어가 필요하다. 반대로 그런 언어를 이미 알고있다면 그걸 기반으로 GUI 툴을 만드는건 역시 야심찬 작업이긴해도 비교적 자명한 일이 된다. 어떤 툴이든 그것이 내부적으로 쓰는 언어를 능가하는 기능을 제공할순 없다.

6
5

아아~ 여러분 이만한 기여 맛집이 어디 없습니다~
ActivityPub 기반의 오픈소스 블로깅 서비스 HackersPub에 현장에서 기여할 수 있는 기회! 그 외에도,,,

* Fedify : ActivityPub 기반의 소프트웨어 개발하는 난이도를 낮춰주는 라이브러리
* Hollo : 1인 블로깅 플랫폼
* 혹은... 프론트엔드 하시는 분 한정, 마스토돈 클라이언트 만들기 온보딩까지 가능...!!!!

hackers.pub/@hongminhee/0196b9

5월 24일(土) 한국 연합우주 개발자 모임(FediDev KR)에서 두 번째 스프린트 모임을 개최합니다! 장소는 뚝섬역 5번 출구쪽에 위치한 튜링의 사과(@TuringAppleDev)입니다. 참고로 스프린트 모임이란 함께 모여서 오픈 소스 코딩을 하는 자리인데, 한국 연합우주 개발자 모임의 스프린트에서는 새로운 연합우주 서비스나 앱을 개발하거나, 번역이나 문서에 기여하는 등 연합우주와 관련된 다양한 오픈 소스 활동을 모여서 함께 합니다. 지난 스프린트 모임의 기록을 스프린트 블로그(@sprints.fedidev.kr)에서 살펴보실 수 있습니다. 저는 그날 Fedify, Hollo, Hackers' Pub에 기여하시고자 하는 분들을 옆에서 도와드릴 예정입니다. Fedify, Hollo, Hackers' Pub에 기여해보고 싶었던 분들이 계시다면 모임에 참가하여 저와 함께 스프린트를 해보는 것도 좋을 것 같습니다. 이번 모임에 관심이 있으신 분은 행사 신청 페이지를 참고하시기 바랍니다.

5월 24일(土) 한국 연합우주 개발자 모임(FediDev KR)에서 두 번째 스프린트 모임을 개최합니다! 장소는 뚝섬역 5번 출구쪽에 위치한 튜링의 사과(@TuringAppleDev)입니다. 참고로 스프린트 모임이란 함께 모여서 오픈 소스 코딩을 하는 자리인데, 한국 연합우주 개발자 모임의 스프린트에서는 새로운 연합우주 서비스나 앱을 개발하거나, 번역이나 문서에 기여하는 등 연합우주와 관련된 다양한 오픈 소스 활동을 모여서 함께 합니다. 지난 스프린트 모임의 기록을 스프린트 블로그(@sprints.fedidev.kr)에서 살펴보실 수 있습니다. 저는 그날 Fedify, Hollo, Hackers' Pub에 기여하시고자 하는 분들을 옆에서 도와드릴 예정입니다. Fedify, Hollo, Hackers' Pub에 기여해보고 싶었던 분들이 계시다면 모임에 참가하여 저와 함께 스프린트를 해보는 것도 좋을 것 같습니다. 이번 모임에 관심이 있으신 분은 행사 신청 페이지를 참고하시기 바랍니다.

hackers.pub

Link author: 洪 民憙 (Hong Minhee)@hongminhee@hackers.pub

0

RFC 9110 (RFC 2616), RFC 3986에 URL 길이 제한이 들어가진 않았으나, 웹서버나 DBMS에서 처리하는 한계는 있다. 다만 fragment(#) 영역은 브라우저가 처리하니까 SPA에서 활용중.

IE는 관짝에 들어가서 가물가물한데 URL 총 길이 2K? 제한이 있었음.
나머지 브라우저는 64K 정도는 가능했던걸로.
어찌어찌 짜내면 80K? 처리는 하지만 UI에서 표시하는 한계는 있었음. 크롬만 지원한다면 더 넉넉함.

news.hada.io/topic?id=20861

0
5
0
4

무언가가 프로그래머블하다는 것은 문제가 생겼을때 디버깅을 해야한단걸 의미한다. 전세계에 프로그래밍을 좋아하는 사람들은 수백만명 정도 있고, 디버깅을 좋아하는 사람은 정확히 0명 있다.

  • Nix의 개발새발 빌드 에러메시지를 읽고 있는 누군가
6

臺灣(타이완)에서는 乖乖(괴괴)라는 菓子(과자)를 서버 같은 컴퓨터 옆에 符籍(부적)처럼 두는 風習(풍습)이 있는데요. 乖乖(괴괴)中國語(중국어)로 「말을 잘 듣는다」는 뜻인데다, 草綠色(초록색) 封套(봉투)順航(순항)象徵(상징)한다고 합니다. (그래서 여러 () 封套(봉투) ()에서도 草綠色(초록색) 封套(봉투)效果(효과)가 있다고 여겨집니다.)

그런데 아내가 지난 臺北(타이베이) 出張(출장)에서 乖乖(괴괴)를 한 封紙(봉지) 사 왔더라고요. 그래서 저도 이 인스턴스 hollo.social과 Hackers' Pub이 돌아가는 Mac mini 옆에 두기로 했습니다. 乖乖(괴괴) 封套(봉투)에는 「()乖乖(괴괴)〉,不要當機(불요당기)」(말 잘 듣고, 다운되지 말아라)라고 썼습니다.

乖乖(괴괴)效驗(효험)流通期限(유통 기한)까지 持續(지속)된다고 하는데요, 제가 둔 封紙(봉지)는 2026() 4() 11()까지입니다. 그 때까지 다운이 안 되는지 한 () 지켜보도록 합시다. 🤣

나무 바닥 위에 Mac mini가 놓여 있고, 그 옆에 臺灣 菓子인 草綠色 封套의 乖乖가 놓여 있다. 乖乖에는 「請〈乖乖〉,不要當機」(말 잘 듣고, 다운되지 말아라)라고 써져 있다. 주위에는 흰 토끼 某樣 電球와 파란 꽃이 든 花盆이 있다.
5
1
0