진짜 디자인 하고싶은대로 다 하고 있는데, 누군가가 보다 못해서 "차라리 내가 하고 만다" 하고 자원을 해주지 않을까(?)

Jaeyeol Lee
@kodingwarrior@hackers.pub · 500 following · 394 followers
Neovim Super villain. 풀스택 엔지니어 내지는 프로덕트 엔지니어라고 스스로를 소개하지만 사실상 잡부를 담당하는 사람. CLI 도구를 만드는 것에 관심이 많습니다.
Hackers' Pub에서는 자발적으로 바이럴을 담당하고 있는 사람. Hackers' Pub의 무궁무진한 발전 가능성을 믿습니다.
그 외에도 개발자 커뮤니티 생태계에 다양한 시도들을 합니다. 지금은 https://vim.kr / https://fedidev.kr 디스코드 운영 중
Blog
- kodingwarrior.github.io
mastodon
- @kodingwarrior@silicon.moe
Github
- @malkoG
@kodingwarriorJaeyeol Lee 요런 디자인은 어떠세용
Zed Industries가 코드 에디터와 코딩 에이전트 사이의 통신을 표준화하기 위해 Agent Client Protocol (ACP)이라는 걸 소개했다. 잘 돼서 Neovim의 AI 통합 생태계가 더욱 풍성해지면 좋겠다. https://agentclientprotocol.com/overview/introduction
- 마틴 파울러는 LLM이 소프트웨어 개발에 미치는 영향을 논의하며, 자동완성을 넘어선 다양한 사용 워크플로우를 놓치고 있다고 지적
- 프로그래밍 역할의 미래에 대한 질문들은 여전히 정답이 없음
- AI가 과거 기술 발전과 같은 버블 상태임을 확인
- LLM을 신뢰성을 위해 여러 번 질의해야 하는 "환각 엔진"으로 강조
- 특히 AI 에이전트가 개인 데이터와 신뢰할 수 없는 콘텐츠에 접근할 때의 보안 위험을 경고
Some thoughts on LLMs and Software Development
https://martinfowler.com/articles/202508-ai-thoughts.html
#Optique 0.3.0 is out with dependent options and flexible parser composition, shaped by feedback from @z9mb1wwj's work migrating
@fedifyFedify: ActivityPub server framework CLI from Cliffy to Optique.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question
objects with proper expiration times, and your bot can react to votes through the new onVote
event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};
The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom개발곰)! The
/followers
route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository
through the new @fedify/botkit-sqlite
package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository
module offers MemoryCachedRepository
for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions
, RepositoryGetFollowersOptions
, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls
option, providing more flexibility for custom implementations.
GPT-5가 어려운 문제에 있어서는 오히려 Claude Opus 4.1보다 낫다기에 한 번 써보고 있는데, Claude Code로는 당연하게도 GPT-5 모델을 못 쓰니 대신 Crush를 써보고 있다. 일단 첫인상으로는 MCP 외에도 LSP를 지원하는 게 마음에 든다. 바로 deno lsp
를 연결해서 써보고 있다.
[🍏매장 이용안내]
최근 튜사 방문객 급증으로 Wi-fi가 끈기는 현상이 자주발생돼 공유기를 추가하였습니다.
Wi-fi 연결 목록 추가, Wi-fi명, 비밀번호가 변경 되었습니다.
방문하실 때 참고해주세요. 기존Wi-fi는 연결이 안됩니다.
비밀번호는 매장에 업데이트 해놨습니다.
🍏 tusa앨런튜링
→ 컴퓨터과학의 선구자, 암호해독의 전설.
“AI는 사람을 흉내 내는 걸로 시작한다.” — 지능과 논리가 흐르는 곳.
🍏tusa리누스토발즈
→ 리눅스 커널의 창시자, 오픈소스의 상징.
“코드는 공유되기 위해 태어났다.” — 리누스다운 개방형 개발존.
🍏tusa스티브워즈니악
→ 애플 1호기를 손수 만든 하드웨어 천재.
“개발은 Garage에서 시작된다.” — 납땜 냄새가 날 것 같은 공간.
🍏 tusa제임스고슬링
→ 자바(Java)의 창시자, 객체지향의 아버지.
“한 번 작성, 어디서나 실행.” — 안정성과 몰입을 위한 고슬링존.
[홍보글]👍
튜사에서 ASUS 제품을 경험해보실 수 있습니다. ASUS ProArt 모니터, AUS ROG 키보드까지 노트북, 마우스만 가지고 오시면 최적의 작업공간이 탄생됩니다! 그외 다양한 키보드와 모니터암까지 셋팅해놨으니 놀러오세요!
ASUS ROG 키보드 공동구매 진행중!
(튜사만 진행하는 최저가!)
안녕하세요. 성수동에 위치한 개발자 아지트 공간 튜링의사과입니다.
Mastodon 이전에 가입 후 관리를 못했지만 앞으로는 꾸준한 활동으로 인사 드리겠습니다. 잘 부탁드립니다. 😀
React is Simple!
Think React state is easy? One wrong move and your counter breaks.
Why It Happens
React batches state updates.
Using setState(state + 1)
can overwrite updates with stale values.
The functional form setState(prev => prev + 1)
ensures correctness.
Don't
const [count, setCount] = useState(0);
setCount(count + 1);
setCount(count + 1);
// ❌ Result: count = 1
Do
const [count, setCount] = useState(0);
setCount(prev => prev + 1);
setCount(prev => prev + 1);
// ✅ Result: count = 2
Explanation
setCount(count + 1)
→ uses an old snapshot of state.setCount(prev => prev + 1)
→ React passes the freshest value.
Updating state without prev
is like asking for “one more slice” 🍕…
but the box already got emptied. Always ask from the current box.
요즘 새로 배운 이것저것...
- gerrit이라는 10년 전부터 존재하던 rebase, stacked-pr workflow를 지원하는 git remote가 있다
- 커널 개발하는 변태들이 쓰는 mailing-list workflow는 사실 rebase, stacked-pr workflow와 매우 유사하다
- EU쪽에도 jj 기반의 탈 github 개발자 허브를 만들려는 움직임이 있는듯. (개인적으론 tangled.sh가 더 유력해보임)
가장 놀랐던건 mailing-list workflow... 이거 진짜 생각보다 나쁘지 않은 것 같기도, tangled.sh에서 mailing-list를 지원할 수 있다면, gh 같은 별도의 cli 툴 없이도, 협업까지 터미널에서 처리할 수 있어보임.
오이카페에 ActivityPub 지원이 들어갔습니다. 이제 좋아하는 작가나 커뮤니티의 새 그림을 연합우주에서도 받아 보세요!
작가 프로필이나 커뮤니티 메인 페이지에서 ActivityPub 핸들을 확인할 수 있습니다.
인용된 그림은 ActivityPub 연동을 도와주신 @hongminhee洪 民憙 (Hong Minhee) 님이 오이카페 초창기에 그려 주신 고양이 그림입니다. 감사합니다!
Ask HN: 소프트웨어 설계를 배우기에 좋은 최고의 코드베이스는 무엇인가요?
------------------------------
- 소프트웨어 설계 능력을 향상시키고자 노력하고 있는데, 기존의 잘 설계된 코드베이스를 연구해 보라는 권유를 받았음
- 공개적으로 접근 가능한 코드베이스 중 소프트웨어 설계의 골드 스탠다드로 여겨지는 것은 어떤게 있는지 궁금함
## 1\. *추천 코드베이스*
- *대형/대표 프로젝트*
- Git, Postg…
------------------------------
https://news.hada.io/topic?id=22729&utm_source=googlechat&utm_medium=bot&utm_campaign=1834
안녕하세요. 닷넷데브 운영진 남정현입니다.
닷넷 개발자와 클라우드 엔지니어의 만남, .NET Universe CloudBro Edition에서 시작합니다!
이번 컨퍼런스에서는 개발자를 위한 DevOps 도구인 Aspire와 .NET 10의 강력한 DX를 완성하는 File-based App 기반을 새롭게 소개하며, Container, Kubernetes, Observability 등에 관한 업계 동향, 인사이트를 종합적으로 알아보실 수 있는 세션으로 구성될 예정입니다.
이번 미니 컨퍼런스는 다음주 목요일 (9/4) 저녁 6시 30분터 9시 30분까지, 역삼동 마루360 지하1층 성장 세미나룸에서 열립니다. 평소 데브옵스 기술과 컨테이너 기술에 관심이 많으셨던 분들께 인사이트를 드릴 수 있는 알찬 세션으로 구성하였습니다.
좌석이 한정되어 있어 빠른 신청이 필요합니다. 지금 바로 신청해주세요!
등록하기: https://event-us.kr/dotnetdev/event/110640
#닷넷 #CloudBro #닷넷데브 #DevOps #K8s #CloudEngineering #platformengineer
Today is the new semester for @CMUDBCMU Database Group's Intro to Database Systems! We're going harder into material than ever before. Projects are more challenging but you can use LLMs to help. We also have 10min talks each Wed from leading DB companies. Follow from home/prison on YouTube: https://15445.courses.cs.cmu.edu/fall2025
Everything is available for free to non-CMU students:
• Lectures on YouTube: https://www.youtube.com/playlist?list=PLSE8ODhjZXjYMAgsGH-GtY5rJYZ6zjsd5
• Slides + Notes + Homeworks on course website.
• Project source code on GitHub: https://github.com/cmu-db/bustub
• Grading with Gradescope (see FAQ ➡️ https://15445.courses.cs.cmu.edu/fall2025/faq.html#q7)
Special thank you to our Affiliate companies for their support this academic year:
• ClickHouse
• DataStax
• dbt Labs
• Firebolt
• MotherDuck
• RelationalAI
• SingleStore
• SpiralDB
• PingCAP / TiDB
• Yellowbrick
• Yugabyte
Some notes on the insecurity baked into Perplexity's Comet "AI Browser" - the Brave security team reported serious prompt injection vulnerabilities in it, but Brave themselves are developing a similar feature that looks doomed to have similar problems https://simonwillison.net/2025/Aug/25/agentic-browser-security/
Canva는 신이다...
파이콘때도 뽑아보긴 했었는디 포스터 뚝딱하고 뽑힘
Lobsters Interview with Matklad https://lobste.rs/s/ntruuu #person
https://youtu.be/rVfRFd_26Q0?si=bkQhKROnEK2U8F22
김태호 작가의 인터뷰를 보면서 부끄러워졌다. 나는 훈련하고 있나? 집중 하고 있나? 생각해보면 그렇지 않은 채 달리고만 있었던 것 같다. 나도 50대 후반에 최고의 무언가를 만들고 싶고, 그러려면 지금부터라도 훈련을 시작해야겠다.
단문(Note
)과 긴 게시글(Article
) 모두에서 Markdown을 지원할 뿐만 아니라 구문강조와 TeX 수식을 지원한다는 점에서 Hackers' Pub은 연합우주에서 가장 소프트웨어 프로그래머가 쓰기에 적합한 플랫폼이라고 자부합니다.
실무로 통하는 웹 API - 파일 처리, 애니메이션, 음성 인식, 저장소, 웹 컴포넌트까지 기능으로 배우고 구현으로 완성하다 (조 아타디 (지은이), 김태곤 (옮긴이) / 한빛미디어 / 2025-09-01 / 27,000원) https://feed.kodingwarrior.dev/r/BQrjtk
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=370436615&partner=openAPI&start=api
듀오링고에 체스도 있네 ㅋㅋ
듀오링고에 체스도 있는데 언젠가 마작도 넣어주지 않을까 (
살고 싶으면 순정구련보등으로 날 이겨라
Optique: Type-safe combinatorial CLI parser for TypeScript https://lobste.rs/s/dlobhb #javascript
https://optique.dev/
Weird flex, both @elk and
@phanpy are mentioned on "Introduction to AT Protocol" https://mackuba.eu/2025/08/20/introduction-to-atproto/
Jaeyeol Lee shared the below article:
7가지 동시성 모델
정진명의 굳이 써서 남기는 생각 @jm@guji.jjme.me
서지정보
서명: 7가지 동시성 모델
저자: 폴 부처(Paul Butcher)
역자: 임백준
출판사: 한빛미디어
출간일: 2016년 7월 15일
원서명: Seven Concurrency Models in Seven Weeks: When Threads Unravel
원서 출간일: 2014년
생각
『7가지 동시성 모델』은 『한국신화를 찾아 떠나는 여행』 다음으로 읽는 빌린책챌린지 책입니다. 뜬금없이 프로그래밍 도서로 뛰었지요. 최근에 관련된 업무를 하게 되어 손이 이 쪽으로 왔습니다. 시리즈의 전작이라고 할 수 있는 『브루스 테이트의 세븐 랭귀지』를 좋아하기도 했어서, 비슷한 감각으로 배울 수 있는 게 있을 거라 생각했습니다.
제가 전문적으로 프로그래밍을 익힌 분야는 기본적으로 과학적 계산(Scientific Computing) 중 일부분이고, 또 학계에 한정되어 있기도 해서 일반적으로 업계에서 프로그램을 작성하는 직무에 필요한 사고방식과 고려해야 할 문제에 익숙하다고 하기는 어렵습니다. 그래도 나름 산업적으로 활용되는 분야라 슈퍼컴퓨팅센터 같은 곳에 기웃거리면서 GPGPU니 병렬계산이니 하는 개념을 익히기도 했지만, 아무튼 제 졸업논문에 들어간 계산 정도는 병렬 계산은 커녕 순차적으로 실행되는 CPU 프로그램만으로도 충분했습니다.
그런 면에서 저는 코드의 흐름이 비동기적이 되는 부분부터 어려움을 느끼고, await/async, Promise, 뭐 이런 걸 정말 필요한 정도로만 알고 있습니다. 병렬 처리, 멀티스레딩 같은 건 말할 것도 없죠. 그런 점에서, 제가 모르는 영역에서 그래도 아는 키워드를 조금이라도 넓혀나가고 싶다는 것이 이 책을 집게 된 이유입니다.
이 책은 말 그대로 프로그래밍의 세계에서 동시성을 다루는 일곱 가지 모델을 다룹니다. 영어 제목에서는 좀 더 드러나지만, 7주간 금요일, 토요일, 일요일 분량을 읽고 실습하면서 개념을 익혀나가는 구성이지요. 스레드와 락, 함수형 프로그래밍, 클로저의 모티베이션, 액터, 채널, GPGPU, 맵리듀스와 하둡… 하나의 흐름으로 설명하기 어려운 프로그램들의 여러 측면을 다룬다고 할 수 있겠습니다.
원래 이 책을 읽는 방법은 이 책이 다루고 있는 예제 코드를 직접 돌려보고 연습 문제를 풀어보는 것이겠지만, 전작과 달리 그러지는 못했습니다. 그만큼 이해는 얕을 수밖에 없겠지만, 뭐 어쩔 수 없지요. 나중에 제게 이 책의 내용이 필요한 일이 온다면, 이런 개념이 어떻게 불린다는 것, 그리고 어디서 찾아야 할지는 이제 익혔으니 그 때 다시 돌아와서 머리를 싸매야겠지요.
Jaeyeol Lee 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 →박사과정을 하면 한번쯤은 내가 교수가 된다면 뭘 해볼까 생각해보게 되는 것 같다. 나의 경우에는 FPGA를 하나 사서 하드웨어부터 Verilog로 짜올려서 운영체제, 컴파일러를 만들고 C로 ray tracing을 짜는 두 학기짜리 프로젝트 과목을 해보고 싶다…만 이러면 조교가 죽어나갈 것을 알기에 꿈만 꿔본다.
First (non-reply!) post here at the lovely https://mastodon.illumos.cafe.
I run old SunOS/Solaris on retrocomputers, and modern Tribblix for fun! This account will be for sharing my exploits on these systems.
Thanks again to the wonderful Stefano Marinelli for making this possible.
Jaeyeol Lee shared the below article:
파서 콤비네이터: 하스켈 초보자를 위한 파싱

박준규 @curry@hackers.pub
이 글은 하스켈 초보자를 위한 파서 컴비네이터에 대한 입문 튜토리얼입니다. 파싱은 프로그래밍에서 흔히 발생하는 작업이지만, 정규 표현식이나 문자열 조작만으로는 복잡한 형식을 다루기 어렵습니다. 저자는 `Text.ParserCombinators.ReadP` 라이브러리를 사용하여 파서 컴비네이터를 소개하고, 이를 통해 더 읽기 쉽고 유지보수가 용이한 파서를 작성할 수 있음을 보여줍니다. METAR 보고서 파싱 예제를 통해 `satisfy`, `many1`, `<|>`, `option` 등의 기본적인 파서 콤비네이터 함수를 설명하고, 펑터와 모나드의 개념을 활용하여 파서를 구성하는 방법을 안내합니다. 또한, 파싱된 데이터의 유효성을 검사하고, 결과를 더 의미 있는 데이터 타입으로 변환하는 방법을 제시합니다. 이 튜토리얼을 통해 독자는 파서 컴비네이터의 기본 원리를 이해하고, 실제 데이터 파싱 작업에 적용할 수 있는 능력을 얻게 됩니다. 마지막으로, 저자는 독자들에게 배운 내용을 바탕으로 전체 METAR 보고서를 파싱하는 라이브러리를 만들어 Hackage에 제출해 볼 것을 권장하며, 파서가 없는 데이터를 만났을 때 `ReadP`를 자신 있게 사용할 수 있기를 바랍니다.
Read more →Zig의 좋은 아이디어라고 생각하는 것 중 하나: 여러줄 문자열을 나타낼 때 앞에 \\를 붙여서 표현한다. Rust나 JS에선 여러줄 문자열에 들여쓰기를 해버리면 그 공백문자가 그대로 들어가버리지만 Zig는 그런 문제를 피하게끔 설계했다.
Zig’s Lovely Syntax - https://matklad.github.io/2025/08/09/zigs-lovely-syntax.html
매일마다 튜사(@TuringAppleDev튜링의 사과 )로 출퇴근하는 사람으로서 혼밥하기 좋은 맛집 아카이브 중...... 태국음식점 마하차이 팟타이 괜찮군
오늘은 정말 유익한 프로그래머 회식을 가졌다
@kodingwarriorJaeyeol Lee 님의 피자 맛집 소개 및 퇴사 기념 무료 핏짜
- 함수형팔이, 언어팔이, IDE팔이들의 무제한영업제공사건
- 소비자는 관측되지 않음
Perl을 만든 언어학자 Larry Wall이 쓴 글 중에 종종 다시 읽어 보는 글
Human languages therefore differ not so much in what you can say but in what you must say. In English, you are forced to differentiate singular from plural. In Japanese, you don’t have to distinguish singular from plural, but you do have to pick a specific level of politeness, taking into account not only your degree of respect for the person you’re talking to, but also your degree of respect for the person or thing you’re talking about.
Programming is Hard, Let's Go Scripting...
그렇기 때문에 사람의 언어는 당신이 그렇다고 생각하고 있던 것과는 많이 다르다. 영어로 얘기할때는 단수와 복수를 확실히 구분해야만 한다. 일본어에서는, 단수와 복수를 구분할 필요는 없지만, 정중함의 정도를 조절할 줄 알아야 한다. 즉, 상대방에 대한 존경을 표현할 수 있는 정도를 선택해야 하고, 상대방의 입장에서 내가 존중 받아야 하는 정도를 생각해서 말해야 한다.
정보 리터러시 관련 의견을 보존하러 왔다. 우리는 흔히 영어 자료가 한국어 자료보다 낫다는 문화사대주의적 의견에 공감하곤 한다. 하지만 여기엔 숨은 의견이 여럿 있다. 하나씩 까보며 음미해보자.
영어 자료는 한국어 자료보다 낫다. => 왜 나을까? 도움이 되기 때문에. 왜 도움이 될까? => (진실에 가깝기 때문에, 다양한 경험이 전시되어 있기 때문에). 왜 진실에 가까울까? => 1차 출처에 가깝기 때문에. 왜 1차 출처에 가까울까? => 사용자가 다수이기 때문에 직접 사용하거나 번역되어 2차 출처로 기능하기 때문에. 왜 다양한 경험이 있을까? => 생산자가 자료 작성 시 영어를 선택할 확률이 한국어보다 높기 때문에.
그렇다면 우리는 영어 자료가 나은 이유를 구체적으로 표현할 수 있다.
- (일반적으로) 한국어 웹보다 영어 웹이 더 크기 때문에 원하는 자료를 구할 확률이 더 높다.
- (일반적으로) 한국어 웹보다 영어 웹에서 1차 출처에 가까운 자료를 구할 확률이 더 높다.
탐색 공간을 넓히고, 정보 전파 과정에서의 왜곡을 줄이기 위해서 영어 웹 탐색이 효과적이다. 다만 영어 웹이 "언제나" 좋은 건 아니다. 한컴오피스 자료가 미국에 많겠는가, 아니면 한국에 많겠는가? 1차 출처에 가까운 곳을 향해 왜곡을 줄이고, 그 안에서 탐색 공간을 최대한 효율적으로 넓혀야 한다.
영어 검색이라는 피상적인 행위에서 벗어나 정보 탐색의 본질을 좇는 것이 좋다.
딥러닝 제대로 이해하기 - 딥러닝의 핵심 개념부터 최신 기법까지 이론과 실제의 균형을 담은 깊이 있는 안내서 (사이먼 J. D. 프린스 (지은이), 고연이 (옮긴이) / 제이펍 / 2025-08-28 / 38,000원) https://feed.kodingwarrior.dev/r/rLZ6TW
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=369510410&partner=openAPI&start=api
좋은 내용이였다. 앞으로 에이전트 매니저 역할을 겸해야 하는 개발자들이 생각해볼만한.
Managing implementations you don't understand is a problem as old as civilization. (and every manager in the world already deals with this!) Find an abstraction layer you can verify!
How does a CTO manage an expert? -> Acceptance Tests
How does a PM review an Eng feature? -> Use the product
How does a CEO check the acccountant? -> Spot check key facts
추천받은 집으로 저녁 먹으러 갔는데 무슨 입구 거의 바로 앞에 사각지대 낭낭한 주차장 출입구 있어서 이 정도는 해야 둘이 먹다 하나 죽어도 모를 맛집 되는구나... 하고 감탄했어
We're thrilled to announce Fedify 1.8.1, a mega release made possible through the incredible efforts of contributors from South Korea's #OSSCA (Open Source Contribution Academy). This release marks a significant milestone in #Fedify's development, bringing major architectural changes, new packages, and numerous enhancements across the board.
Note: Version 1.8.0 was skipped due to a versioning error.
🎉 Major Milestone: Monorepo Architecture
Fedify has been restructured as a #monorepo, consolidating all packages into a single repository with unified versioning. This change streamlines development and ensures all packages are released together with consistent version numbers.
Consolidated Packages
All existing Fedify packages now live under one roof:
- @fedify/fedify — Main library
- @fedify/cli — CLI toolchain
- @fedify/amqp — AMQP/RabbitMQ driver
- @fedify/express — Express integration
- @fedify/h3 — h3 framework integration
- @fedify/postgres — PostgreSQL drivers
- @fedify/redis — Redis drivers
🆕 New Packages
This release introduces four new packages to the Fedify ecosystem:
- @fedify/elysia — Elysia integration for Bun-powered applications
- @fedify/nestjs — NestJS integration for enterprise Node.js apps
- @fedify/sqlite — SQLite driver compatible with Bun, Deno, and Node.js
- @fedify/testing — Testing utilities with mock
Federation
andContext
classes
@fedify/fedify
Custom Collection Dispatchers
A powerful new feature that allows you to create custom collections beyond the standard ActivityPub collections. This enables implementation of domain-specific collections while maintaining federation compatibility.
Contributors: ChanHaeng Lee [#310, #332]
- Added comprehensive types and interfaces for custom collection handling
- New methods on
Federatable
interface:setCollectionDispatcher()
andsetOrderedCollectionDispatcher()
- Added
getCollectionUri()
method to theContext
interface - Full support for paginated custom collections
Compare-and-Swap (CAS) Support for KV Stores
Key–value stores now optionally support CAS operations for atomic updates, enabling optimistic locking and preventing lost updates in concurrent environments.
- Added optional
KvStore.cas()
method - Implemented in
MemoryKvStore
andDenoKvStore
- Useful for implementing distributed locks and counters
Fediverse Handle Utilities
New utility functions make working with #fediverse handles more convenient.
Contributors: ChanHaeng Lee [#278]
parseFediverseHandle()
— Parse handles into componentsisFediverseHandle()
— Validate handle formattoAcctUrl()
— Convert handles to URLsFediverseHandle
interface for type safety
Enhanced HTTP Request APIs
Contributors: Lee ByeongJun [#248, #281], Hyunchae Kim [#51, #315]
- Added
LookupWebFingerOptions.maxRedirection
option for controlling redirect behavior - APIs now support
AbortSignal
for request cancellation - New
DocumentLoaderOptions
interface - Added
signal
options toLookupObjectOptions
,LookupWebFingerOptions
, andDoubleKnockOptions
@fedify/cli
New Commands and Enhancements
The CLI has received significant improvements thanks to our OSSCA contributors:
fedify webfinger
Command
Contributors: ChanHaeng Lee [#260, #278], KeunHyeong Park [#311, #328]
Look up WebFinger information for any fediverse resource:
- Supports handles (
@user@server
) and URLs --user-agent
option for custom User-Agent headers--allow-private-address
for local testing--max-redirection
to control redirect following
fedify nodeinfo
Command
Contributors: Hyeonseo Kim [#267, #331, #168, #282, #304]
Replaces the deprecated fedify node
command with improved terminal rendering.
Enhanced fedify lookup
Command
Contributors: Jiwon Kwon [#169, #348, #261, #321]
- Terminal-specific image display for Kitty, WezTerm, Konsole, Warp, Wayst, st, and iTerm
-o
/--output
option to save results to files
Improved fedify inbox
Command
Contributors: Hasang Cho [#262, #285], Jang Hanarae [#191, #342]
--actor-name
and--actor-summary
options for customizing temporary actors- Now displays object types contained in activities
fedify init --dry-run
Contributors: Lee ByeongJun [#263, #298]
Preview project initialization without creating files.
Better Terminal Support
Contributors: Cho Hasang [#257, #341]
Correctly handles color output based on TTY detection and NO_COLOR
environment variable.
@fedify/elysia
Contributors: Hyeonseo Kim [#286, #339]
New Elysia integration brings Fedify to Bun-powered applications with a simple plugin interface:
import { Elysia } from "elysia";
import { fedify } from "@fedify/elysia";
const app = new Elysia()
.use(fedify(federation, { /* options */ }))
.listen(3000);
@fedify/nestjs
Contributors: Jaeyeol Lee [#269, #309]
Enterprise-ready NestJS integration with dependency injection support:
import { FedifyModule } from "@fedify/nestjs";
@Module({
imports: [
FedifyModule.forRoot({
kv: new MemoryKvStore(),
queue: new InProcessMessageQueue(),
origin: "https://example.com",
}),
],
})
export class AppModule {}
@fedify/sqlite
Contributors: An Subin [#274, #318]
SqliteKvStore
implementation compatible across all major JavaScript runtimes:
import { SqliteKvStore } from "@fedify/sqlite";
const kv = new SqliteKvStore("./fedify.db");
@fedify/testing
Contributors: Lee ByeongJun [#197, #283]
Comprehensive testing utilities with mocking support for Fedify applications:
import { MockFederation, MockContext } from "@fedify/testing";
const mockFederation = new MockFederation();
const mockContext = new MockContext();
// Track sent activities with full metadata
// Support custom path registration
// Multiple activity type listeners
🙏 Acknowledgments
This release represents an extraordinary community effort, particularly from the participants of South Korea's OSSCA (Open Source Contribution Academy) (Note: page in Korean). We extend our heartfelt thanks to all contributors:
Core Contributors
- ChanHaeng Lee (
@2chanhaeng이찬행) — Custom collections, fediverse handles, WebFinger command
- Lee ByeongJun (
@joonnotnotJoon) — WebFinger redirections, dry-run, testing utilities
- Hyunchae Kim (
@r4bb1t) — AbortSignal support
- Hyeonseo Kim (
@gaebalgom개발곰) — Elysia integration, nodeinfo command
- Jaeyeol Lee (
@kodingwarriorJaeyeol Lee) — NestJS integration
- An Subin (
@nyeongAn Nyeong (安寧)) — SQLite driver
- Jiwon Kwon (
@z9mb1wwj) — Terminal image display, output options
- Hasang Cho (
@crohasang크롸상) — Color output handling, actor customization
- Jang Hanarae (
@meneleHanal Ae) — Activity object type display
- KeunHyeong Park (
@w8385박근형) — WebFinger redirect options
Test Infrastructure Contributors
- Oh Daeun (
@ooheundaoed) — Fixed PostgreSQL test race conditions [#346, #350]
- Song Hanseo (
@songbirds) — Test stability improvements for Redis and code generation [#344, #347]
- Kim Jonghyeon (
@woaol벨) — CLI version management and documentation fixes [#306, #329, #330, #343]
Your contributions have made Fedify stronger and more versatile than ever. The OSSCA program's support has been instrumental in achieving this milestone release.
Migration Guide
Updating from Previous Versions
If you're using separate Fedify packages, update all packages to version 1.8.1:
{
"dependencies": {
"@fedify/fedify": "^1.8.1",
"@fedify/cli": "^1.8.1",
"@fedify/express": "^1.8.1"
}
}
All packages now share the same version number, simplifying dependency management.
Breaking Changes
There are no breaking changes in this release. All existing code should continue to work without modifications.
What's Next
With the monorepo structure in place and new integrations available, we're excited to continue improving Fedify's developer experience and expanding its capabilities. Stay tuned for more updates, and thank you for being part of the Fedify community!
For detailed technical information about all changes, please refer to the full changelog.
Fedify is an open-source project that helps developers build federated server applications powered by ActivityPub. Join us on GitHub or Discord to contribute or get help!
We'd like to recognize some excellent contributions from our #OSSCA (Open Source Contribution Academy) participants who have been working on #Fedify.
@gaebalgom개발곰 contributed PR #339, which introduces the
@fedify/elysia
package to provide Elysia integration for Fedify. This work addresses issue #286 by creating a plugin that enables developers using #Bun and #Elysia to integrate Fedify's #ActivityPub capabilities into their applications. The contribution includes the core integration module, documentation, examples, and proper monorepo configuration, making Fedify accessible to the Elysia community.
@r4bb1t submitted PR #315, implementing comprehensive
AbortSignal
support across multiple APIs to resolve issue #51. This contribution adds request cancellation capabilities not only to lookupWebFinger()
but also to lookupObject()
, DocumentLoader
, and the HTTP signature authentication flow (doubleKnock()
), allowing developers to properly handle timeouts and abort ongoing requests throughout the entire request chain. The implementation includes extensive test coverage for cancellation scenarios across all affected components and lays the groundwork for adding --timeout
options to various CLI commands like fedify lookup
, fedify webfinger
, and fedify nodeinfo
, making federated applications more robust and responsive.
@ooheundaoed addressed a testing infrastructure issue with PR #350, fixing a race condition in PostgreSQL message queue tests that was causing intermittent failures (issue #346). By adding explicit initialization before concurrent message queue listeners, this fix prevents table creation conflicts that were affecting test reliability, ensuring more consistent PR testing for all contributors.
@songbirds provided two test stability improvements with PR #344 and PR #347. The first PR adds skip guards to
RedisKvStore
tests as a workaround for a known Bun runtime issue, keeping the test suite functional while awaiting an upstream fix. The second PR resolves a race condition in the code generation process by randomizing output filenames, preventing conflicts during parallel test execution. These contributions help maintain a stable testing environment for the project.
Thank you all for your contributions to Fedify. Your work helps make federated social networking more accessible to developers.
바이브코딩의 순기능(?) 이라고 할까요? 이런게 있으면 편하지 않을까? 라고 생각했을 때 적당한 도구를 빠르게 쳐낼 수 있는게 매력인 것 같아요. 말 못알아듣고 무한루프 돌때는 좀 그렇지만...
제가 관전하고 있는 OS 스터디에서 서울대 커리큘럼을 주로 활용하는데, 거기에 맞춰서 카이스트 자료도 정리해놓고 이것저것 붙였습니다. 만들고 나니 기분이 좋네요!!
Replit으로 이런걸 만들었어요 https://tweet-gen-ai.replit.app/
결과는 이런식으로 나와요 https://tweet-gen-ai.replit.app/shared/FyZD8OU9W-gsXg3SxFqpv
What is the biggest reason that makes you hesitate to adopt #Fedify?
July has been a truly incredible month for LLM releases from China - Moonshot (Kimi K2), Z ai (GLM-4.5) and 5 new releases from Qwen
I think it's undeniable that the best available open weight models now come from the Chinese AI labs https://simonwillison.net/2025/Jul/30/chinese-models/
올해 UCPC 본선에 H번 문제 시간선 통합을 출제했습니다! 구현이 풀이 도출에 비해 까다로운 문제임에도 불구하고 많은 팀이 도전해주셔서 감사했습니다. 내년에도 좋은 문제로 찾아뵙고 싶습니다 😊
논문요약기 리팩토링을 좀 했습니다 https://github.com/theeluwin/summarxiv 오픈소스지만 세팅하기 귀찮으신 분들을 위해서 제가 연1만원에 매일 아침 메일로 보내드립니다 https://forms.gle/xiLPNyEqsLEH5BLH9 많관부
해커스펍 영업짤 생성 >_<