@fossforall 이 컨프랜스를 열심히 준비되서 정말 감사합니나!
Ahn Kiwook
@aioo@hackers.pub · 21 following · 31 followers
안녕하세요!
GitHub
- @AiOO
Mastodon
- @AiOO@aioo.ooo
X
- @AiOOO
해커스 펍에 남기는 첫 글로 진.짜. 술을 파는 해커스 펍을 소개하겠습니다… 도쿄 히가시나카노에 위치한ハッカーズバー(hackers bar)에 가시면 바텐더 분의 라이브코딩을 구경하며 블루스크린, 커널 패닉 등의 이름이 붙여진 칵테일을 마실 수 있어요… 모두가 각자의 랩탑을 들고 와서 자유롭게 코딩하고 이야기 나누는 분위기! 도쿄에서 손에 꼽게 인상적이었던 바였습니다. 도쿄에서 술도 마시고 코딩도 하고 싶으신 분들은 한 번 들러보심이~~!
드디어 Chazzy에서 유튜브 라이브 채팅도 볼 수 있게 만들었다.
사실 로그인 없이 유튜브 라이브 방송의 채팅을 가져오는 건 불가능하다고 생각하고 있었는데... 별 기대 없이 Claude Code한테 요청했더니, 비공식 API 라이브러리 Youtube.js로 몇 시간의 티키타가 끝에 동작하는 상태로 우당탕탕 구현해줌... 너무 우당탕탕 구현해줘서 뒤처리가 조금 오래 걸렸는데 아무튼 돌아가는 거 보니까 그것마저 재밌긴 하더라.
p.s. 근데 이번에 eslint 제대로 돌려 보니까 나부터 우당탕탕 짜고 있었어서 남말 할 처지가 아니었다
단어, 구 단위로 자세히 번역을 요청해도 "sp"가 번역에 포함된다.
비슷한 문장도 비슷한 증상이 생기는 경우가 있다.
번역 요청한 다른 문장:
I know no fewer than seven people who simply ceased to exist.
응답 일부:
🔹 자연스러운 의역
> 나는 아무 이유도 없이 사라져 버린 사람이 일곱 명이나 있다.
또는
나는 sp그냥 흔적도 없이 사라져 버린 사람을 일곱 명이나 안다.
전자책 리더기 카페에서 누가 무섭다고 올린 ChatGPT 오류를 따라해보니 재현이 꽤 쉽게 된다. 해마 이모지 출력 요청의 응답 과정과 비슷한 기전으로 발생하는 것 같긴 한데... "sp"라는 토큰은 무슨 의미가 있는 거지.
단어, 구 단위로 자세히 번역을 요청해도 "sp"가 번역에 포함된다.
전자책 리더기 카페에서 누가 무섭다고 올린 ChatGPT 오류를 따라해보니 재현이 꽤 쉽게 된다. 해마 이모지 출력 요청의 응답 과정과 비슷한 기전으로 발생하는 것 같긴 한데... "sp"라는 토큰은 무슨 의미가 있는 거지.
Zed의 윈도 버전이 드디어 공식 출시되었다. https://zed.dev/blog/zed-for-windows-is-here
공식 버전 출시 전까지는 deevus/zed-windows-builds 저장소 것을 쓰고 있었는데, 2주 전부터 베타 신청한 사람들에게 클로즈 베타를 쓸 수 있도록 링크를 보내주더니 드디어 정식 출시가 되었다. Private alpha 때부터 가벼운 반응 빠른 텍스트 에디터로, 또 개인 프로젝트용으로 잘 사용하고 있던 터라 감개가 무량하다.
Rust로 만들어져 윈도에서도 가볍고 빠릿빠릿하며, LLM 에이전트나 WSL 지원도 물론 완벽히 잘 된다!
이제 arm64 윈도용 빌드도 내 줬으면 🥺
p.s. 현재 한국어 IME 이슈가 있어서 제보해둔 상태 https://github.com/zed-industries/zed/issues/40335
Zed의 윈도 버전이 드디어 공식 출시되었다. https://zed.dev/blog/zed-for-windows-is-here
공식 버전 출시 전까지는 deevus/zed-windows-builds 저장소 것을 쓰고 있었는데, 2주 전부터 베타 신청한 사람들에게 클로즈 베타를 쓸 수 있도록 링크를 보내주더니 드디어 정식 출시가 되었다. Private alpha 때부터 가벼운 반응 빠른 텍스트 에디터로, 또 개인 프로젝트용으로 잘 사용하고 있던 터라 감개가 무량하다.
Rust로 만들어져 윈도에서도 가볍고 빠릿빠릿하며, LLM 에이전트나 WSL 지원도 물론 완벽히 잘 된다!
이제 arm64 윈도용 빌드도 내 줬으면 🥺
Fedify 1.9.0: Security enhancements, improved DX, and expanded framework support
We are excited to announce Fedify 1.9.0, a mega release that brings major security enhancements, improved developer experience, and expanded framework support. Released on October 14, 2025, this version represents months of collaborative effort, particularly from the participants of Korea's OSSCA (Open Source Contribution Academy).
This release would not have been possible without the dedicated contributions from OSSCA participants: Jiwon Kwon (
@z9mb1wwj), Hyeonseo Kim (
@gaebalgom개발곰), Chanhaeng Lee (@2chanhaeng초무), Hyunchae Kim (
@r4bb1t톡기), and An Subin (
@nyeongAn Nyeong (安寧)). Their collective efforts have significantly enhanced Fedify's capabilities and made it more robust for the fediverse community.
Origin-based security model
Fedify 1.9.0 implements FEP-fe34, an origin-based security model that protects against content spoofing attacks and ensures secure federation practices. This critical security enhancement enforces same-origin policy for ActivityPub objects and their properties, preventing malicious actors from impersonating content from other servers.
The security model introduces a crossOrigin option in Activity Vocabulary property accessors (get*() methods) with three security levels:
// Default behavior: logs warning and returns null for cross-origin content
const actor = await activity.getActor({ crossOrigin: "ignore" });
// Strict mode: throws error for cross-origin content
const object = await activity.getObject({ crossOrigin: "throw" });
// Trust mode: bypasses security checks (use with caution)
const attachment = await note.getAttachment({ crossOrigin: "trust" });Embedded objects are automatically validated against their parent object's origin. When an embedded object has a different origin, Fedify performs automatic remote fetches to ensure content integrity. This transparent security layer protects your application without requiring significant code changes.
For more details about the security model and its implications, see the origin-based security model documentation.
Enhanced activity idempotency
Activity idempotency handling has been significantly improved with the new withIdempotency() method. This addresses a critical issue where activities with the same ID sent to different inboxes were incorrectly deduplicated globally instead of per-inbox.
federation
.setInboxListeners("/inbox/{identifier}", "/inbox")
.withIdempotency("per-inbox") // New idempotency strategy
.on(Follow, async (ctx, follow) => {
// Each inbox processes activities independently
});The available strategies are:
"per-origin": Current default for backward compatibility"per-inbox": Recommended strategy (will become default in Fedify 2.0)- Custom strategy function for advanced use cases
This enhancement ensures that shared inbox implementations work correctly while preventing duplicate processing within individual inboxes. For more information, see the activity idempotency documentation.
Relative URL resolution
Fedify now intelligently handles ActivityPub objects containing relative URLs, automatically resolving them by inferring the base URL from the object's @id or document URL. This improvement significantly enhances interoperability with ActivityPub servers that use relative URLs in properties like icon.url and image.url.
// Previously required manual baseUrl specification
const actor = await Actor.fromJsonLd(jsonLd, { baseUrl: new URL("https://example.com") });
// Now automatically infers base URL from object's @id
const actor = await Actor.fromJsonLd(jsonLd);This change, contributed by Jiwon Kwon (
@z9mb1wwj), eliminates a common source of federation failures when encountering relative URLs from other servers.
Full RFC 6570 URI template support
TypeScript support now covers all RFC 6570 URI Template expression types in dispatcher path parameters. While the runtime already supported these expressions, TypeScript types previously only recognized simple string expansion.
// Now fully supported in TypeScript
federation.setActorDispatcher("/{+identifier}", async (ctx, identifier) => {
// Reserved string expansion — recommended for URI identifiers
});The complete set of supported expression types includes:
{identifier}: Simple string expansion{+identifier}: Reserved string expansion (recommended for URIs){#identifier}: Fragment expansion{.identifier}: Label expansion{/identifier}: Path segments{;identifier}: Path-style parameters{?identifier}: Query component{&identifier}: Query continuation
This was contributed by Jiwon Kwon (
@z9mb1wwj). For comprehensive information about URI templates, see the URI template documentation.
WebFinger customization
Fedify now supports customizing WebFinger responses through the new setWebFingerLinksDispatcher() method, addressing a long-standing community request:
federation.setWebFingerLinksDispatcher(async (ctx, actor) => {
return [
{
rel: "http://webfinger.net/rel/profile-page",
type: "text/html",
href: actor.url?.href,
},
{
rel: "http://ostatus.org/schema/1.0/subscribe",
template: "https://example.com/follow?uri={uri}",
},
];
});This feature was contributed by Hyeonseo Kim (
@gaebalgom개발곰), and enables applications to add custom links to WebFinger responses, improving compatibility with various fediverse implementations. Learn more in the WebFinger customization documentation.
New integration packages
Fastify support
Fedify now officially supports Fastify through the new @fedify/fastify package:
import Fastify from "fastify";
import { fedifyPlugin } from "@fedify/fastify";
const fastify = Fastify({ logger: true });
await fastify.register(fedifyPlugin, {
federation,
contextDataFactory: () => ({ /* your context data */ }),
});This integration was contributed by An Subin (
@nyeongAn Nyeong (安寧)). It supports both ESM and CommonJS, making it accessible to all Node.js projects. See the Fastify integration guide for details.
Koa support
Koa applications can now integrate Fedify through the @fedify/koa package:
import Koa from "koa";
import { createMiddleware } from "@fedify/koa";
const app = new Koa();
app.use(createMiddleware(federation, (ctx) => ({
user: ctx.state.user,
// Pass Koa context data to Fedify
})));The integration supports both Koa v2.x and v3.x. Learn more in the Koa integration documentation.
Next.js integration
The new @fedify/next package brings first-class Next.js support to Fedify:
// app/api/ap/[...path]/route.ts
import { federation } from "@/federation";
import { fedifyHandler } from "@fedify/next";
export const { GET, POST } = fedifyHandler(federation);This integration was contributed by Chanhaeng Lee (@2chanhaeng초무). It works seamlessly with Next.js App Router. Check out the Next.js integration guide for complete setup instructions.
CommonJS support
All npm packages now support both ESM and CommonJS module formats, resolving compatibility issues with various Node.js applications and eliminating the need for the experimental --experimental-require-module flag. This particularly benefits NestJS users and other CommonJS-based applications.
FEP-5711 collection inverse properties
Fedify now implements FEP-5711, adding inverse properties to collections that provide essential context about collection ownership:
const collection = new Collection({
likesOf: note, // This collection contains likes of this note
followersOf: actor, // This collection contains followers of this actor
// … and more inverse properties
});This feature was contributed by Jiwon Kwon (
@z9mb1wwj). The complete set of inverse properties includes likesOf, sharesOf, repliesOf, inboxOf, outboxOf, followersOf, followingOf, and likedOf. These properties improve data consistency and enable better interoperability across the fediverse.
CLI enhancements
NodeInfo visualization
The new fedify nodeinfo command provides a visual way to explore NodeInfo data from fediverse instances. This replaces the deprecated fedify node command and offers improved parsing of non-semantic version strings. Try it with:
fedify nodeinfo https://comam.es/snac/This was contributed by Hyeonseo Kim (
@gaebalgom개발곰). The command now correctly handles various version formats and provides a cleaner visualization of instance capabilities. See the CLI documentation for more options.
Enhanced lookup with timeout
The fedify lookup command now supports a timeout option to prevent hanging on slow or unresponsive servers:
fedify lookup --timeout 10 https://example.com/users/aliceThis enhancement, contributed by Hyunchae Kim (@r4bb1t톡기), ensures reliable operation even when dealing with problematic remote servers.
Package modularization
Several modules have been separated into dedicated packages to improve modularity and reduce bundle sizes. While the old import paths remain for backward compatibility, we recommend migrating to the new packages:
@fedify/cfworkersreplaces@fedify/fedify/x/cfworkers@fedify/denokvreplaces@fedify/fedify/x/denokv@fedify/honoreplaces@fedify/fedify/x/hono@fedify/sveltekitreplaces@fedify/fedify/x/sveltekit
This modularization was contributed by Chanhaeng Lee (@2chanhaeng초무). The old import paths are deprecated and will be removed in version 2.0.0.
Acknowledgments
This release represents an extraordinary collaborative effort, particularly from the OSSCA participants who contributed numerous features and improvements. Their dedication and hard work have made Fedify 1.9.0 the most significant release to date.
Special thanks to all contributors who helped shape this release, including those who provided feedback, reported issues, and tested pre-release versions. The fediverse community's support continues to drive Fedify's evolution.
For the complete list of changes, bug fixes, and improvements, please refer to the CHANGES.md file in the repository.
요즘 앞날이 두렵다..
오늘에야 안 건데 닌텐도 스위치는 5GHz 대역 와이파이를 쓰려면 공유기 설정에서 채널을 100 아래로 설정해야 한다더라. 그래서 34 채널로 설정해봤더니 정말로 되긴 했다. 근데 방에서 신호가 끊기는 증상이 생기기 시작해서 포기하고 다시 149 채널로 도망옴. 다른 설정은 다 같고 34 채널은 주파수도 낮고 겹치는 신호도 오히려 적은데 왜 끊기는 걸까...
zed를 잠깐 테스트 중이엇는데 소넷 4.5 나오면서 코드 네이티브 확장이 나왔네… 다시 돌아가야겠다
@kanghyojun강효준 하지만
--dangerously-skip-permissions이 되지 않았다고 한다...
@aiooAhn Kiwook 저는 오히려 예전보다 요즘 더 모각코를 많이 하긴 하네요.
@hongminhee洪 民憙 (Hong Minhee) 호호 항상 늦게 봐 버리지만 올리시는 모집 글?을 눈여겨보고 있습니다 👀
요즘 개발 스터디나 모각코가 예전만큼 열리지 않는 것 같다는 이야기를 나눴다. 바로 떠오른 게 페이스북이었는데, 페이스북을 사람들이 덜 쓰게 되면서 페이스북 그룹 같은 (접근성이 좋고 열려 있는) 모임 공간을 만들고 접하기 어려워진 게 크지 않을까 하는 생각이 들어 그렇게 말씀드렸다. 내가 그런 게 열리는 사회에서 멀어진 게 원인일 수도 있겠지만..
@2chanhaeng초무 https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/big
Warning
This element has been removed from the specification and shouldn't be used anymore. Use the CSS font-size property to adjust the font size.
@hongminhee洪 民憙 (Hong Minhee) @2chanhaeng초무 어째서인지
<small>은 따로 경고가 없네요. 이건 생존해 있는 건가...
https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/small
그나저나 제가 HTML 태그 쓴 것 때문에 테스트 중이신 걸까요? 오늘 마침 <small>을 썼었어서 찔리네요... ㅋㅋㅋ
오늘 옛날옛적 트위터 얘기도 좀 했었는데... 곰곰이 생각해보니 해커스 펍에서 2009년에 트위터 처음 할 때 분위기가 좀 나는 것 같기두 👀
구석에서 존재감을 최대한 죽이고 있는 중..
서버장님이 공유하셨어..
구석에서 존재감을 최대한 죽이고 있는 중..
@hongminhee洪 民憙 (Hong Minhee) 이름이 예뻐요
Finally, embrace provisional trust. The wizard model means working with “good enough” more often, not because we're lowering standards, but because perfect verification is becoming impossible. The question isn't “Is this completely correct?” but “Is this useful enough for this purpose?”
마지막으로, 잠정적 신뢰를 받아들이세요. 마법사 모델은 ‘충분히 좋은’ 상태로 더 자주 작업하는 것을 의미합니다. 기준을 낮추기 때문이 아니라 완벽한 검증이 불가능해지고 있기 때문입니다. 핵심 질문은 “이것이 완전히 정확한가?”가 아니라 “이것이 이 목적에 충분히 유용한가?”입니다.
— 위 인용을 DeepL로 번역
전적으로 동의하고 애자일 관점에서도 좋은 방향이라고 생각하지만, 완벽주의적인 성향이 있는 사람으로서 무시하기 어려운 심리적 저항이 꽤 자주 발생하곤 한다. 에이전트를 위한 지침을 자세히 적는 것으로 최대한 타협할 수 있을 것 같은데 아직 맘에 쏙 드는 방법을 발견하지는 못함.
아파트 전기가 정전되면 집으로 들어오는 광케이블 신호도 나가서 UPS가 버텨 줘도 인터넷 안 되는 채로 서버만 켜져 있는 꼴이 되는데 좀 많이 애매한 것 같음
이번 주말에 해커스퍼블릭 밋업 간다 헤헷
일주일마다 새 마이너 버전 릴리스하는 라이브러리 어떻게 생각하세요? (제가 그러고 있음…)
@hongminhee洪 民憙 (Hong Minhee) 컴퓨터 켜면 업데이트 루틴부터 돌리는 저는 아주 좋아합니다. 일주일마다 좋아진다니 럭키비키잖아요~
Ahn Kiwook shared the below article:
Optique: 타입 안전한 CLI 파서 컴비네이터
洪 民憙 (Hong Minhee) @hongminhee@hackers.pub
이 글에서는 Haskell의 `optparse-applicative`와 TypeScript의 Zod에서 영감을 받아 제작된 새로운 CLI 파서 라이브러리인 Optique를 소개합니다. Optique는 파서 컴비네이터를 활용하여 CLI의 구조를 레고 블록처럼 조립할 수 있게 해줍니다. `option()`, `optional()`, `multiple()`, `or()`, `object()`, `constant()`, `command()`, `argument()` 등의 다양한 파서와 컴비네이터를 통해 복잡한 CLI 구조를 유연하게 정의할 수 있습니다. 특히, `or()`와 `object()` 컴비네이터를 사용하여 상호 배타적인 옵션이나 서브커맨드를 쉽게 구현하는 방법을 예제를 통해 설명합니다. Optique는 단순한 CLI 파서 역할에 집중하고 있어 모든 기능을 제공하지는 않지만, 복잡한 CLI 구조를 표현하는 데 유용하며, 소개 문서와 튜토리얼을 통해 더 자세한 내용을 확인할 수 있습니다.
Read more →
@aiooAhn Kiwook 새로 사셨나요?!
@hongminhee洪 民憙 (Hong Minhee) 아 아뇨 산 건 아니고 사무실의 다른 맥북으로 옮겼어요! (M1 Pro → M2 Pro)
맥 마이그레이션을 할 땐 썬더볼트 케이블을 사용하기로 해요.
Gemini Diffusion 모델 테스트 중. 실존하는 기술이었다니..
이 사이트가 아직도 살아있구나. http://www.soen.kr/ (구 winapi dot co dot kr)
알고리즘 공부하시는 분과 이야기 나누다가 생각나서 오랜만에 들어가봤는데 여전한 모습이었다. 정올 공부할 때나 윈도 프로그램 개발할 때 자주 들락거리던 사이트인데 반가운 마음...
@aiooAhn Kiwook 안녕하세요! 어떻게 구현할지 고민 중이라고 합니다.
@curry박준규 감사합니다!! 공식 마스토돈 구현만 써봐서 몰랐는데 저런 고민 포인트가 있을 수 있겠네용.
@aiooAhn Kiwook 네, 아직 없습니다… ㅋㅋ
@hongminhee洪 民憙 (Hong Minhee) 다른 마스토돈 클라이언트에서 눌렀었나보군요 ㅋㅋㅋㅋ 알려주셔서 감사합니다!
해커스 펍에 조와용 버튼이 원래 없었던가
사실 Hackers' Pub은 저희 집 홈 서버인 Mac mini M4 깡통 모델에서 돌아가고 있을 뿐만 아니라, 배포도 compose.yaml 파일의 image: 필드를 매번 손으로 고친 뒤 docker compose up -d를 치는 전근대적인 방식으로 이뤄지고 있습니다… 뭔가 자동화를 하고 싶긴 한데 귀찮은 마음이 커서 아직까지 이대로 살고 있네요.
Spring AI 문서를 보고 있는데 업그레이드 노트 중에 Claude Code를 이용해서 자동으로 업그레이드를 진행하는 방법을 안내하는 섹션이 있어서 흥미로웠다. 요약하면 Claude Code CLI 도구를 다운로드하고 제공된 프롬프트를 그대로 실행하라는 내용. 대 AI 시대에 발맞춰 앞으로 이런 방식도 많이 사용되려나 싶음.
Automating upgrading using AI
You can automate the upgrade process to 1.0.0-SNAPSHOT using the Claude Code CLI tool with a provided prompt. The prompt will guide the AI to perform the following tasks:
- Update the Spring AI BOM version to 1.0.0-SNAPSHOT
- Ensure all required repositories exist in your build configuration
- Update Spring AI artifact IDs according to the new naming patterns
To use this automation:
- Download the Claude Code CLI tool
- Copy the prompt from the update-to-snapshot.txt file
- Paste the prompt into the Claude Code CLI
- The AI will analyze your project and make the necessary changes
This approach can save time and reduce the chance of errors when upgrading multiple projects or complex codebases.
어젯밤 데비안 패드 벽돌 될 것 감수하고 데비안 12로 업그레이드했는데 생각보다 문제 없이 잘 돼서 신남! ^ㅁ^ 전부터 느끼지만 그놈 데스크톱 환경은 예상 외로 터치 친화적인데... 터치로 쓰는 사용자가 생각보다 많은 걸까?
반갑습니다!!












