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

洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

1,107 following1,897 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

@z9mb1@hackers.pub
@hongminhee@hollo.social
@nebuleto@hackers.pub

YTN에서 편두통의 심각성에 대해 기사로 다뤄주시면서 인터뷰에 나오게 되었습니다. 편두통은 단순히 개인을 넘어 사회 전체에 큰 부담을 가져오는 질병입니다. 환자들이 적절한 진단을 받고 필요한 치료를 빠르게 받을 수 있는 환경이 마련되는 것이 환자 개인에게도, 주변 사람들에게도, 우리 사회 전체에 큰 이익을 가져옵니다.

기사에서는 편두통에 심각성을 주로 다뤄주셨는데 저는 잘 치료 받으면서 잘 관리하고 있습니다! 편두통은 전문 치료제를 받아서 전조가 오거나 통증이 시작될 때 빠르게 약을 먹으면 효과가 좋은 편입니다.

https://www.ytn.co.kr/_ln/0134_202510111313538858

노트북 스티커로 같이 나온 펍냥이
ALT text

노트북 스티커로 같이 나온 펍냥이

@commung@planet.moe

마스토돈 스타일의 새로운 커뮤 플랫폼, 커뮹! 을 런칭합니다. 기성 소셜 플랫폼들을 커뮤 운영 방식에 끼워 맞추던 불편함을 해소하고자 시작된 프로젝트입니다. 당초 예상했던 것보다 뜨거운 관심에, 계획보다 빠르게 출시하게 되었습니다. 많은 응원과 관심 부탁드립니다. commu.ng

commu.ng

커뮹 - 타임라인 기반 커뮤 플랫폼

타임라인 기반 커뮤 플랫폼

@fossforall@mastodon.social

🪒 야크 셰이빙: 새로운 오픈소스의 원동력
작은 불편함에서 시작된 수많은 프로젝트, 그 연결의 힘은?

야크 셰이빙: 새로운 오픈소스의 원동력
홍민희 (자유·오픈소스 소프트웨어 개발자)

연사 2025.fossforall.org/speakers/
티켓 event-us.kr/fossforall/event/1

@hongminhee@hollo.social

오는 11() 8() 光云大學校(광운대학교)에서 開催(개최)되는 FOSS for All 컨퍼런스 2025에서 제가 〈야크 셰이빙: 새로운 오픈 소스의 原動力(원동력)〉이라는 主題(주제)基調演說(기조연설)을 하게 되었습니다!

올해 처음 열리는 FOSS for All 컨퍼런스는 “Free and Open Source Software for All”이라는 슬로건 아래, 모두를 ()한 오픈 소스 컨퍼런스를 目標(목표)로 하는 非營利(비영리) 오픈 소스 커뮤니티 컨퍼런스입니다.

파란色 背景의 FOSS for All 컨퍼런스 2025 發表者 카드. 右側 아래에는 發表者 洪民憙의 寫眞이 있고, 中央의 흰色 말風船 안에는 「Keynote」라는 文句와 함께 發表 題目 〈야크 셰이빙: 새로운 오픈 소스의 原動力〉이 쓰여 있다.
ALT text

파란色 背景의 FOSS for All 컨퍼런스 2025 發表者 카드. 右側 아래에는 發表者 洪民憙의 寫眞이 있고, 中央의 흰色 말風船 안에는 「Keynote」라는 文句와 함께 發表 題目 〈야크 셰이빙: 새로운 오픈 소스의 原動力〉이 쓰여 있다.

@helge@mymath.rocks
@hongminhee@hollo.social

私見(사견)으로는 漢字(한자) 敎育(교육)基本的(기본적)語彙力(어휘력)을 갖추는 데에는 必要(필요) 없고, 高級(고급) 語彙(어휘)를 갖추는 데에나 效果(효과)가 있다고 생각. 그런데 語彙力(어휘력) 이슈가 나올 때는 普通(보통) 前者(전자)問題(문제)이기 때문에, 漢字(한자) 敎育(교육)은 엉뚱한 方案(방안)이 되는 거고.

그리고 點心(점심)이든 中華料理(중화요리)漢字(한자)로도 【중식】은 【中食(중식)】이라, 이런 케이스에는 漢字(한자) 敎育(교육)을 해도 解決(해결)이 안 됨.

https://bsky.brid.gy/r/https://bsky.app/profile/did:plc:sbhczrmqu43gq2hyns36lmzw/post/3m2skod7pas2y

bsky.app

dec_alpha (@decalpha.bsky.social)

계속 한자 교육을 해야한다는 분들이 나오는데 중요한건 한자 교육이 아님. 극단적으로 금일 중식..이란 말이 나올 때 저 중식이 점심을 말하는지 중국 음식을 말하는지는 문맥을 읽어야 하는 거고 그런 교육이 필요한거지 .. 한자 교육을 하면 어휘향상에 도움이 되는건 맞지만 반드시는 아님. 차라리 시험에서 많은 예문을 제시하고 읽게 하는게 필요한거지 ... 그리고 문제는 9%의 하위를 끌어올릴걸 고민하는거라..

@decalpha.bsky.social@bsky.brid.gy

계속 한자 교육을 해야한다는 분들이 나오는데 중요한건 한자 교육이 아님. 극단적으로 금일 중식..이란 말이 나올 때 저 중식이 점심을 말하는지 중국 음식을 말하는지는 문맥을 읽어야 하는 거고 그런 교육이 필요한거지 .. 한자 교육을 하면 어휘향상에 도움이 되는건 맞지만 반드시는 아님. 차라리 시험에서 많은 예문을 제시하고 읽게 하는게 필요한거지 ... 그리고 문제는 9%의 하위를 끌어올릴걸 고민하는거라..

Exciting news for developers! We've just landed a major milestone for Fedify 2.0—the now runs natively on .js and , not just (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).

This change means a more natural development experience regardless of your runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!

github.com

CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify

The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...

@JeremyMallin@autistics.life

I saw a post complaining that the term "gaslighting" is being overused. It is not. The practice is being over used, not the term.

@yamanoku@hollo.yamanoku.net · Reply to 洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee カフェではなくバーですが東京の東中野に「ハッカーズバー」、兵庫の神戸に「ハックバー」というのがあります。プログラミングに関する相談などがメインな感じですが、ご参考までに。

https://hackers.bar/

https://hackbar.jp/

hackbar.jp

ハックバー HACK.BAR | エンジニアが集まるバー

ハックバー HACK.BAR は世界にもあまり見ないエンジニアが集まるバーです。技術者視点での会話や相談・仕事の話まで。そこに集まるのは様々なエンジニアと呼ばれる偉人達。

@hongminhee@hollo.social

以前、福岡へ旅行した際にEngineer Cafeに立ち寄ったのが印象に残っているのですが、日本の他の地域にもEngineer Cafeのような場所は有りますか?オフラインで日本のソフトウェア開発者の方々と交流したいです。

engineercafe.jp

Engineer Cafe|福岡天神に誕生、エンジニアのためのハッカースペース

2019年8月オープン!コワーキングスペースとしての利用のほか、各種イベントや勉強会を開催、多くのコミュニティが集います。国内外から様々な業種のエンジニアが集まるエンジニアのための施設です。

@hongminhee@hackers.pub

このように複雑で厄介なJSON-LDの仕様を一つ一つ考慮しながらActivityPubソフトウェアを開発することに疲れたなら、Fedifyを使ってみてください。Fedifyは内部的に(JSON-LDを単なるJSONとして扱う実装ではなく)本格的なJSON-LDプロセッサを使用すると同時に、ハイレベルAPIではそれらをすべて抽象化し、JSON-LDを理解していなくてもActivityPubの開発を可能にします。

misskey.okayurisotto.net

🍚おかゆりぞっと🥢 (@okayurisotto)

JSON-LDへの愚痴

@okayurisotto@misskey.okayurisotto.net
JSON-LDへの愚痴

次のような未知のJSONがソフトウェアに与えられたとき、

{
  "name": "Alice"
}

ソフトウェアは
"Alice"という値がなんであるかを識別することはできません。よって、nameという文字列キーの代わりに事前に定義された識別子を用いることにしましょう。例えば:
{
  "http://xmlns.com/foaf/0.1/name": "Alice"
}

(URLとして解釈可能な文字列ではありますが、これはたまたまです。URLとして機能するわけではありません。便宜上このような文字列を使っているというだけ。
ですのでそのURLのドメインが悪意ある第三者によって詐欺サイトにリダイレクトするようになっていても、JSON-LD的には問題ありません!

ここで、互換性のため
@contextというものを考えたいと思います。これを使って次のように書くと、
{
  "@context": {
    "name": "http://xmlns.com/foaf/0.1/name"
  },
  "name": "Alice"
}

@contextを無視するだけで、従来のソフトウェアは今まで通りにJSONを扱うことができます。これがJSON-LDの基本的なコンセプトです。

ちなみに
@contextではあらゆる識別子をあらゆる文字列へマッピングできます。よって、ソフトウェアは次の2種類のJSON-LDを同じように解釈する必要がありますね!
{
  "@context": {
    "name": "http://xmlns.com/foaf/0.1/name"
  },
  "name": "Alice"
}
{
  "@context": {
    "名前": "http://xmlns.com/foaf/0.1/name"
  },
  "名前": "Alice"
}

ではここでさらなる抽象化を考えてみましょう。次のようにすると、与えられたJSON-LDが人物の情報であることを表すことができます。
{
  "@context": "https://json-ld.org/contexts/person.jsonld",
  "name": "Alice"
}

コンテキストは複数指定することもできますし、従来の辞書型と混ぜることもできます。さらに、あるコンテキストで定義されたキーに別名を付けて使うこともできます。
{
  "@context": [
    "https://example.com/foo",
    "https://example.com/bar",
    {
      "buz": "https://example.com/buz",
      "qux": "buz:qux"
    }
  ]
}

そうそう、クラス定義というものもあります。次の例における
"Object"という文字列値は、Activity Vocabulary(ActiviyPubを構成する仕様の一つ)におけるObjectというクラスであることを示すものです。
{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Object",
  "id": "http://www.test.example/object/1",
  "name": "A Simple, non-specific object"
}

Objectという文字列がキーとして使われることがないことはJSON-LDからは読み取れませんが、まあなんとかしてください!

ちなみにMisskeyが送信するJSONに付与する
@contextは次の通り。つまり、このコンテキストを理解できるソフトウェアを作れば、Misskeyと連携することができるということです。
{
	"@context": [
		"https://www.w3.org/ns/activitystreams",
		"https://w3id.org/security/v1",
		{
			"Key": "sec:Key",
			"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
			"sensitive": "as:sensitive",
			"Hashtag": "as:Hashtag",
			"quoteUrl": "as:quoteUrl",
			"toot": "http://joinmastodon.org/ns#",
			"Emoji": "toot:Emoji",
			"featured": "toot:featured",
			"discoverable": "toot:discoverable",
			"schema": "http://schema.org#",
			"PropertyValue": "schema:PropertyValue",
			"value": "schema:value",
			"misskey": "https://misskey-hub.net/ns#",
			"_misskey_content": "misskey:_misskey_content",
			"_misskey_quote": "misskey:_misskey_quote",
			"_misskey_reaction": "misskey:_misskey_reaction",
			"_misskey_votes": "misskey:_misskey_votes",
			"_misskey_summary": "misskey:_misskey_summary",
			"isCat": "misskey:isCat",
			"vcard": "http://www.w3.org/2006/vcard/ns#"
		}
	]
}

(ですがMisskeyは受信したJSON-LDをただのJSONとして解釈し、
@contextの内容は関知しません。)

そもそも情報交換用のサーバ間APIでJSON-LDのような柔軟で既存のJSON構造を壊さずに導入できる仕様を使う必要はないかもしれませんが……まあ細かいことは気にしない!

それでは、楽しいActivityPubサーバ開発を!!!