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!
安寧하세요! 저는 서울에 살고 있는 30代 後半의 오픈 소스 소프트웨어 엔지니어 洪民憙입니다. 兩性愛者(bisexual)이자 논바이너리(non-binary)이며, 自由·오픈 소스 소프트웨어(F/OSS)와 聯合宇宙(fediverse)의 熱烈한 支持者이기도 합니다.
STF(@sovtechfund)의 支援을 받아 TypeScript用 ActivityPub 서버 프레임워크 @fedify 開發에 專業으로 任하고 있습니다. 그 外에도 싱글 유저用 ActivityPub 마이크로블로그 @hollo, ActivityPub 봇 프레임워크 @botkit, 소프트웨어 開發者를 위한 聯合宇宙 플랫폼 Hackers' Pub, JavaScript·TypeScript用 로깅 라이브러리 LogTape 等의 製作者이기도 합니다.
東아시아 言語(이른바 CJK)와 Unicode에도 關心이 많습니다. 이 計定에서는 主로 英語로 포스팅하지만, 때때로 日本語나 國漢文混用體 韓國語로도 씁니다. 聯合宇宙에 오게 된 動機 中 하나가 바로 國漢文混用體로 글을 쓰고 싶었기 때문이기도 하고요. 韓國語, 英語, 日本語, 아니면 漢文으로도 말을 걸어주세요!
iOS 紙匣 앱에서 티머니 카드 追加 中 發生한 誤謬 畫面.
畫面 中央에 보라色에서 朱黃色 그라데이션의 티머니 카드 이미지가 있고, 그 아래 “Pending Purchase”라고 表示되어 있다.
오류 메시지가 灰色 相子 안에 나타나 있다:
• “Could Not Add Card”
• “Try again later or contact your card issuer for more information.”
• “Add Card Later” 버튼
畫面 下端에는 “카드 發給社에 文議하라”는 案內 文句와 “Add This Card Later” 링크가 있다.
By listening to lots and lots of feedback, I’ve learned that if someone’s main experience with passkeys is with a password manager that doesn’t natively integrate into the OS it’s running on — instead, one that hijacks web browser API — they’re far, far more likely to think they’re not a great user experience.
Some browser extensions that replace the built-in OS experiences have done so much harm to how technologists view the technology.
I’m not saying that third-party, independent, cross-platform apps are bad. They’re fantastic! What I’m saying is that they should integrate into the native bindings to be a data source for all web browsers and apps on a platform. Nobody wants a credential that only works in web browsers and not other native apps.
I think the @fedify project has now reached full maturity. What this means is that all the low-hanging fruit has been addressed, and only the difficult problems remain. 😂
I think the @fedify project has now reached full maturity. What this means is that all the low-hanging fruit has been addressed, and only the difficult problems remain. 😂
It feels like I've taken on too many projects in the last two years. The open source projects I'm currently managing are: Fedify, Hollo, LogTape, BotKit, Hackers' Pub, and Upyo. … That's quite a lot, isn't it?
We're pleased to announce the release of Upyo 0.2.0. Upyo is a cross-runtime email library that provides a unified, type-safe API for sending emails across Node.js, Deno, Bun, and edge functions. With support for multiple email providers through interchangeable transports—including SMTP, Mailgun, SendGrid, and now Amazon SES—Upyo enables seamless switching between email services without code changes.
This release introduces two significant additions: Amazon SES transport support and comprehensive OpenTelemetry integration. These features expand transport options and add production-ready observability capabilities to the library.
Amazon SES Transport
Upyo now includes support for Amazon SES through the new @upyo/ses package. This transport provides AWS Signature v4 authentication with zero external dependencies, maintaining Upyo's commitment to cross-runtime compatibility. The implementation supports both AWS access key credentials and session-based authentication for temporary credentials.
import { SesTransport } from "@upyo/ses";import { createMessage } from "@upyo/core";const transport = new SesTransport({ authentication: { type: "credentials", accessKeyId: process.env.AWS_ACCESS_KEY_ID!, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!, }, region: "us-east-1",});const receipt = await transport.send(createMessage({ from: "sender@example.com", to: "recipient@example.com", subject: "Hello from SES", content: { text: "Sent via Amazon SES!" },}));
The SES transport includes regional configuration support, comprehensive IAM role integration through external credential providers, and efficient bulk sending capabilities. Like other Upyo transports, it provides the same consistent interface while leveraging Amazon's proven email infrastructure for reliable delivery at scale.
Configuration sets, message tagging, and rich content features are fully supported, allowing teams to take advantage of SES's advanced tracking and analytics capabilities. The transport handles AWS authentication complexity while maintaining the simple, unified API that Upyo users expect.
import { createOpenTelemetryTransport } from "@upyo/opentelemetry";import { SmtpTransport } from "@upyo/smtp";// Wrap any existing transport with observabilityconst transport = createOpenTelemetryTransport( new SmtpTransport({ host: "smtp.example.com" }), { serviceName: "email-service", metrics: { enabled: true }, tracing: { enabled: true }, });// Use exactly as before - observability is automaticawait transport.send(message);
The OpenTelemetry transport automatically instruments email operations with traces and metrics, tracking delivery rates, latency distributions, and categorizing failures by type. It integrates seamlessly with existing OpenTelemetry infrastructure, supporting both global providers and custom configurations for different deployment scenarios.
Performance optimization features include configurable sampling rates for traces and metrics, ensuring minimal overhead in high-throughput environments. The transport provides automatic resource management through Disposable/AsyncDisposable support and includes specialized monitoring capabilities for bulk email operations, making it suitable for production workloads of any scale.
Getting Involved
We're continuously working to improve Upyo and would love to hear from the community. Whether you're trying out the new Amazon SES transport, implementing observability with OpenTelemetry, or using any of our existing transports, your feedback helps shape the library's future.
If you encounter issues, have feature requests, or want to contribute, please visit our GitHub repository. We also welcome discussions about new transport implementations, documentation improvements, and integration experiences across different runtime environments.
We're pleased to announce the release of Upyo 0.2.0. Upyo is a cross-runtime email library that provides a unified, type-safe API for sending emails across Node.js, Deno, Bun, and edge functions. With support for multiple email providers through interchangeable transports—including SMTP, Mailgun, SendGrid, and now Amazon SES—Upyo enables seamless switching between email services without code changes.
This release introduces two significant additions: Amazon SES transport support and comprehensive OpenTelemetry integration. These features expand transport options and add production-ready observability capabilities to the library.
Amazon SES Transport
Upyo now includes support for Amazon SES through the new @upyo/ses package. This transport provides AWS Signature v4 authentication with zero external dependencies, maintaining Upyo's commitment to cross-runtime compatibility. The implementation supports both AWS access key credentials and session-based authentication for temporary credentials.
import { SesTransport } from "@upyo/ses";import { createMessage } from "@upyo/core";const transport = new SesTransport({ authentication: { type: "credentials", accessKeyId: process.env.AWS_ACCESS_KEY_ID!, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!, }, region: "us-east-1",});const receipt = await transport.send(createMessage({ from: "sender@example.com", to: "recipient@example.com", subject: "Hello from SES", content: { text: "Sent via Amazon SES!" },}));
The SES transport includes regional configuration support, comprehensive IAM role integration through external credential providers, and efficient bulk sending capabilities. Like other Upyo transports, it provides the same consistent interface while leveraging Amazon's proven email infrastructure for reliable delivery at scale.
Configuration sets, message tagging, and rich content features are fully supported, allowing teams to take advantage of SES's advanced tracking and analytics capabilities. The transport handles AWS authentication complexity while maintaining the simple, unified API that Upyo users expect.
import { createOpenTelemetryTransport } from "@upyo/opentelemetry";import { SmtpTransport } from "@upyo/smtp";// Wrap any existing transport with observabilityconst transport = createOpenTelemetryTransport( new SmtpTransport({ host: "smtp.example.com" }), { serviceName: "email-service", metrics: { enabled: true }, tracing: { enabled: true }, });// Use exactly as before - observability is automaticawait transport.send(message);
The OpenTelemetry transport automatically instruments email operations with traces and metrics, tracking delivery rates, latency distributions, and categorizing failures by type. It integrates seamlessly with existing OpenTelemetry infrastructure, supporting both global providers and custom configurations for different deployment scenarios.
Performance optimization features include configurable sampling rates for traces and metrics, ensuring minimal overhead in high-throughput environments. The transport provides automatic resource management through Disposable/AsyncDisposable support and includes specialized monitoring capabilities for bulk email operations, making it suitable for production workloads of any scale.
Getting Involved
We're continuously working to improve Upyo and would love to hear from the community. Whether you're trying out the new Amazon SES transport, implementing observability with OpenTelemetry, or using any of our existing transports, your feedback helps shape the library's future.
If you encounter issues, have feature requests, or want to contribute, please visit our GitHub repository. We also welcome discussions about new transport implementations, documentation improvements, and integration experiences across different runtime environments.
사실 ARPANET 이전에도 미국 전역은 물리적인 회선으로 연결되어 있었고, 터미널을 통한 소셜 네트워킹이 활발했다. 나도 ARPANET을 미국 지도 위에 그려진 그래프로 처음 접했고, 최초로 컴퓨터를 연결한 기술이라고만 생각했다. 이 글에서 가장 인상적인 대목: "초기 시분할 네트워크를 무시하면 지난 50년간 미국의 디지털 문화가 어떻게 발전했는가에 대한 이해가 빈곤해지며, 모든 업적을 건국의 아버지들이 가진 천재성으로 돌리는 '실리콘 밸리 신화'에 여지를 준다" https://twobithistory.org/2021/02/07/arpanet.html
Sun 17 August, the final day of PyCon Korea at Dongguk University! Brilliant sessions, fun tutorials, and the Python community awaits you. Long live Python 🐍