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

洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

1,099 following1,873 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 메인테이너. , , , 等으로 自由 소프트웨어 만듦.

()

@hongminhee@hollo.social

Read why's (poignant) Guide to Ruby and Dave Thomas's Pragmatic Programmer in high school in the mid-2000s and got obsessed. I went looking for a Rails shop for my first job. I loved that Ruby had Perl's hacker spirit and Smalltalk's elegant object system.

I moved on to other languages a few years later. Almost twenty years on, reading about the far-right politics of some of Ruby's most powerful people just makes me sad.

poignant.guide

Why's (Poignant) Guide to Ruby

A programming adventure for Ruby beginners illustrated with cartoon foxes.

@threedaymonk@sonomu.club
@julian@activitypub.space
<p><a href="http://httpsig.org/" rel="nofollow ugc">httpsig.org</a> is a site with one sole purpose, to advocate for the adoption of <a href="https://www.rfc-editor.org/rfc/rfc9421.html" rel="nofollow ugc">RFC 9421 HTTP Signatures</a>. It has a "Libraries" tab that does exactly what it advertises, it lists a bunch of libraries for you to use so you don't have to roll your own.</p> <p>If you want to integrate AP today, but you don't want to roll your own everything, where do you go? Who do you ask?</p> <p>All I know is:</p> <ul> <li><a href="https://fedify.dev/" rel="nofollow ugc">Fedify</a> → Typescript (thanks <a href="https://hollo.social/@hongminhee">@<bdi>hongminhee@hollo.social</bdi></a>!)</li> <li><a href="https://github.com/go-ap/fedbox" rel="nofollow ugc">FedBOX</a> → Go (thanks <a href="https://metalhead.club/@mariusor">@<bdi>mariusor@metalhead.club</bdi></a>!)[...]</li></ul>

httpsig.org is a site with one sole purpose, to advocate for the adoption of RFC 9421 HTTP Signatures. It has a "Libraries" tab that does exactly what it advertises, it lists a bunch of libraries for you to use so you don't have to roll your own.

If you want to integrate AP today, but you don't want to roll your own everything, where do you go? Who do you ask?

All I know is:

Do we even have a list sorted by language? This would be huge. What other AP frameworks do you know of?

Granted, I didn't do a lot of thinking and deep diving before I listed those two examples, but even then, that's 1 more example than is listed on https://activitypub.rocks, so I think I might be on to something here from a developer advocacy point of view.

If I were looking to integrate AP, one of the first conclusions I'd come to is that the protocol itself is fairly complex and a library or framework might help.

I don't think there is a list that plainly lists supported libraries by language.

activitypub.rocks

ActivityPub Rocks!

@hongminhee@hollo.social

ActivityPub assumes content is text/html by default when mediaType isn't specified, whether the object is a Note or an Article. Misskey does something different, for reasons I still don't fully understand. It stores its internal representation as MFM, its own markup language. Between Misskey instances, it sends that through a separate _misskey_content property rather than content itself. When talking to non-Misskey software, it converts HTML into MFM.

The trouble is that MFM can represent much less than HTML. If another implementation sends HTML that has no clean MFM equivalent, the formatting comes out mangled in Misskey.

I keep wondering why Misskey didn't just store HTML, like Mastodon and most other implementations do, or at least kept both the source markup and the rendered HTML side by side. I know storing only HTML can lose some MFM features too. I still don't understand why Misskey chose the format that can represent less.

github.com

misskey/packages/backend/src/core/MfmService.ts at 2026.7.0-rc.0 · misskey-dev/misskey

🌎 A completely free and open interplanetary-microblogging platform 🚀 - misskey-dev/misskey

@zeab@fosstodon.org
@hongminhee@hollo.social

中國語(중국어)로 「키보드 워리어」를 「鍵盤俠(건반협)」이라고 부른다는 걸 오늘 알게 되었다. 너무 재밌는 말이라 韓國語(한국어)輸入(수입)하고 싶을 程度(정도)이다.

newton.com.tw

鍵盤俠(網路詞語):出現背景,網路評論,出現原因,群體特徵,_中文百科全書

鍵盤俠(網路詞語)出現背景,網路評論,出現原因,群體特徵,

@dysfun@treehouse.systems

Domain Driven Development (DDD) - buying a domain name to attempt to force yourself to write the software it's for.

@osapon@mstdn.nere9.help

ActivityPubでちゃんと地震速報配信するなら、常にフォロワーが居る全サーバーのinboxに1セッション繋いだまま、いつでもデータを送れる状態で待機しとくしかないよ。

Some amusing timing: Vercel Labs just published scriptc, with a strikingly similar surface goal: compile JavaScript/TypeScript ahead of time to a small native executable, with no Node.js or V8 embedded. Apparently someone else wandered into roughly the same problem at roughly the same time. The design underneath is almost the opposite bet, though.

scriptc runs the real TypeScript 7 checker and treats its results as facts, lowering them into a typed IR with monomorphic arrays, exact records, tagged unions, and so on, then through LLVM or a C fallback. Anything outside that model, including any and plain JavaScript packages, needs --dynamic, which links QuickJS-ng as a separate island with its own heap and microtask queue. Values are copied and checked at the boundary. Its correctness evidence is 800+ differential tests against Node.js, rather than a spec-conformance claim.

Oseo trusts none of that. A value annotated number may still be a string at runtime, and the compiled generic path has to handle it without an escape-hatch VM. Typed and untyped code use the same native generic-plus-guarded model, and the target is versioned ECMA-262/test262 conformance rather than matching Node.js behavior. scriptc trusts the checker and isolates what it doesn't trust in another engine; Oseo trusts nothing, but has no second engine to isolate it into. scriptc is already a much broader, more mature Vercel Labs project. I just find the near-convergence from opposite directions rather pleasing.

Filip Jerzy Pizło, Fil-C's author and someone who makes dynamic languages fast for a living, left a fairly harsh critique of scriptc on Hacker News, worth reading in full. His core complaints, QuickJS-ng as the any fallback and floats-only numbers without integer inference, land on exactly the two bets Oseo refuses to make: a guard failure here falls through to already-compiled generic code, not an interpreter, and there's no static gamble on numeric representation to begin with.

@hongminhee@hollo.social · Reply to JKB

@jkb I'm not entirely sure about North America, but in East Asia—at least in Korea—generative AI is already being used a lot in the arts and commercial advertising, and it seems like typical office workers are using LLMs quite a bit as well.

@hongminhee@hollo.social

I get the impression that people are more open to generative AI like LLMs in North America than in Europe, and even more so in East Asia than in North America, and I'm curious as to why that is.

@reesericci@socialhub.activitypub.rocks

This FEP introduces Emoji Catalog, which provide a way for both clients and servers to publish and discover custom emoji.

ActivityPub implementations, including Mastodon, commonly support custom emoji. FEP-9098 defines how an Emoji is embedded in an Activity Streams object, but it does not define how a client discovers the emoji available for use when composing new content.

This leads to ActivityPub clients relying on implementation-specific APIs such as the Mastodon custom emoji endpoint.

A standardized emoji catalog allows a C2S client to:

  • Populate an emoji picker.
  • Determine which emoji the authenticated actor may use.
  • Retrieve emoji categories and static previews.
  • Update its local cache when the catalog changes.

Additionally, a standardized emoji catalog allows servers to publish custom emoji that other ActivityPub implementations can discover reliably.

Read full FEP at https://codeberg.org/fediverse/fep/pulls/888

codeberg.org

Add FEP-de8d: Emoji Catalogs

This FEP introduces Emoji Catalog, which provide a way for both clients and servers to publish and discover custom emoji. ActivityPub implementations, including Mastodon, commonly support custom emoji. FEP-9098 defines how an Emoji is embedded in an Activity Streams object, but it does not def...

@hongminhee@hollo.social · Reply to bgl gwyng

@bgl Yep, aware of Static Hermes. The big difference is that its annotations define a sound, stricter language: typed arrays aren't ordinary JavaScript arrays, and once something's annotated, that annotation is enforced, not just advisory. In Oseo an annotation is only a hint; a number can still turn out to be a string at runtime, and the compiled generic path has to handle that correctly regardless. Static Hermes also still routes untyped code through Hermes's own interpreter and JIT tiers, so it's really two systems stitched together. Oseo has no VM tier at all: typed and untyped values share one JavaScript semantics, and annotations only pick which already-compiled native path runs. Different platform too: Static Hermes lives inside React Native's engine, Oseo is aiming to be a self-contained native binary, server-side for now.

@tesaguri@fedibird.com

分散ネットワークにおける決済の手段として暗号通貨は自然な選択肢の一つだと思うけど(Fediverseのサーバを跨ぐやり取りで特定のプラットフォーム(たとえそれがOpen Collectiveだったとしても)をハードコードするわけにはいかないだろうし)、ホストしているサービスの規約の都合からFEPチームの意思によらずFEPで暗号通貨に言及できなくなるというのは深刻なリスクでは

@qdot@buttplug.engineer

inspired by CLAUDE.md, I’ve started putting markdown files named after coworkers into work code repos so I can remind them to stop doing shit to the codebase that annoys me

for some reason they’re all mad at me now, which means ill be adding commands to JEREMY.md for an attitude adjustment

@hongminhee@hollo.social · Reply to bgl gwyng

@bgl Different goals, really. AssemblyScript is its own statically-typed language that happens to look like TypeScript: it accepts a strict subset of the syntax, wants explicit types like i32/f64 rather than dynamic values, and doesn't implement JavaScript's actual object and prototype semantics. You write new code specifically within those constraints to get compact WebAssembly out. Oseo is trying to keep full ECMA-262 dynamic semantics, arbitrary shapes, any, all of it, and still reach native code, with types and JSDoc used only as opt-in hints that fall back to a compiled generic path whenever they're wrong. AssemblyScript trades JavaScript semantics for a clean path to WebAssembly; Oseo is betting it doesn't have to make that trade. Similar-looking syntax, close to opposite premises.

@hongminhee@hollo.social

That JavaScript/TypeScript runtime idea I mentioned has mutated a bit.

Once I actually thought about it, writing another Node.js/Deno/Bun-shaped runtime didn't seem especially useful; there are enough of those already. What I actually want to try is an ahead-of-time JavaScript/TypeScript compiler in roughly the SBCL/Chez Scheme tradition: native code, with a generic implementation always available and specialized versions picked by cheap runtime guards. A failed guard just falls through to code that's already compiled, rather than needing an interpreter or a deopt path. There are probably adjacent projects doing pieces of this, so I won't claim the territory is empty, but I haven't seen this exact shape applied to JavaScript/TypeScript. I've codenamed it Oseo (鼯鼠; flying squirrel in Sino-Korean).

It's still just a compiler experiment, not something I'd call presentable yet, so the repo stays closed for now. Once it works well enough, the first thing I want to try is switching the Fedify CLI, currently built with deno compile, over to Oseo and seeing what breaks. Fedify is the ActivityPub server framework I also maintain, so it should make a reasonably unforgiving first customer. I'll keep picking at Oseo for the next few months and post again when something interesting starts working.

@smallcircles@social.coop

Major updates were made to the delightful fediverse curated lists..

💎 delightful fediverse experience

- 52 new projects added
- 50 projects marked unmaintained
- 15 projects updated

New list categories:

- Professional networks
- Instant messaging
- Search engines
- Security and privacy

delightful.coding.social/delig

💎 delightful fediverse development

- 18 new projects added
- 20 projects marked unmaintained
- 5 projects updated
- 7 projects removed
- Improved table of contents
- Listed SWICG / SocialCG task forces
- More improvements pending

New list categories:

- SWICG Task forces
- Data portability
- Developer hubs
- Data formats

delightful.coding.social/delig

💎 delightful fediverse clients

- 16 new projects added
- 33 projects marked unmaintained
- 5 projects updated
- 3 projects removed
- Separate section for unmaintained

delightful.coding.social/delig

delightful.coding.social

delightful fediverse clients

Delightful curated lists of free software, open science and information sources.

@liaizon@wake.st

"artist-alley implements ArchivePub, an open federation protocol built on the ActivityPub data model with DAM-shaped extensions for asset sharing, workflow state, and brand workspaces."

"Content-addressed federation:
Every reference to asset bytes uses a content-addressed URI:
cas://<sha256>?content-type=image/png&size=12345"

artist-alley.org/docs/archivep

artist-alley.org

ArchivePub

ArchivePub — the open, ActivityPub-shaped federation protocol that lets independently-operated DAM instances share assets, reviews, and workflow state. Wire format, trust model, and the canonical protocol context.

@evan @siliconsjang Oh, yes! I once introduced SiliconBeest before!

@hongminhee@hollo.social

A friend of mine, @siliconsjang, released SiliconBeest v1.0.0 today. It's a server built on Workers, D1, R2, and Queues, using Fedify.

I like the starting point: after watching fediverse servers go down together during Cloudflare outages, they thought, why not just run on Cloudflare directly?

They're aiming for something cheap enough that a small instance can stay on Cloudflare's free plan, and a somewhat bigger one can fit in the $5/month tier. It's still early; a lot is missing, and Mastodon/Misskey API compatibility is more of a long-term goal.

I'm glad to see Fedify put to use for something like this. Worth checking out.

The source code is on GitHub under AGPL 3.0.

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers + live serverless code

Fediverse in Cloudflare Workers + live serverless code - SJang1/siliconbeest

looks really interesting! The previous implementation of on , , was kind of a hassle to spin up. I'm interested to see what the uptake is with this one. The creator @siliconsjang says they want to make it fit in the $5/month tier at CloudFlare, which sounds pretty good. Also, cool to see that it uses for federation.

github.com/SJang1/siliconbeest

github.com

GitHub - SJang1/siliconbeest: Fediverse in Cloudflare Workers

Fediverse in Cloudflare Workers. Contribute to SJang1/siliconbeest development by creating an account on GitHub.