Following
Public ActivityPub posts from actors connected with @me@changkyun.kim.


今年(금년) 中(중)에 日本(일본) 한 番(번) 가고 싶은데, 갈 理由(이유)가 딱히 없다… JSConf JP 2026 發表(발표)도 떨어졌고… 😂

Quick update: implementation of FEP-22cd has started in Fedify (PR #1038). Once it's reviewed and merged, it'll ship in Fedify 2.4.0, which I'm aiming to release within September.



《한겨레》에서 만든 〈나는 얼마나 進步(진보) 或은(혹은) 保守(보수)일까?〉 테스트를 해 봤는데, 「全(전)國民(국민) 中(중) 99%보다 進步(진보) 性向(성향)입니다」라고 떴다. https://policy-survey-2026.hani.co.kr/results?s=0015yJot

I've been working on a FEP draft for the past few days: FEP-22cd Attributing translations. Hackers' Pub already machine-translates articles, but I want authors to be able to publish their own translations too, and let organizations split the work across members. Once you do that, Activity Streams doesn't give you much to work with. attributedTo names an author, not a translator. Nothing distinguishes a language a human translated from one an AI produced. And nothing says whether a translation still matches the current text or was written against an older version of the article. Schema.org already has translator, translationOfWork, and inLanguage for exactly this, so the FEP mostly reuses those instead of minting new vocabulary. I had to decide whether to give each language its own object, linked back to the original, or keep everything on one object the way contentMap already does. Splitting it looked cleaner at first, but it also means spreading replies and reactions across separate posts for each translation. I don't want adding a translation to split the conversation. I kept everything on one object, using contentMap for the text in each language. The draft adds a translations property to record who translated each version and whether it was translated by a human, generated by a machine, or generated by a machine and reviewed by a human. A timestamp lets you tell whether a translation still matches the current text, without publishing the server's private edit history. You can discuss it on SocialHub or in the draft PR. If you run anything that touches multilingual content, I'd like to hear where this breaks. RE: https://socialhub.activitypub.rocks/t/fep-22cd-attributing-translations/8897/1

Optique 1.3.0 is out. Optique is a type-safe combinatorial CLI parser for TypeScript. Most of this release closes out a long-running effort to fix dependency sources: parsers that read a value another parser resolved, whether from bindEnv(), bindConfig(), or an interactive prompt. Before 1.3.0, whether that value actually reached its reader depended on which order you declared the two parsers in. It doesn't anymore. derivePromptConfig() builds on that fix, letting one prompt's choices adapt to an answer you gave earlier in the same run, so a package manager prompt can offer different options depending on which framework you just picked. Two new packages ship alongside it: @optique/keyring reads a password from the OS credential store instead of a config file, and @optique/testing gives you four ways to test an Optique-based CLI without parsing rendered stderr. https://github.com/dahlia/optique/discussions/963


夏目祐樹さんが続けてLogTapeについて二本記事を書いてくださいました。一本目はCloudflare Workersでエラーのcauseやスタックトレースが正しく出力されない問題をきっかけに、LogTapeの導入方法やカテゴリによる階層構造を実際に動かしながら解説してくれています。二本目は@logtape/redactionパッケージによるログのマスキングがテーマで、正規表現で値そのものを隠すパターンベースのマスキングと、フィールド名ごと除外・置換するフィールドベースのマスキングの両方を、コードと出力例つきで丁寧に紹介してくれています。 https://dev.classmethod.jp/articles/using-js-ts-logging-library-logtape/ https://dev.classmethod.jp/articles/log-masking-on-logtape/
요약: 사생활 침해를 안하는 TV를 찾으려면 광고가 없는 제품을 구하시면 됩니다. 광고는 유저 행동에 따라 운영되는데, 광고가 내장되어 있지 않은 TV를 수소문해보니 달랑 하나 밖에 없었다고... 블랙박스 상태의 ACR 네트워크 패턴을 구별하는 테스트가 내가 하는 일인 광고 차단 필터 엔지니어의 접근 방식과 비슷해서 흥미롭게 봤다. How we tested: We set up ever device twice, once with ACR(Automatic Content Recognition) enabled and once twit it disabled, and captured its network traffic using Wireshark. Because that traffic is encrypted we couldn't see the exact data being sent, but we could compare destination host names, timing, traffic volume, and changes in network behavior. So, we started looking for ACR related traffic patterns.

Kagi Translate is the machine translation service I reach for most. I've tried Google Translate, DeepL, Papago, and others over the years, and for the language pairs I mostly work with (Korean, English, Japanese, and Chinese) Kagi Translate has consistently come out ahead in quality. It's a little slow, but that's never bothered me: I don't copy-paste raw machine output and call it done, I always review and edit by hand, so the extra seconds don't matter. I'd been recommending it to people for a while, until earlier this year it went from free to paid and got harder to suggest in good conscience. Now it's free again. If you've never used anything but Google Translate, this is a good moment to give Kagi Translate a try.


JavaScript/TypeScript向けの次世代メールライブラリ、Upyo 0.6.0のリリースに合わせて、Nodemailerのような定番のライブラリがある中でなぜUpyoを選ぶ価値があるのかを書きました。 https://zenn.dev/hongminhee/articles/87c258a39ab83a

JavaScript/TypeScript를 爲(위)한 次世代(차세대) 이메일 라이브러리인 Upyo 0.6.0의 릴리스를 맞이하여, Nodemailer 같은 有力(유력)한 旣成(기성) 라이브러리를 두고 왜 Upyo를 쓰는 게 좋은지 說明(설명)하는 글을 써 보았습니다. https://hackers.pub/@hongminhee/2026/upyo-email-decoupled-from-where-and-how/ko RE: https://hackers.pub/@hongminhee/2026/upyo-email-decoupled-from-where-and-how

To mark the release of Upyo 0.6.0, a next-generation email library for JavaScript/TypeScript, I wrote a post on why it's worth choosing over an established library like Nodemailer. https://hackers.pub/@hongminhee/2026/upyo-email-decoupled-from-where-and-how

I've released Upyo 0.6.0, an email library for JavaScript and TypeScript that works across Node.js, Deno, Bun, and edge runtimes. This version adds MIME composition without sending, streaming attachments over SMTP, and calendar invitations. You can also set message identifiers for tracking replies and check SMTP or JMAP configuration without sending a test email. There are new Maileroo and Mailtrap transports, plus a LogTape integration for logging delivery or trying out email workflows locally. https://github.com/dahlia/upyo/discussions/75

@bootlegrydia Oh, that's interesting. I've actually never even seen the character 氪 before.

Drew DeVault (@drew) has compiled a sourced list tracking prominent figures in the F/OSS community and their controversial/far-right political ties and conduct: https://drewdevault.com/weird-guys/ Quite an illuminating look at the dynamics and power structures across the F/OSS ecosystem.

@cwboden I'd only ever heard of SyncThing by name, but I see now that this is exactly the kind of situation it's for! Thanks for letting me know.

I wish something like Android's Quick Share or Apple's AirDrop would get standardized so we could easily transfer files regardless of the platform. I wonder if there's already a standard for that?

JSConf JP 2026からCFPの不採択メールが来た。でもCFPを二つ出したのに、不採択メールは一通しか来なかった。もしかして、もう一つのCFPは通ったのかな?とりあえず、もう少しだけ待ってみることにしよう…

@Yoxem 在韓語中,【死語】似乎也同時具備這兩種含義。現代韓語詞彙受日語影響很深,所以我認為這可能是受了日語的影響。 順帶一提,在《標準國語大辭典》中,【死語】被定義為「過去曾使用但現在已不再使用的語言。或指這類單詞。例如古希臘語、古拉丁語等」。

今週(금주) 日曜日(일요일)(6日(일))에 瑞草驛(서초역) 近處(근처)에 位置(위치)한 오픈업 센터(네이버地圖(지도), 카카오맵)에서 @fedify 寄與(기여)를 爲(위)한 모임이 열립니다. 午前(오전) 10時(시)에서 午後(오후) 6時(시)까지 進行(진행)되니, 關心(관심) 있는 분들은 自由(자유)롭게 오셔서 參與(참여) 바랍니다! (10時(시)에서 18時(시) 사이에 아무 때나 오셔서 아무 때나 가셔도 됩니다!)

@jj1bdx.tokyo 私も同じ感覚です。韓国語でもこの意味の変化が起きたのは、やはりこの10年ぐらいからだと思います。日本語の漢語は韓国語でもそのまま漢字語として受け入れられやすいせいか、こういう言葉の変化が連動して起きることが結構多い気がします。

本来「課金する」という言葉は「料金を課す」という意味だが、近年モバイルゲームなどの影響で「料金を払う」という意味にまで拡大しているという趣旨の日本語記事。ちなみに韓国語でも(おそらく日本のモバイルゲーム、あるいはその影響を受けた韓国・中国のモバイルゲームの影響で)「課金(グァグム)하다(ハダ)」という言葉が「料金を払う」という意味まで含むようになる現象が同じく起きている。 https://salon.mainichi-kotoba.jp/archives/280630

LogTapeを日本語で紹介する記事が公開されました。「ライブラリの中では黙って待つ」という設計思想を軸に、configure()を呼ぶまでログが一切出力されない仕組みや、ゼロ依存・5.3KBでNode.js・Deno・Bun・ブラウザ・エッジランタイムを横断して動く点、階層的カテゴリや構造化ログの実践的な使い方まで、実際に動かせるサンプル付きで解説してくださっています。設計の背景まで汲み取ってもらえて嬉しいです。 https://easegis.jp/blog/logtape/

@Profpatsch To be honest, I haven't decided yet, but I'm leaning toward Bitwarden. I'm still thinking it over a bit after reading this post, though.

After almost fifteen years, I'm done with @1password. I just read through the email exchange @mvsde posted, where 1Password's support team defended the company's patronage of DHH's Omacom Foundation with the usual “we're funding the foundation, not the individual” line. That distinction doesn't hold up when the money still legitimizes him and everyone his politics attract. I've trusted 1Password with my passwords for longer than most of my relationships have lasted, and that's exactly why this matters: loyalty like that shouldn't be free. Migration starts this week. RE: https://mastodon.social/@mvsde/117194324209720681

개발자 패널을 감지해서 무한 디버거를 걸어둔 사이트를 접할 때마다, 본네트가 용접된 차를 수리해야 하는 상황처럼 느껴진다... 지금은 이게 본업이 되었지만, 6년 전에 취미로 유저스크립팅을 하며 비슷한 생각을 공유했었다. 2019년 12월 1일, 평가원 사이트의 허점으로 수험생 312명의 수능 성적표가 예상보다 일찍 공개되었다. 그리고 2주가 채 지나지 않아 소스 보기 기능을 차단한 웹 브라우저를 국내 기업에서 개발한다는 소식을 듣게 되었다. (프로그래머의 실수를 보이지 않게 하기 위해서라고…?) 나는 차의 보닛을 용접하고 출고하는 것과 같은 발상이라 생각해서 납득하기 어려웠다.