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

洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

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

()

@lobsters@mastodon.social
@hongminhee@hackers.pub

The wall of configuration

For years I worked in Python and dreamed in Haskell on weekends. When I needed a script, Python. When I wanted the type system to hold me accountable, Haskell. Somewhere between the two sat TypeScript, and I knew it. Practical where Haskell is austere, typed where Python isn't. But I kept my distance. tsconfig.json, .eslintrc, .prettierrc, babel.config.js. Files you have to create before you've written a single line of actual code. Every time I thought about trying it, I looked at the list and gave up. The JavaScript ecosystem always felt to me like an amusement park where you have to wait in a long queue just to get inside.

Deno dissolved that queue. No configuration files, no node_modules, no agonizing over which package manager to use. Just deno run main.ts. The first time I actually wrote TypeScript properly, I couldn't understand why I'd put it off so long. What I'd been avoiding wasn't TypeScript. It was the ritual surrounding TypeScript.

What hooked me

At first I couldn't point to one killer feature. The appeal was that everything seemed to be pulling in the same direction. The fetch() I used in browsers worked the same way on the server. Web Crypto API was just there. MDN effectively became Deno's documentation. Instead of installing packages, you imported ESM by URL, thinking about dependencies in an entirely different way.

Having deno fmt, deno lint, deno test, deno bench, and deno check all in a single binary was part of the same logic. No installing ESLint, no wiring up Prettier, no untangling configuration conflicts between the two. That convenience had an attitude behind it.

The pattern was obvious enough: build on web standards, then ship the boring tools yourself.

Chasing Node.js

Today's Deno feels like it's drifting away from that.

npm: specifier support, node_modules back in play, node:* module compatibility. Then in Deno 2.8, deno add without a specifier now adds an npm package by default. JSR was introduced as an answer to npm's stagnation, as the future of JavaScript packaging. These decisions make that announcement look distant. I can understand each one in isolation. Put them together, though, and the shape is hard to ignore: Deno is spending more and more of its energy catching up to Node.js.

The OS/2 story comes to mind. IBM expected that building Windows compatibility into OS/2 would pull Windows users across. What actually happened was the opposite: developers realized they could target Windows and have it run on both platforms, so there was no reason to learn the OS/2 API separately. Deno pushing further toward Node.js compatibility has the same dynamic. The more compatible Deno becomes, the less reason library authors have to think about it specifically.

Meanwhile, Node.js has been walking toward Deno. TypeScript runs without flags as of v22. A permission model arrived in v20. fetch() and Web Crypto API are both there now. node:test and node:assert/strict have quietly become the best cross-runtime test harness for projects targeting Deno, Node.js, and Bun alike. The two runtimes are converging, but Deno seems to be doing more of the reaching.

Early Deno set the agenda. Web standards, the permission model, URL imports, JSR: Deno put these down and the ecosystem responded. What Deno is doing now runs in the opposite direction, catching up to what the ecosystem already has.

On the defensive

There's a more specific frustration here. Deno had a fight it could have led rather than chased.

What drove me away from the JavaScript ecosystem wasn't Node.js itself. It was the full combination: Node.js + npm + TypeScript + Vite + ESLint + Prettier + Vitest. That stack was the problem, and Deno was already doing well against it. deno fmt, deno lint, deno test, deno bench, deno check, and in 2.4, deno bundle came back. It had been deprecated once and then restored; that round trip is its own admission that the direction was right.

The most visible gap that remains is the dev server: HMR, live reload, an asset pipeline, and the plugin ecosystem that accumulates on top of all that. Fresh 2.0, Deno's own framework, chose not to fill that gap from within Deno and adopted Vite instead. That disappointed me. Making Vite run well on Deno and making Deno a self-sufficient development environment are two entirely different directions. Once your own framework makes that choice, you can't expect the wider ecosystem to go the other way.

But vertical integration alone might not have been enough. Individual component quality matters too. If deno lint and deno fmt were clearly better than ESLint and Prettier, developers would reach for them even in Node.js projects. That could have been the Trojan horse. Once enough projects are using Deno's tools without using the Deno runtime, the next question follows naturally. ESLint and Prettier seemed unmovable, and yet Biome and the Ox series (Oxlint, Oxfmt) are finding their footing. The market was always there. Better tools just weren't. Deno could have gotten there first.

The clock I keep thinking about

Why didn't Deno hold the course? This is speculation, but here's my read.

The integrated toolchain path required patience. Getting developers to feel the pain of configuration complexity, making Deno the place they move to, waiting for the ecosystem to grow comfortable with Deno's way of doing things. All of that takes time. Node.js is a community project under the OpenJS Foundation. There's no investor clock pushing it, and the project doesn't wobble if the ecosystem moves slowly.

Deno Land Inc. is different. A VC-backed company has a clock. How long that clock allows for a patient fight is not the same as what a community project can afford. Expanding Node.js compatibility produces visible results faster than the slow alternative. From the outside, I can't tell when I'm seeing a product decision and when I'm seeing a runway decision. What I can say is that the urgency Deno has been showing doesn't sit well with the direction it originally chose.

Even so

For all my griping, I still build most of my own libraries Deno-first. I publish to JSR even when I also publish to npm. I try to depend only on web standard APIs, and I use Deno's built-in tools for linting and formatting. I'm still rooting for Deno.

But even I have retreated in places. I now rely on node:test and node:assert/strict for testing, because it's the easiest way to run the same tests across Deno, Node.js, and Bun without any special dependencies. JSR was launched as an answer to npm's stagnation, and I've started to feel JSR stagnating too. I often catch myself wondering whether to drop it. I got excited about Deno KV and now I just use node:sqlite, which runs fine on Deno anyway.

If someone like me is already making these retreats, I wonder what Deno looks like to someone with no attachment to it at all. That worries me, because I still want Deno to win some version of this fight. I'm just less sure lately that Deno wants to win the same fight I signed up for.

nodejs.org

Assert | Node.js v26.3.0 Documentation

@cjk@chaos.social

Just merged the commit graph feature branch

Git GUI displaying a commit graph with branching and merge history, branch and tag labels, and a detailed view of the selected commit with file changes in light mode
ALT text

Git GUI displaying a commit graph with branching and merge history, branch and tag labels, and a detailed view of the selected commit with file changes in light mode

Git GUI displaying a commit graph with branching and merge history, branch and tag labels, and a detailed view of the selected commit with file changes in dark mode
ALT text

Git GUI displaying a commit graph with branching and merge history, branch and tag labels, and a detailed view of the selected commit with file changes in dark mode

@hongminhee@hollo.social

聯合宇宙(연합우주) 처음 始作(시작)한 건 아마 2017年頃(년경)? 트剩餘(잉여)計定(계정) 만들었다가 잘 適應(적응) 못 하고, mastodon.social로 갔던 것 같다. 그 뒤로 國漢文(국한문)으로 글 쓰는데 사람들이 읽기 不便(불편)하다고 하니까 國漢文(국한문)自動(자동)으로 <ruby>로 한글 讀音(독음) 붙게 하는 機能(기능)必要(필요)해서 直接(직접) ActivityPub 소프트웨어 具顯(구현)할 생각을 했고… 그 뒤로는…

@hongminhee@hollo.social

聯合宇宙(연합우주) 처음 始作(시작)한 건 아마 2017年頃(년경)? 트剩餘(잉여)計定(계정) 만들었다가 잘 適應(적응) 못 하고, mastodon.social로 갔던 것 같다. 그 뒤로 國漢文(국한문)으로 글 쓰는데 사람들이 읽기 不便(불편)하다고 하니까 國漢文(국한문)自動(자동)으로 <ruby>로 한글 讀音(독음) 붙게 하는 機能(기능)必要(필요)해서 直接(직접) ActivityPub 소프트웨어 具顯(구현)할 생각을 했고… 그 뒤로는…

@hongminhee@hollo.social

Are there any F/OSS alternatives to issue trackers like JIRA or Linear? I'd like something that's easy to use and works well for both engineering and non-engineering teams.

@kecan0406@hackers.pub

사회복무요원이라 오픈소스 컨트리뷰션 아카데미 참여 꺼리신분들 참고하시면 좋겠습니다. 복무기관에 겸직허가만 되면 원활하게 참여 가능하다고 합니다.

OSS 사회복무요원 참가 제약 문의 메일
ALT text

OSS 사회복무요원 참가 제약 문의 메일

@g92o4k73la@discuss.privacyguides.net

Due to recent regulation changes (전기통신사업법), the South Korean government is requiring internet communities and forum owners to scan every user uploaded images and videos on their website, by AI.The hardware to run these AI models are also not provided by government, website owners have to buy datacenter grade Nvidia GPUs by themselves, putting financial pressure to small businesses and forums.

Websites will need to implement these hardware and software features, starting immediately from July 1st, which is just next month.

Here is the original image provided from Korean government, specifying the hardware requirements for AI models. I also added English translated image, made with nano banana (sorry for using ai for this...)

Related article (in Korean):

https://www.gameple.co.kr/news/articleView.html?idxno=215562

Post from Korean forum/news website(루리웹) owner, after listening briefing from Korean government, expressing how ridiculous the situation is:

https://bbs.ruliweb.com/community/board/300143/read/75437741?search_type=member_srl&search_key=7219

This feels really dystopian, even for South Korean standards.

IMG_2598.WEBP
ALT text

IMG_2598.WEBP

translated.jpg
ALT text

translated.jpg

IMG_2598.WEBP
ALT text

IMG_2598.WEBP

translated.jpg
ALT text

translated.jpg

favicon.png
ALT text

favicon.png

215562_244684_716.jpg
ALT text

215562_244684_716.jpg

favicon.png
ALT text

favicon.png

IMG_2598.WEBP
ALT text

IMG_2598.WEBP

translated.jpg
ALT text

translated.jpg

@hongminhee@hollo.social

Small fedi badge update: the service has moved to a new domain. Please update your badges to use fedi-badge.minhee.org instead of fedi-badge.deno.dev. The old domain will stop working in July.

I also shipped a couple of related changes. Badges can now show the logo of the software an instance is running, like Mastodon, Misskey, Pleroma, and a few others, detected via NodeInfo. If the software isn't recognized, it falls back to the generic fediverse logo.

The service also moved from Deno Deploy Classic, which is sunsetting, to Cloudflare Workers.

Various types of fedi badges. New fedi badges have their software logos too.
ALT text

Various types of fedi badges. New fedi badges have their software logos too.

@hongminhee@hollo.social

Small fedi badge update: the service has moved to a new domain. Please update your badges to use fedi-badge.minhee.org instead of fedi-badge.deno.dev. The old domain will stop working in July.

I also shipped a couple of related changes. Badges can now show the logo of the software an instance is running, like Mastodon, Misskey, Pleroma, and a few others, detected via NodeInfo. If the software isn't recognized, it falls back to the generic fediverse logo.

The service also moved from Deno Deploy Classic, which is sunsetting, to Cloudflare Workers.

Various types of fedi badges. New fedi badges have their software logos too.
ALT text

Various types of fedi badges. New fedi badges have their software logos too.

@sabrinkmann@hachyderm.io

Tmw at the I will talk about what cool and awesome Activitpub/Fediverse project which are NOT (Social) Media or blogging (in german).
Some of the projects I will talk about will be:
codeberg.org/flohmarkt/flohmar
@manyfold
github.com/open-wanderer/wande
@encyclia
@fitpub
codeberg.org/54GradSoftware/me

Do you have any other projects one should mention in the talk?
I only have 20min but I will try my best.

codeberg.org

menuverse

menuverse

@hongminhee@hollo.social

なるほど。漢語の「旅券」という表現が公式にはより好まれる一方、日常的にはカタカナの「パスポート」のほうが好まれるのですね。理解しました。

参考までに、韓国では「旅券(여권)」という表現だけを使い、「패스포트(パスポート)」と言っても普通は意味は通じますが、韓国語ではなく英語だという認識が強いです。

@jj1bdx.tokyo@bsky.brid.gy · Reply to 洪 民憙 (Hong Minhee) :nonbinary:

日本政府の公式名称は「旅券」です。問題なく通じます。ただ、公務員でない人達は知らないかもしれません。なにしろ旅券の普及率が低い国なので…。

@novik_st@ak2.suzu-ya.info
パスポートを旅券と書くと、とても行政文書的な感じがする(わたしはちょっとカッコいいとも思って使うことがある🤣)
@hongminhee@hollo.social

日本では「旅券」という言い方はあまり使わないんでしょうか?普通「パスポート」って表現しか聞いたことがない気がして。

@hongminhee@hollo.social

()9() 全國同時地方選擧(전국동시지방 선거) 投票(투표) 完了(완료)!

第9回 全國同時地方選擧 投票 認證 寫眞. 背景에는 「聖水1街第1洞 第4投票所」라고 적힌 案內板이 附着되어 있고, 그 앞쪽으로 붉은색 投票 圖章(卜 模樣)이 鮮明하게 찍힌 揭示者 洪民憙의 오른손 주먹이 놓여 있다.
ALT text

第9回 全國同時地方選擧 投票 認證 寫眞. 背景에는 「聖水1街第1洞 第4投票所」라고 적힌 案內板이 附着되어 있고, 그 앞쪽으로 붉은색 投票 圖章(卜 模樣)이 鮮明하게 찍힌 揭示者 洪民憙의 오른손 주먹이 놓여 있다.

@sabrinkmann@hachyderm.io · Reply to Samuel Brinkmann

The software is built with @fedify and uses Nuxt for the server and server-side rendering. This is my first bigger Fedify project, so I'm looking for improvements and best practices.
The Fediverse data structure is built on top of: codeberg.org/fediverse/fep/src.
From the data point of view, this includes the proposal and resourceConformsTo field, which links to an URI. Like: mensa.mahlzeitheute.de/users/f.
Behind this is a JSON LD with a description of the food. As someone who is gluten intolerant, the allergen information is quite relevant and interesting. I'm not sure if this is the best way, and I'm interested what others would do. [2/4]

@zundan@mastodon.zunda.ninja · Reply to zunda