洪 民憙 (Hong Minhee) :nonbinary:'s avatar

洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

1,108 following1,899 followers

An intersectionalist, feminist, and socialist living in Seoul (UTC+09:00). @tokolovesme's spouse. Who's behind @fedify, @hollo, and @botkit. Write some free software in , , , & . They/them.

서울에 사는 交叉女性主義者이자 社會主義者. 金剛兔(@tokolovesme)의 配偶者. @fedify, @hollo, @botkit 메인테이너. , , , 等으로 自由 소프트웨어 만듦.

()

Pinned

@hongminhee@hollo.social

Hello! I'm Hong Minhee (洪 民憙), an open source software engineer in my late 30s, living in Seoul, Korea. I'm bisexual and non-binary (they/them), and an enthusiastic advocate of free/open source software and the fediverse.

I work full-time on @fedify, an ActivityPub server framework in TypeScript, funded by @sovtechfund. I'm also the creator of @hollo, a single-user ActivityPub microblog; @botkit, an ActivityPub bot framework; Hackers' Pub, a fediverse platform for software developers; and LogTape, a logging library for JavaScript and TypeScript.

I have a long interest in East Asian languages (CJK) and Unicode. I post mostly in English here, though occasionally in Japanese or in mixed-script Korean (國漢文混用體), a traditional writing style that interleaves Chinese characters with the native Korean alphabet. Wanting to write in that style was actually one of the reasons I joined the fediverse. Feel free to talk to me in English, Korean, Japanese, or even Literary Chinese!

en.wikipedia.org

Korean mixed script - Wikipedia

Pinned

はじめまして!ソウル在住の30代後半のオープンソースソフトウェアエンジニア、洪 民憙ホン・ミンヒと申します。バイセクシュアル(bisexual)・ノンバイナリー(non-binary)で、自由・オープンソースソフトウェア(F/OSS)とフェディバース(fediverse)の熱烈な支持者です。

STF(@sovtechfund)の支援を受け、TypeScript用ActivityPubサーバーフレームワーク「@fedify」の開発に専念しています。他にも、おひとり様向けのActivityPubマイクロブログ「@hollo」、ActivityPubボットフレームワーク「@botkit」、ソフトウェア開発者向けフェディバースプラットフォームHackers' Pub、JavaScript・TypeScript用ロギングライブラリLogTapeなどの制作者でもあります。

東アジア言語(いわゆるCJK)とUnicodeにも興味があります。このアカウントでは主に英語で投稿していますが、時々日本語や国漢文混用体(漢字ハングル混じり文)の韓国語でも書いています。実はこの文体で書きたくてフェディバースを始めた、という経緯もあります。日本語、英語、韓国語、漢文でも気軽に話しかけてください!

speakerdeck.com

国漢文混用体からHolloまで

本発表では、韓国語の「国漢文混用体」(漢字ハングル混じり文)を自分のフェディバース投稿に実装したいという小さな目標から始まった旅路を共有します。 この目標を達成するために、ActivityPubのJSON-LDの複雑さやHTTP Signatures、WebFingerなどの仕様を理解する必要性に…

Pinned

安寧(안녕)하세요! 저는 서울에 살고 있는 30() 後半(후반)의 오픈 소스 소프트웨어 엔지니어 洪民憙(홍민희)입니다. 兩性愛者(양성애자)(bisexual)이자 논바이너리(non-binary)이며, 自由(자유)·오픈 소스 소프트웨어(F/OSS)와 聯合宇宙(연합우주)(fediverse)의 熱烈(열렬)支持者(지지자)이기도 합니다.

STF(@sovtechfund)의 支援(지원)을 받아 TypeScript() ActivityPub 서버 프레임워크 @fedify 開發(개발)專業(전업)으로 ()하고 있습니다. 그 ()에도 싱글 유저() ActivityPub 마이크로블로그 @hollo, ActivityPub 봇 프레임워크 @botkit, 소프트웨어 開發者(개발자)를 위한 聯合宇宙(연합우주) 플랫폼 Hackers' Pub, JavaScript·TypeScript() 로깅 라이브러리 LogTape ()製作者(제작자)이기도 합니다.

()아시아 言語(언어)(이른바 CJK)와 Unicode에도 關心(관심)이 많습니다. 이 計定(계정)에서는 ()英語(영어)로 포스팅하지만, 때때로 日本語(일본어)國漢文混用體(국한문 혼용체) 韓國語(한국어)로도 씁니다. 聯合宇宙(연합우주)에 오게 된 動機(동기) () 하나가 바로 國漢文混用體(국한문 혼용체)로 글을 쓰고 싶었기 때문이기도 하고요. 韓國語(한국어), 英語(영어), 日本語(일본어), 아니면 漢文(한문)으로도 말을 걸어주세요!

logtape.org

LogTape

Unobtrusive logging library with zero dependencies—library-first design for Deno, Node.js, Bun, browsers, and edge functions

@hongminhee@hollo.social

ソフトウェア開発に関する韓国語圏および英語圏の記事をLLMを活用して日本語に自動翻訳した記事が投稿されるサービスが有れば、利用する意向は有りますか?

  • 購読する6 (19%)
  • 時々確認する18 (56%)
  • 利用しない8 (25%)
@hongminhee@hollo.social

ソフトウェア開発に関する韓国語圏および英語圏の記事をLLMを活用して日本語に自動翻訳した記事が投稿されるサービスが有れば、利用する意向は有りますか?

  • 購読する6 (19%)
  • 時々確認する18 (56%)
  • 利用しない8 (25%)
@hongminhee@hollo.social · Reply to Woojin Kim
@hollo@hollo.social

We're pleased to announce that has been included in the Nivenly Fediverse Security Fund program!

The @nivenly Foundation has launched a security bounty fund to support contributors who identify and help fix vulnerabilities in popular software. Both Hollo and @fedify 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 Hollo'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/

nivenly.org

Nivenly Fediverse Security Fund

Security bounty fund to sponsor contributors who responsibly disclose security vulnerabilities in popular open source Fediverse software.

We're pleased to announce that has been included in the Nivenly Fediverse Security Fund program!

The @nivenly Foundation has launched a security bounty fund to support contributors who identify and help fix vulnerabilities in popular software. Both Fedify and @hollo 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/

nivenly.org

Nivenly Fediverse Security Fund

Security bounty fund to sponsor contributors who responsibly disclose security vulnerabilities in popular open source Fediverse software.

@rns_8i8@calc.rettuce.page
@nibushibu@vivaldi.net
@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 […]

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 the place it represents, or checking in to a location.

One important need for geosocial software is that all objects in ActivityPub, including Place objects, need to have a permanent URL as their id property, which shares the description of that object in Activity Streams 2.0 format. However, there isn’t a good dataset of geographical objects — countries, states or provinces or regions, cities, buildings, businesses, parks, streets — available in AS2 on the Web right now. That is slowing down experimentation in the Geosocial Task Force.

Using the service

So, I worked on making places.pub for geosocial hackers to experiment with. It’s a service that exposes places from the amazing OpenStreetMap collection of data as AS2 objects on the Web. So, given an OpenStreetMap object like the Rogers Centre Ottawa, it provides an AS2 version suitable for use in geosocial activities in ActivityPub. It also has a rudimentary search mechanism, although I think most users will want to use the Nominatim service for searching the OpenStreetMap database, and then map the IDs onto places.pub.

Once you know the places.pub ID for a place, you can use it for geotagging objects, people, activities, or using special geosocial activity types like check in, check out, and travel. There is a good list of examples on the places.pub home page, but obviously this is not an exhaustive list!

How it is built

This wasn’t my first time trying to build places.pub; I’d done two earlier versions with different architectures and the same interface. The first time out, about 7 years ago, I created a full NodeJS server that used a full mirror of the OpenStreetMap database, so I didn’t need to hit the OSM API to fetch data. It worked pretty well, but it was really expensive — hundreds of dollars per month to keep a database server of that size running and synched.

I tried a second version a few months ago, which did batch generation of AS2 Place objects from the OpenStreetMap exports, and then uploaded them to the S3 service at Amazon Web Services. This was a whole lot cheaper, but it took a long time to download, convert, and re-upload the data.

This third implementation, with source code available on GitHub, is a little bit easier than both. Instead of sloshing the huge OSM dataset back and forth, I used the version of the data stored in the Google Cloud Public Datasets system on BigQuery. This let me ignore the effort of moving data, and just focus on giving it a good ActivityPub-compatible interface using a Google Cloud Run function. It seems to work pretty nicely.

Next steps

I’d love to see some experimentation with using places.pub for geosocial activity in the social web. I’m going to work on some implementations in my own ActivityPub software. If you find problems with the software, please add an issue on GitHub or let me know on the Fediverse at @evanprodromou.

github.com

social-web-foundation/places.pub

Places.pub is an online vocabulary of Activity Streams 2.0 Place objects, suitable for use with ActivityPub - social-web-foundation/places.pub

@hongminhee@hollo.social · Reply to Sebastian Lasse

@sl007 Thanks for sharing this interesting approach! I'd be very interested in looking at your code once it's completed. The way you're handling ActivityPub data with Deno KV sounds promising, especially your methods for versioning and avoiding duplicates. Please let me know when it's available to check out!

@bgl@hackers.pub · Reply to 洪 民憙 (Hong Minhee)

@hongminhee 약간 딴 얘긴데, 저는 들여쓰기가 그냥 안좋은 문법요소 같습니다. 코드의 복붙을 unreliable하게 만들어버려서요. 반대로 space sensitive한 문법은 괜찮다고 생각합니다. 복붙시 문제가 생겨도 스페이스 한번 치면 해결되니까요. 들여쓰기 대신에 {} 쌍을 쓰게 만들되, 에디터에서 보여줄때 어떻게 알아서 예쁘게 보여주는게 낫다고 생각해요.

@hongminhee@hackers.pub

저도 비슷한 생각인데, Haskell이나 Rust는 코너 케이스를 다루지 않고는 컴파일도 못 하게 금지하는 경우들이 꽤 많고 (그래서 좋은 언어지요), 빠르게 해피 패스만을 검증하고 싶을 때는 Python 같은 널널한 언어(복잡하고 규모가 큰 소프트웨어를 만들 때는 나쁜 언어가 되지요)가 쉽게 느껴질 수 있다고 생각합니다. 즉, Haskell이나 Rust가 어렵다고 말할 때의 어려움은 개념적 이해의 난도라기 보다는 시행착오의 커브의 경사를 얘기하는 것 같아요.

비슷한 측면에서 저는 Python의 들여쓰기를 강제하는 문법이 프로그래밍 초심자에게 좋은 습관을 처음부터 정착시키는 데에는 일조할 수 있겠지만, 결코 쉽지는 않다고 생각합니다.

hackers.pub

러스트가 어렵다는 이야기가 숙고없이 재생산 되는거 같긴 합니다. 제가 러스트를 별로 안써봐서 실제로 얼마나 어려운진 모르겠습니다. 그런데 말씀하신 모나드, 트레잇, 오너십 등의 개념들과 클래스는 좀 차이가 있다고 생각합니다. 그러니까 자바에서 클래스 때문에 어떤 코드를 못짜게 되진 않잖아요? 자바를 하면서 클래스를 제대로 쓰지않고도 뭔가 만들순 있습니다. 반면 전자의 개념들은 잘못된 코드를 짜는걸 막고, 초보자 입장에서 뭔가 하고싶은게 있는데 그게 금지되는 상황에서 어렵다는 느낌을 (필요이상으로 크게) 받을수 있다고 생각합니다. RE: https://yuri.garden/notes/a75i1vf42f

러스트가 어렵다는 이야기가 숙고없이 재생산 되는거 같긴 합니다. 제가 러스트를 별로 안써봐서 실제로 얼마나 어려운진 모르겠습니다. 그런데 말씀하신 모나드, 트레잇, 오너십 등의 개념들과 클래스는 좀 차이가 있다고 생각합니다. 그러니까 자바에서 클래스 때문에 어떤 코드를 못짜게 되진 않잖아요? 자바를 하면서 클래스를 제대로 쓰지않고도 뭔가 만들순 있습니다. 반면 전자의 개념들은 잘못된 코드를 짜는걸 막고, 초보자 입장에서 뭔가 하고싶은게 있는데 그게 금지되는 상황에서 어렵다는 느낌을 (필요이상으로 크게) 받을수 있다고 생각합니다. RE: https://yuri.garden/notes/a75i1vf42f

@bgl@hackers.pub

러스트가 어렵다는 이야기가 숙고없이 재생산 되는거 같긴 합니다. 제가 러스트를 별로 안써봐서 실제로 얼마나 어려운진 모르겠습니다.

그런데 말씀하신 모나드, 트레잇, 오너십 등의 개념들과 클래스는 좀 차이가 있다고 생각합니다. 그러니까 자바에서 클래스 때문에 어떤 코드를 못짜게 되진 않잖아요? 자바를 하면서 클래스를 제대로 쓰지않고도 뭔가 만들순 있습니다. 반면 전자의 개념들은 잘못된 코드를 짜는걸 막고, 초보자 입장에서 뭔가 하고싶은게 있는데 그게 금지되는 상황에서 어렵다는 느낌을 (필요이상으로 크게) 받을수 있다고 생각합니다.



RE: https://yuri.garden/notes/a75i1vf42f

yuri.garden

쯔방 :yuri: :yurigarden: :garden: (@pbzweihander)

"모나드가 어려워서 하스켈 못 하겠어요" "트레잇/오너십/라이프타임이 어려워서 러스트 못 하겠어요" 라는 사람은 산더미같이 많은데 클래스가 어려워서 자바를 못 한다는 사람은 왜 없을까요? 사실 없지 않음. 처음에는 많았지만 클래스가 익숙한 개념이 되고 다들 자바를 쓰니까 클래스가 '당연한 것'이 되었을 뿐 if문이 어려워서, for문이 어려워서, 변수가 어려워서 파이썬을 못 하겠어요. 라는 사람도 없음. '당연한' 개념이 되었으니까. 그냥 다 쓰다보면 체득되는 개념들임 모나드/트레잇/오너십/라이프타임/클래스가 if문/for문/변수/함수 보다 근본적으로 더 '어려운' 개념이라고 생각하지 않음. 익숙한가 익숙하지 않은가의 차이지. RE: 러스트가 '어렵다'라고 프레임 씌우는 것 보면 진짜 속터짐 세상에 어렵지 않은 프로그래밍 언어는 없습니다 러스트는 파이썬보다 더 어렵지도 않고 파이썬이 다른 언어보다 더 쉽지도 않습니다 다 trade-off 입니다... 언어가 근본적으로 '어려운' 것이 아니고 그냥 그 언어가 선택한 트레이드오프들이 당신/팀의 취향/요구상황 등에 안 맞을 뿐입니다...

@bgl@hackers.pub

러스트가 어렵다는 이야기가 숙고없이 재생산 되는거 같긴 합니다. 제가 러스트를 별로 안써봐서 실제로 얼마나 어려운진 모르겠습니다.

그런데 말씀하신 모나드, 트레잇, 오너십 등의 개념들과 클래스는 좀 차이가 있다고 생각합니다. 그러니까 자바에서 클래스 때문에 어떤 코드를 못짜게 되진 않잖아요? 자바를 하면서 클래스를 제대로 쓰지않고도 뭔가 만들순 있습니다. 반면 전자의 개념들은 잘못된 코드를 짜는걸 막고, 초보자 입장에서 뭔가 하고싶은게 있는데 그게 금지되는 상황에서 어렵다는 느낌을 (필요이상으로 크게) 받을수 있다고 생각합니다.

yuri.garden

쯔방 :yuri: :yurigarden: :garden: (@pbzweihander)

"모나드가 어려워서 하스켈 못 하겠어요" "트레잇/오너십/라이프타임이 어려워서 러스트 못 하겠어요" 라는 사람은 산더미같이 많은데 클래스가 어려워서 자바를 못 한다는 사람은 왜 없을까요? 사실 없지 않음. 처음에는 많았지만 클래스가 익숙한 개념이 되고 다들 자바를 쓰니까 클래스가 '당연한 것'이 되었을 뿐 if문이 어려워서, for문이 어려워서, 변수가 어려워서 파이썬을 못 하겠어요. 라는 사람도 없음. '당연한' 개념이 되었으니까. 그냥 다 쓰다보면 체득되는 개념들임 모나드/트레잇/오너십/라이프타임/클래스가 if문/for문/변수/함수 보다 근본적으로 더 '어려운' 개념이라고 생각하지 않음. 익숙한가 익숙하지 않은가의 차이지. RE: 러스트가 '어렵다'라고 프레임 씌우는 것 보면 진짜 속터짐 세상에 어렵지 않은 프로그래밍 언어는 없습니다 러스트는 파이썬보다 더 어렵지도 않고 파이썬이 다른 언어보다 더 쉽지도 않습니다 다 trade-off 입니다... 언어가 근본적으로 '어려운' 것이 아니고 그냥 그 언어가 선택한 트레이드오프들이 당신/팀의 취향/요구상황 등에 안 맞을 뿐입니다...

@pbzweihander@yuri.garden · Reply to 쯔방 :yuri: :yurigarden: :garden:

"모나드가 어려워서 하스켈 못 하겠어요"
"트레잇/오너십/라이프타임이 어려워서 러스트 못 하겠어요"
라는 사람은 산더미같이 많은데

클래스가 어려워서 자바를 못 한다는 사람은 왜 없을까요? 사실 없지 않음. 처음에는 많았지만 클래스가 익숙한 개념이 되고 다들 자바를 쓰니까 클래스가 '당연한 것'이 되었을 뿐

if문이 어려워서, for문이 어려워서, 변수가 어려워서 파이썬을 못 하겠어요. 라는 사람도 없음. '당연한' 개념이 되었으니까. 그냥 다 쓰다보면 체득되는 개념들임

모나드/트레잇/오너십/라이프타임/클래스가 if문/for문/변수/함수 보다 근본적으로 더 '어려운' 개념이라고 생각하지 않음. 익숙한가 익숙하지 않은가의 차이지.

@hongminhee@hollo.social
@grindieta@mastodon.social

국가간에 동물 주고받는 건 이제 좀 그만 하면 안될까;;; 이런 기사 볼 때마다 조선시대에 너무 많이 먹어서 천덕꾸러기로 전국을 돌다 죽었다는 코끼리가 생각난다. 😮‍💨 그때랑 달라진 게 없어.

@hongminhee@hollo.social

5() ()金剛兔(금강토)(@tokolovesme)와 함께 杭州(항저우)에 가기로! 或是(혹시) 杭州(항저우)에 가 보신 분 계신가요? 들를만한 곳 있으면 推薦(추천) 付託(부탁)드립니다!

@hongminhee@hackers.pub · Reply to 洪 民憙 (Hong Minhee)

Mastodon 호환 API를 구현할 계획에 대해 문의 주시는 분들이 종종 계십니다만, 아마도 Hackers' Pub은 앞으로도 Mastodon 호환 API를 구현하지는 않을 것 같습니다. 개인적으로 Mastodon 호환 API가 사용성이 많이 떨어진다고도 생각하고, 이미 Hackers' Pub 고유의 기능들 가운데 Mastodon 호환 API로 표현 불가능한 것들이 좀 있기 때문입니다.

장기적으로는 GraphQL을 이용해 웹 프런트엔드도 크게 개선하고, 모바일 앱까지 만드는 걸 염두에 두고 있습니다.

@hongminhee@hackers.pub

Hackers' Pub에 GraphQL API를 추가하고 있습니다. https://hackers.pub/graphql가 GraphQL 엔드포인트입니다. 아직 인증 기능도 없고 노출된 노드도 얼마 없습니다만, 차차 추가해 나갈 예정입니다. 다음은 예시 쿼리입니다:

{
  actorByHandle(handle: "@hongminhee@hackers.pub") {
    uuid
    iri
    type
    handle
    instance {
      host
      software
      softwareVersion
    }
    name
    bio
    avatarUrl
    url
  }
}

hackers.pub

Yoga GraphiQL