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

洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

1,114 following1,902 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 · Reply to FediChatBot

@FediChatBot What I liked about LangChain.js was that it allows me to deal with various LLMs with a consistent API, making it easy to replace an LLM with another LLM while creating an LLM app. Are there any other TypeScript libraries with such features?

@hongminhee@hollo.social

@FediChatBot I'm currently using a MacBook Pro M1 Max (32GB RAM, 512GB SSD), but I'm finding the storage to be too small. I'm considering buying a new MacBook Air, but since the latest M3 model doesn't support 32GB of RAM, I'm wondering if I should wait for the M4 model. Based on the release history of the MacBook Air series, is it possible to roughly predict when the MacBook Air M4 model might be released? Also, can we make any educated guesses on whether the MacBook Air M4 model will support 32GB of RAM?

@dansup@mastodon.social

The fediverse is needed now more than ever, please support your favourite projects!

You can find donation links on some FediDB software listings

fedidb.org/software/mastodon

(Want a donation link added to your project? Send a PR to github.com/fedidb/communityDB)

github.com

GitHub - fedidb/communityDB: Human curated fediverse software data

Human curated fediverse software data. Contribute to fedidb/communityDB development by creating an account on GitHub.

@esurio1673@c.koliosky.com

ed25519署名に対応してるのHolloとかMitraあたり

@botkit@hollo.social

What's a higher priority for :botkit: ?

  • Releasing 0.1.05 (50%)
  • Node.js and Bun support1 (10%)
  • More event handlers2 (20%)
  • More actions (e.g., emoji reactions)0 (0%)
  • More docs2 (20%)
@forgefed@floss.social

- Networked actors in Haskell! forgefed.org/blog/networked-ac

- We've used all our 2024 budget, yay! Waiting to sign the 2025 grant with NLnet

- I want to make ForgeFed practical and usable for implementors! Are you a forge feveloper? Let's talk <3

- I'm going to try carving a shortest path towards a federated collaboration demo with usable UI - more on that soon!

--Pere

forgefed.org

ForgeFed

@stefan@stefanbohacek.online

Oh nice, Mastodon is getting an alt text reminder.

github.com/mastodon/mastodon/p

A popup dialog titled "Add alt text?"

The message says: "Your post contains media without alt text. Adding descriptions helps make your content accessible to more people"

Buttons below are:

- Cancel
- Post anyway
- Add alt text 

The last button is emphasized with a background color, the first two are styled as simple links.
ALT text

A popup dialog titled "Add alt text?" The message says: "Your post contains media without alt text. Adding descriptions helps make your content accessible to more people" Buttons below are: - Cancel - Post anyway - Add alt text The last button is emphasized with a background color, the first two are styled as simple links.

@markus@skvip.lol
@botkit@hollo.social · Reply to BotKit by Fedify :botkit:
Like

The onLike event handler is called when someone likes messages on your bot or actors your bot follows. It receives a Like object, which represents the like activity, as the second argument.

The following is an example of a like event handler that sends a direct message when someone likes a message on your bot:

bot.onLike = async (session, like) => {
  if (like.message.actor.id?.href !== session.actorId.href) return;
  await session.publish(
    text`Thanks for liking my message, ${like.actor}!`,
    { visibility: "direct" },
  );
};

Unlike

The onUnlike event handler is called when someone undoes a Like activity on messages on your bot or actors your bot follows. It receives a Like object, which represents the Like activity which was undone, as the second argument.

The following is an example of an unlike event handler that sends a direct message when someone undoes a like activity on a message on your bot:

bot.onUnlike = async (session, like) => {
  if (like.message.actor.id?.href !== session.actorId.href) return;
  await session.publish(
    text`I'm sorry to hear that you unliked my message, ${like.actor}.`,
    { visibility: "direct" },
  );
};
ALT text

Like The onLike event handler is called when someone likes messages on your bot or actors your bot follows. It receives a Like object, which represents the like activity, as the second argument. The following is an example of a like event handler that sends a direct message when someone likes a message on your bot: bot.onLike = async (session, like) => { if (like.message.actor.id?.href !== session.actorId.href) return; await session.publish( text`Thanks for liking my message, ${like.actor}!`, { visibility: "direct" }, ); }; Unlike The onUnlike event handler is called when someone undoes a Like activity on messages on your bot or actors your bot follows. It receives a Like object, which represents the Like activity which was undone, as the second argument. The following is an example of an unlike event handler that sends a direct message when someone undoes a like activity on a message on your bot: bot.onUnlike = async (session, like) => { if (like.message.actor.id?.href !== session.actorId.href) return; await session.publish( text`I'm sorry to hear that you unliked my message, ${like.actor}.`, { visibility: "direct" }, ); };

@hongminhee@hollo.social

@FediChatBot I heard that now you may like messages replying to you or mentioning you if these are positive, thanks to 's recent changes (see the attached screenshots too). Is it true?

(Please don't answer me in Korean, but English.)

Automatically liking mentions

It is simple to automatically like mentions of your bot. You can use the onMention event handler and the Message.like() method together:

bot.onMention = async (session, message) => {
  await message.like();
};
ALT text

Automatically liking mentions It is simple to automatically like mentions of your bot. You can use the onMention event handler and the Message.like() method together: bot.onMention = async (session, message) => { await message.like(); };

Liking a message

You can like a message by calling the like() method:

const message = await session.publish(
  text`This message will be liked.`
);
await message.like();

CAUTION

You may call the like() method on a message that is already liked, but it will not raise an error. Under the hood, such a call actually sends multiple Like activities to the fediverse, whose behavior is undefined—some servers may ignore the duplicated activities, some servers may allow them and count them as multiple likes.

If you need to undo the liking, you can call the unlike() method:

const like = await message.like();
await like.unlike();
ALT text

Liking a message You can like a message by calling the like() method: const message = await session.publish( text`This message will be liked.` ); await message.like(); CAUTION You may call the like() method on a message that is already liked, but it will not raise an error. Under the hood, such a call actually sends multiple Like activities to the fediverse, whose behavior is undefined—some servers may ignore the duplicated activities, some servers may allow them and count them as multiple likes. If you need to undo the liking, you can call the unlike() method: const like = await message.like(); await like.unlike();

@botkit@hollo.social

now allows your bot to like or unlike other messages!

Automatically liking mentions

It is simple to automatically like mentions of your bot. You can use the onMention event handler and the Message.like() method together:

bot.onMention = async (session, message) => {
  await message.like();
};
ALT text

Automatically liking mentions It is simple to automatically like mentions of your bot. You can use the onMention event handler and the Message.like() method together: bot.onMention = async (session, message) => { await message.like(); };

Liking a message

You can like a message by calling the like() method:

const message = await session.publish(
  text`This message will be liked.`
);
await message.like();

CAUTION

You may call the like() method on a message that is already liked, but it will not raise an error. Under the hood, such a call actually sends multiple Like activities to the fediverse, whose behavior is undefined—some servers may ignore the duplicated activities, some servers may allow them and count them as multiple likes.

If you need to undo the liking, you can call the unlike() method:

const like = await message.like();
await like.unlike();
ALT text

Liking a message You can like a message by calling the like() method: const message = await session.publish( text`This message will be liked.` ); await message.like(); CAUTION You may call the like() method on a message that is already liked, but it will not raise an error. Under the hood, such a call actually sends multiple Like activities to the fediverse, whose behavior is undefined—some servers may ignore the duplicated activities, some servers may allow them and count them as multiple likes. If you need to undo the liking, you can call the unlike() method: const like = await message.like(); await like.unlike();

@me@hollo.woojinkim.org

@aharo 안녕하세요. 지나가던 오픈월드 처돌이입니다. 고전은 아니지만 지난 한 십 몇 년 사이에 나온 오픈월드 게임들을 플레이할때 종종 조난당한 상태를 피하지 않는데요, 종종 멀리 떨어진 곳에 퀘스트 하러 가야 하면 순간이동 할 수 있는 메커닉이 있더라도 굳이 직접 이동하는 쪽을 선택하곤 합니다. 그래서 길 잃은 상태가 오히려 목적 없이 세계를 구경하고 한 숨 돌릴 수 있는 순간으로 인식되는 것 같아요.

우주 배경은 사실 ...... 좀 어려울 것 같지만 도시 배경인 게임에서는 여기가 어딘지 도통 모르겠어서 퀘스트로 돌아갈 수 없을 때 기차길을 따라가거나 저 멀리 보이는 도시의 실루엣을 향했던 것 같아요. 또 중세 판타지 배경이라면 강을 따라가 마을에 닿기도 했는데 이게 우연이 아니라 애초부터 이런 의도로 디자인한 것은 아닐까 하는 생각을 문득 해봤습니다.

@geeknews_bot@sns.lemondouble.com
@andypiper@macaw.social

The Ghost approach to looks great. They get it. Real engagement and ongoing conversations not just broadcasting. I had a similar experience when Mastodon replies started showing up as comments in WordPress, but Ghost is really building this into the core with the reader view as well. “You can’t be on the social web without being social.”