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

洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

1,096 following1,871 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

아직도 私的(사적) 記錄物(기록물)에서 固有名詞(고유 명사)表記(표기)를 어떤 文字(문자)로 해야 할 지에 ()해 뾰족한 ()을 못 내렸다. 大原則(대원칙)은 한글 表記(표기)인데… 그게 언제나 可能(가능)한 건 아닌 것 같아서, 요즘에는 固有名詞(고유 명사)()原語(원어) 表記(표기)를 하고 있었지만, 그건 그거대로 不便(불편)하달까… 假令(가령) 러시아 人名(인명)을 그 原則(원칙)대로 적겠다고 키릴 文字(문자)로 적어버리면 大部分(대부분)讀者(독자)는 못 읽게 될 것 아닌가. 그런데 다 한글로 表記(표기)하자니 내 語學(어학) 水準(수준) 안에서 適切(적절)外來語(외래어) 表記(표기)를 찾아내지 못할 때도 많고 말이다.

@hongminhee@hollo.social

労働者が機械そのものと資本による機械の使用とを区別することを学ぶには、時間と経験を要した。

——マルクス

150年前のラッダイト運動に対するこの評価が、いまのLLM論争にそのまま当てはまると思っています。「完全な世界で唯物論的に行動すること——生産手段としてのLLMと社会的関係

writings.hongminhee.org

Acting materialistically in an imperfect world: LLMs as means of production and social relations

This is a follow-up to last month's Histomat of F/OSS: We should reclaim LLMs, not reject them . Cory Doctorow celebrated the sixth anniversary of Pluralistic…

勞働者(노働자)들이 機械(기계) 自體(자체)機械(기계)資本主義的(자본주의적) 適用(적용)區分(구분)하는 ()을 배우기까지는 時間(시간)經驗(경험)必要(필요)했다.

—마르크스

150() () 러다이트 運動(운동)()한 이 評價(평가)只今(지금) LLM 論爭(논쟁)에 그대로 適用(적용)된다고 생각합니다: 〈不完全(불완전)世上(세상)에서 唯物論的(유물론적)으로 行動(행동)하기: 生產(생산) 手段(수단)으로서의 LLM과 社會的(사회적) 關係(관계)〉(한글).

writings.hongminhee.org

불완전한 세상에서 유물론적으로 행동하기: 생산 수단으로서의 LLM과 사회적 관계

이 글은 지난 달에 쓴 F/OSS 史唯: 우리는 LLM을 거부할 게 아니라 되찾아 와야 한다 의 후속이다. Cory Doctorow가 Pluralistic 6주년 기념 글 에서 자신의 작업 흐름을 공개했다. 그는 매일 발행하는 기사를 올리기 전에, Ollama라는 오픈 소스 LLM을…

労働者が機械そのものと資本による機械の使用とを区別することを学ぶには、時間と経験を要した。

——マルクス

150年前のラッダイト運動に対するこの評価が、いまのLLM論争にそのまま当てはまると思っています。「完全な世界で唯物論的に行動すること——生産手段としてのLLMと社会的関係

writings.hongminhee.org

Acting materialistically in an imperfect world: LLMs as means of production and social relations

This is a follow-up to last month's Histomat of F/OSS: We should reclaim LLMs, not reject them . Cory Doctorow celebrated the sixth anniversary of Pluralistic…

勞働者(노働자)들이 機械(기계) 自體(자체)機械(기계)資本主義的(자본주의적) 適用(적용)區分(구분)하는 ()을 배우기까지는 時間(시간)經驗(경험)必要(필요)했다.

—마르크스

150() () 러다이트 運動(운동)()한 이 評價(평가)只今(지금) LLM 論爭(논쟁)에 그대로 適用(적용)된다고 생각합니다: 〈不完全(불완전)世上(세상)에서 唯物論的(유물론적)으로 行動(행동)하기: 生產(생산) 手段(수단)으로서의 LLM과 社會的(사회적) 關係(관계)〉(한글).

writings.hongminhee.org

불완전한 세상에서 유물론적으로 행동하기: 생산 수단으로서의 LLM과 사회적 관계

이 글은 지난 달에 쓴 F/OSS 史唯: 우리는 LLM을 거부할 게 아니라 되찾아 와야 한다 의 후속이다. Cory Doctorow가 Pluralistic 6주년 기념 글 에서 자신의 작업 흐름을 공개했다. 그는 매일 발행하는 기사를 올리기 전에, Ollama라는 오픈 소스 LLM을…

@hongminhee@hollo.social
@dekirisu@mastodon.social

Random question, but I wondered:

Do you use CAPSLOCK on a physical keyboard? :blobcatcoffee:

  • It's part of my muscle memory.6 (7%)
  • I use it regularly.5 (5%)
  • I use it sometimes.34 (37%)
  • No, I don't see the point of it.47 (51%)
@sabrinkmann@hachyderm.io

I have just completed the "Learning the Basics" and "Creating a Microblog" tutorials on @fedify. The Fediverse is very complicated. However, building the example application with Fedify is much simpler, and the tutorial was really good, with lots of examples and explanations of the basics. If you want to check it out, here's the link: fedify.dev/tutorial/microblog.

Thank you for creating it, and please consider following @hongminhee!

fedify.dev

Creating your own federated microblog | Fedify

In this tutorial, we will build a small microblog that implements the ActivityPub protocol, similar to Mastodon or Misskey, using Fedify, an ActivityPub server framework.

@blog@shkspr.mobi

Internationalise The Fediverse

shkspr.mobi/blog/2024/02/inter

We live in the future now. It is OK to use Unicode everywhere.

It seems bizarre to me that modern Internet services sometimes "forget" that there's a world outside the Anglosphere. Some people have the temerity to speak foreign languages! And some of those languages have accents on their letters!! Even worse, some don't use English letters at all!!!

A decade ago, I was miffed that GitHub only supported some ASCII characters in its project names. There's no technical reason why your repo can't be called "ഹലോ വേൾഡ്".

Similarly, I'm frustrated that Mastodon (the largest ActivityPub service) doesn't allow Unicode usernames and has resisted efforts to change.

So I built a small ActivityPub server which publishes content from an Actor called @你好@i18n.viii.fi - it is only a demo account, but it works!

Some ActivityPub clients report that they are able to follow it and receive messages from it. Others - like Mastodon - simply can't see anything from it. Take a look at the replies on Mastodon to see which services work. You can also see some of its posts on the Fediverse.

What Does The Fox Spec Say?

The ActivityPub specification says:

Building an international base of users is important in a federated network. Internationalization

I can't find anything in the specifications which limits what languages a username can be written in. But there are a few clues scattered about.

The user's @ name is defined by preferredUsername which is:

A short username which may be used to refer to the actor, with no uniqueness guarantees. 4.1 Actor objects

There's nothing in there about what scripts it can contain. However, later on, the spec says:

Properties containing natural language values, such as name, preferredUsername, or summary, make use of natural language support defined in ActivityStreams. 4. Actors

So it is expected that a preferred username could be written in multiple scripts. Which implies that the default need not be limited to A-Z0-9.

The ActivityStreams specification talks about language mapping.

Finally, the ActivityPub specification has some examples on non-Latin text in names.

So, I think that it is acceptable for usernames to be written in a variety of non-Latin scripts.

But What About...?

There are usually a few objections to "Unicode Everywhere" zealots like me. I'd like to forestall any arguments.

What about homograph attacks?

Well, what about them? ASCII has plenty of similar looking characters. I doubt most people would notice when a capital i is replaced by a lower L - and vice-versa. Similarly the kerning issue of an r and n looking like an m is well known. Are mixed language homographs more dangerous? I don't think so.

What if people make names that can't be typed?

Well, what if they do? Maybe not being found by people who can't type your language is a feature, not a bug. But, anyway, clients can let users search for other people, or copy and paste their names.

What about weird "Zalgo" text?

It is up to a client to decide how they want to render text input. The "problems" of strange Unicode combinations are well known. This is not a hard computer-science problem.

What about bi-directional text?

The spec makes clear this is allowed.

Do people even want a username in their own script?

I have no evidence for this. But I bet you'd get pretty frustrated if you had to switch keyboard just to type your own name, wouldn't you? In any case, why can't I have a username of @😉

What's Next?

If you build ActivityPub software, give some thought to the billions of people who don't have names which easily fit into ASCII.

If your software can see @你好@i18n.viii.fi and its posts, please let me know.

@mcc@mastodon.social · Reply to mcc

Somebody linked me RFC 7565, which linked to RFC7564, and if that's the place to look this appears to be the list of disallowed characters in a Fediverse username, and I'm cracking up because it's *mostly* stuff you'd expect, except the very first category of banned characters, specially, is "pre-1700 Korean characters".

The fediverse is welcome to all. EXCEPT KOREAN TIME TRAVELERS. Did you just wake up from being frozen in ice during the Joseon dynasty? The IETF is targeting you PERSONALLY

4.2.3.  Disallowed

   o  Old Hangul Jamo characters, i.e., the OldHangulJamo ("I") category
      defined under Section 9.9.

   o  Control characters, i.e., the Controls ("L") category defined
      under Section 9.12.

   o  Ignorable characters, i.e., the PrecisIgnorableProperties ("M")
      category defined under Section 9.13.

   o  Space characters, i.e., the Spaces ("N") category defined under
      Section 9.14.

   o  Symbol characters, i.e., the Symbols ("O") category defined under
      Section 9.15.

   o  Punctuation characters, i.e., the Punctuation ("P") category
      defined under Section 9.16.

   o  Any character that has a compatibility equivalent, i.e., the
      HasCompat ("Q") category defined under Section 9.17.  These code
      points are disallowed even if they would otherwise be valid
      according to the property-based rules specified in the previous
      section.

   o  Letters and digits other than the "traditional" letters and digits
      allowed in IDNs, i.e., the OtherLetterDigits ("R") category
      defined under Section 9.18.
ALT text

4.2.3. Disallowed o Old Hangul Jamo characters, i.e., the OldHangulJamo ("I") category defined under Section 9.9. o Control characters, i.e., the Controls ("L") category defined under Section 9.12. o Ignorable characters, i.e., the PrecisIgnorableProperties ("M") category defined under Section 9.13. o Space characters, i.e., the Spaces ("N") category defined under Section 9.14. o Symbol characters, i.e., the Symbols ("O") category defined under Section 9.15. o Punctuation characters, i.e., the Punctuation ("P") category defined under Section 9.16. o Any character that has a compatibility equivalent, i.e., the HasCompat ("Q") category defined under Section 9.17. These code points are disallowed even if they would otherwise be valid according to the property-based rules specified in the previous section. o Letters and digits other than the "traditional" letters and digits allowed in IDNs, i.e., the OtherLetterDigits ("R") category defined under Section 9.18.

@rmdes@mstdn.social
@hongminhee@hollo.social · Reply to kopper :colon_three:

@kopper @evan @cwebber Ah, yes, the https://w3id.org/identity/v1 context... As I recall, I probably used it because I needed some kind of context to handle Linked Data Signatures. It's a bit embarrassing, but Fedify also preloads and uses that context. Personally, I wish https://w3id.org/identity/v1 would redirect to a different URL instead of the now-defunct https://web-payments.org/contexts/identity-v1.jsonld.

@cwebber@social.coop · Reply to kopper :colon_three:

@kopper @hongminhee As the person probably most responsible for making sure json-ld stayed in the spec (two reasons: because it was the only extensibility answer we had, and because we were trying hard to retain interoperability with the linked data people, which ultimately did not matter), I agree with you. I do ultimately regret not having a simpler solution than json-ld, especially because it greatly hurt our ability to sign messages, which has considerable effect on the ecosystem.

Mea culpa :\

I do think it's fixable. I'd be interested in joining a conversation about how to fix it.

@evan@activitypub.space
<p><a href="https://wedistribute.org/2025/08/social-web-foundation-is-betting-big-on-client-to-server-api/" rel="nofollow ugc">It's well-known</a> that we love the <a href="https://github.com/swicg/activitypub-api/" rel="nofollow ugc">ActivityPub API</a> at the Social Web Foundation.</p> <p>I think it would be great for our community to have an ActivityPub API hackathon sometime this year -- hopefully this summer. Hackathons are a great way to engage a lot of developers really quickly. They also are a great way to test that an API has enough power to get people from zero to working app in a day or a weekend.</p> <p>I see a few great times to do this:</p> <ul> <li><a href="https://dwebcamp.org/berlin-2026/" rel="nofollow ugc">DWeb Camp Berlin</a> in Berlin</li> <li><a href="https://fedicon.ca/" rel="nofollow ugc">Fedicon</a> 2026 🤞🏼 in Vancouver</li></ul>

It's well-known that we love the ActivityPub API at the Social Web Foundation.

I think it would be great for our community to have an ActivityPub API hackathon sometime this year -- hopefully this summer. Hackathons are a great way to engage a lot of developers really quickly. They also are a great way to test that an API has enough power to get people from zero to working app in a day or a weekend.

I see a few great times to do this:

Are there other good times/places for this kind of event?

hope.net

Hackers On Planet Earth (HOPE) Conference

HOPE (Hackers On Planet Earth) is an annual conference for hackers, makers, and tech enthusiasts based in New York City.

@evanp@ghost.evanp.me

One of the most interesting areas of exploration in the ActivityPub community right now is the ActivityPub API. Most people who know ActivityPub are familiar with its federation protocol, which lets social networking servers like Mastodon and Pixelfed share data between them. But there is another, closely-related feature in the same specification, called the "social API".

ActivityPub has five normative sections: 3 Objects, 4 Actors, 5 Collections, 6 Client-to-Server Interactions, and 7 Server-to-Server Interactions. 3, 4, and 5 provide a read-only interface to social data that is useful for both the federation protocol and the social API. It lets both clients and servers read information about users on the network, their feeds, and the things they make and share.

Section 6 is focused on the mechanism clients can use to create new activities, and the side-effects of those activities. "Activities" are the most important data structure in ActivityPub (which is why they're featured so prominently in the name!). They represent sentences or statements about things that happen on a social network, like "Christine created the image img123.jpg" or "Evan liked Christine's image img123.jpg" and "Amy shared Christine's image img123.jpg". Creating these statements is how clients can make things happen with ActivityPub.

Section 7 is focused on how and when servers can send these activities across the network to other servers. There are some side-effects that are laid out, but mostly they involve cache management.

So, here's the important point I want to make: the federation protocol which connects ActivityPub servers is defined in sections 3, 4, 5, and 7. The social API is defined in sections 3, 4, 5, and 6. But some people use "server-to-server" or "s2s" as a synonym for the federation protocol, even though "server to server interactions" only covers one section. Similarly, some people use "c2s" or "client-to-server" as a synonym for the social API, even if "client-to-server interactions" is only one section.

I prefer to use "social API" or "ActivityPub API" to refer to the entire part of ActivityPub that lets client apps talk to social servers. Here are some rough reasons why.

  • It's what the spec calls it. In the conformance section, we said that 'this specification defines two closely related and interacting protocols: A client to server protocol, or "Social API" [...] A server to server protocol, or "Federation Protocol"'. This was intentional; the names come from the Social Web Working Group charter deliverables. Making a Social API was a key goal of the group. The ActivityPub API satisfies that goal.
  • It's a term that all developers and many users are familiar with. People who've used mobile apps or third-party apps know what an API is and what it's for. If you use "c2s", it's not clear to most developers what you're even talking about.
  • It's accurate. The social API is a RESTful API that uses JSON, HTTP, and all the fun stuff that app developers are already familiar with.
  • It emphasizes what's already available. People often say that Mastodon does not implement the ActivityPub API. But it implements sections 3, 4, and 5 of the specification – it has to, in order to support the federation protocol. That's the entire read-only side of the API. All (almost all?) Fediverse servers support these parts of the spec, too. You can build a pretty OK read-only API client using what's already available from Mastodon and others; see https://acct.swf.pub/ for an example.
  • "c2s" doesn't cover the whole API. As I said above, only one section of the doc is called "Client-to-Server Interactions", and it doesn't cover the read-only side of the API.
  • "c2s" is insider jargon. c2s isn't a common term for RESTful APIs. It really isn't a common term at all; there are only a few protocol suites, like XMPP, that refer to the "c2s" and "s2s" part.

I think it's fine if others use "c2s" when talking about the API, or especially about section 6 of the ActivityPub spec. It's not going to cause any harm. But the Social Web Community Group task force on implementing the API is called the "ActivityPub API" task force. I think that's a good idea – it emphasizes the API. I intent to use this name and framing for the foreseeable future.

github.com

GitHub - swicg/activitypub-api: ActivityPub API Task Force repository.

ActivityPub API Task Force repository. Contribute to swicg/activitypub-api development by creating an account on GitHub.

@stroughtonsmith@mastodon.social

Speaking of the quality of Apple's Private Cloud Compute model…

🫥

Asking Apple's cloud model 'Who is the president of the united states?'

'The president of the united states is kamala harris'
ALT text

Asking Apple's cloud model 'Who is the president of the united states?' 'The president of the united states is kamala harris'

@s3_odara@mastodon.hakurei.win

Discordはもともとクローズドなので、開かれたコミュニティ志向でやってるプロジェクトで採用するのはどうかって話ではあったかも。

コミュニティをDiscordからMatrixへ段階的に移行しています。メンテナーとコントリビューターはすでにMatrixに移っているため、今後はMatrixのほうが返答が早くなります。Discordはしばらく継続しますが、Matrixがメインの場となりました。

詳細とMatrixルームの一覧はこちら:https://github.com/fedify-dev/fedify/discussions/573(英文)

github.com

We're moving our community to Matrix · fedify-dev/fedify · Discussion #573

Discord recently announced that it will be introducing mandatory age verification for all users. As the EFF has noted, this raises serious privacy concerns, especially given a recent data breach—th...

저희 커뮤니티를 Discord에서 Matrix로 조금씩 이전하고 있습니다. 메인테이너와 기여자들은 이미 Matrix로 옮긴 상태라, 앞으로는 Matrix 쪽이 응답이 더 빠를 거예요. Discord는 당분간 유지되지만, Matrix가 이제 메인 거점입니다.

자세한 내용과 Matrix 룸 목록은 여기서 확인하세요: https://github.com/fedify-dev/fedify/discussions/573.

github.com

We're moving our community to Matrix · fedify-dev fedify · Discussion #573

Discord recently announced that it will be introducing mandatory age verification for all users. As the EFF has noted, this raises serious privacy concerns, especially given a recent data breach—th...

We're gradually moving our community from Discord to Matrix. The maintainers and contributors are already there, so you'll get faster responses on Matrix going forward. Discord will stay up for a while, but Matrix is now our primary home.

For the full details and the list of Matrix rooms, see: https://github.com/fedify-dev/fedify/discussions/573.

github.com

We're moving our community to Matrix · fedify-dev/fedify · Discussion #573

Discord recently announced that it will be introducing mandatory age verification for all users. As the EFF has noted, this raises serious privacy concerns, especially given a recent data breach—th...