Profile img

Jihyeok Seo

@jihyeok@hackers.pub · 84 following · 58 followers

Hi. This is Jihyeok from South Korea, building web services for the public good. Here are some services I build and maintain:

  • Oeee Cafe: Oekaki drawing board community
  • Typo Blue: Text-only blogging platform
  • Naru: Geocities-like website hosting platform
Website
ji.hyeok.org

Fedify 2.0.0 is here!

This is the biggest release in Fedify's history. Here are the highlights:

  • Modular architecture — The monolithic @fedify/fedify package has been broken up into focused, independent packages: @fedify/vocab, @fedify/vocab-runtime, @fedify/vocab-tools, @fedify/webfinger, and more. Smaller bundles, cleaner imports, and the ability to extend ActivityPub with custom vocabulary types.
  • Real-time debug dashboard — The new @fedify/debugger package gives you a live dashboard at /__debug__/ showing all your federation traffic: traces, activity details, signature verification, and correlated logs. Just wrap your Federation object and you're done.
  • ActivityPub relay support — First-class relay support via @fedify/relay and the fedify relay CLI command. Supports both Mastodon-style and LitePub-style relay protocols (FEP-ae0c).
  • Ordered message delivery — The new orderingKey option solves the “zombie post” problem where a Delete arrives before its Create. Activities sharing the same key are guaranteed to be delivered in FIFO order.
  • Permanent failure handlingsetOutboxPermanentFailureHandler() lets you react when a remote inbox returns 404 or 410, so you can clean up unreachable followers instead of retrying forever.

Other changes include content negotiation at the middleware level, @fedify/lint for shared linting rules, @fedify/create for quick project scaffolding, CLI config files, native Node.js/Bun CLI support, and many bug fixes.

This release includes significant contributions from Korea's OSSCA participants. Huge thanks to everyone involved!

This is a major release with breaking changes—please check the migration guide before upgrading.

Full release notes: https://github.com/fedify-dev/fedify/discussions/580

3
5
0
1
0
0
1
0
8
5
0
0
0

I've spent a long time asking myself why open source matters so much to me, why I keep coming back to it. I once joined a company purely because they promised I could do open source full-time (it didn't turn out well). Before that, I was doing open source inside and outside of regular jobs. And now, in the age of LLMs, when the value of code itself seems to be declining, I'm still here, still doing this.

Recently it clicked. I do open source because it's social work—in the sense that it lets me participate in society.

Everyone wants to belong to some community, to connect with others. But I was never good at the usual ways of doing that. Social activities that came naturally to others were difficult for me. In school, I had few friends. After class, I'd stay home assembling Lego or reading books alone. Then I discovered coding.

Coding was a wonderful hobby for me, especially because I encountered it at the dawn of the internet era. The first programming languages I properly learned were Perl, PHP, and JavaScript—all languages of the internet age. The synergy was something else.

Gradually I fell into the world of open source. And there, even someone like me—awkward at conventional social interaction—could be social. My code helped people. I could collaborate by exchanging code. I could have conversations, mediated by code. IRC, mailing lists, forums—these became my social media. Over time, “the group I wanted recognition from” became the people in the open source world. I didn't care much about being recognized by classmates, but I wanted to be recognized by these people I'd never met face to face.

That mindset still shapes me now, approaching forty. I still care more about recognition from open source programmers than from colleagues. The social activity that happens in open source communities is, after my family, the most important social activity in my life.

The specific things I build, the technical details—those matter less than I used to think. I just want to do the kind of social activity that suits me, and open source happens to be the way I do it.

That's all, really.

7
8
0
2

RE: planet.moe/@commung/1158759382

커뮹! 은 웹 버전(commu.ng)으로 시작되었습니다.

푸시 알림을 원하시는 분이 많아 앱으로도 개발하게 되었고, 현재 푸시 알림과 기본적인 기능만을 지원하는 상태입니다.

앱에 이어 추후 다이스, 상점봇 등을 구현하기 위한 API도 제공 예정입니다.

많은 응원 부탁드립니다!

0

마스토돈 스타일의 새로운 커뮤 플랫폼, 커뮹! 모바일 앱이 출시되었어요! 베타 테스트에 참여해주신 여러분, 커뮹!에서 활동해 주시는 여러분 모두 응원해주셔서 감사합니다 🐓📲🥰

iOS: apps.apple.com/us/app/commung/
Android: play.google.com/store/apps/det

2
0
1

I've always believed that structured logging shouldn't be complicated. Seeing Sentry echo this sentiment in their latest engineering blog post—and using LogTape to demonstrate it—is a massive validation for me.

They did a great job explaining why we need to move beyond console.log() in production. Really proud to see my work mentioned alongside such a standard-setting tool.

https://blog.sentry.io/trace-connected-structured-logging-with-logtape-and-sentry/

1
0
1
8
0
0

Just had someone leave feedback on my F/OSS project saying “maybe that's fine if a product is focused on your Chinese community.”

I'm Korean. Every single piece of documentation is in English. There's nothing in Chinese anywhere in the project.

This kind of microaggression is exhausting. As a non-white maintainer, you deal with these assumptions constantly—people who feel entitled to your labor while casually othering you based on your name.

It chips away at your motivation. It makes you wonder why you bother.

https://github.com/dahlia/optique/issues/59#issuecomment-3678606022

0
14
1
2

오이카페 모바일 앱이 출시되었어요! 베타 테스트에 참여해주신 여러분, 오이카페에서 활동해 주시는 여러분 모두 응원해주셔서 감사합니다 🥒📲 🥰

iOS: apps.apple.com/us/app/oeee-caf
Android: play.google.com/store/apps/det

2
0

🐓📲 커뮹! 모바일 앱이 출시됩니다. 앱이 성공적으로 출시될 수 있도록 도와주세요. 모바일 앱 베타 테스트 신청서를 받고 있습니다. 부스트 해주시면 감사합니다! 많관부! forms.gle/FERUP55A2jcGZbsP7

0
0
0
0
0
0
0
0

오이카페 모바일 앱 베타 테스트 신청서를 받고 있습니다.

1
1

오이카페에 이어그리기에 이어서 그림으로 답글을 달 수 있는 기능이 추가되었습니다! 그리고, 그림 상세 페이지에서 답글과 댓글을 한눈에 볼 수 있도록 개선되었습니다! 예시

개선된 오이카페 그림 상세 페이지.
5

The federated and networked oekaki board, Oeee Cafe, now support emoji reactions from the fediverse! You also get notifications from the fediverse as well.

A drawing of Zapdos, with reactions received from the fediverse shown below.List of notifications received from the fediverse.
9

마스토돈 스타일의 새로운 커뮤 플랫폼, 커뮹! 을 런칭합니다. 기성 소셜 플랫폼들을 커뮤 운영 방식에 끼워 맞추던 불편함을 해소하고자 시작된 프로젝트입니다. 당초 예상했던 것보다 뜨거운 관심에, 계획보다 빠르게 출시하게 되었습니다. 많은 응원과 관심 부탁드립니다. commu.ng

3
0
0
1
10
8
3
0
0
0
2
1

최근 며칠간 WAH라는 이름의 WebAssembly 인터프리터를 만들고 있다. ~와! 샌즈!~

WAH의 특징이라면 C로 작성되어 있는데 헤더 하나로 구성되어 있다는 점과, 거의 대부분의 코드를 Gemini가 짰다는 것 정도일까? (Claude Code도 좀 사용했지만 코드 생성은 Gemini가 다 했다.) Gemini가 디버깅을 시키면 답답한 게 사실이라서 최대한 프롬프트에 정보를 많이 넣고 few-shot으로 생성하게 하는 걸 목표로 했는데 생각보다 잘 되었다. 예를 들어서 한 프롬프트는 다음과 같았다. 저 문장 하나 하나가 시행착오의 결과이다.

@wah.h 에 if~else~end 명령을 구현하고, 대응되는 test_*.c 파일들이 모두 성공하도록 (또는, 해당 테스트에서 잘못된 점이 있을 경우 그 원인을) 고쳐줘. 아직 loop 관련된 코드는 처리할 필요 없고 테스트 중에 그걸 테스트하는 게 있다면 주석 처리해(지우지는 마). 컴파일과 실행은 &&로 한 번에 하도록 해. 정확한 구현 방법은 이래야 해: if~else~end에서 마지막 end는 사라지고, if는 else 직후 명령으로 이동하는 conditional jump로 재활용하며, else는 unconditional jump로 바뀌어(즉 실행기 입장에서 br과 else의 동작은 똑같아야 해! else를 아예 없애고 br로 대체할지 말지는 알아서 정해). 그러니까, if A B C else D E F end G 같은 명령이 있다면 preparsing 이후에는 if <offset to D> A B B C else <offset to G> D E F G 형태가 되어야 한다는 뜻이야. WebAssembly 명세에 따르면 if 문에는 block type이 따르는데, 이 타입을 사용해서 validation을 진행하는 것도 정확히 구현해야 해(block type이 function type (T1..Tn)->(U1..Um)이면 현재 스택에 T1..Tn 타입이 들어 있고 end 이후에는 U1..Um 타입이 들어 있어야 하고, 일반 타입 T가 들어 있다면 ()->(T)와 동일하게 취급함). block type은 validation 이후 preparsing 과정에서 사라져서 런타임에는 반영되지 않도록 해.

솔직히 너무 많이 요구하는 거 아닌가, 안되면 validation 부분을 어떻게 뺄지 고민하고 있었는데 시도 세 번만에 800줄짜리 diff가 떡하니 나오고 일단 보기에는 틀린 부분이 없어서 놀랐다. 물론 삽질도 많이 했는데 가장 많이 한 삽질은 테스트를 작성할 때 수동으로 WebAssembly 바이너리를 짜면서 바이트 숫자를 잘못 세어서 오류가 나는 거랑, 분명 WebAssembly opcode를 사용해야 하는데 자기 마음대로 코드를 정해 버린다거나 하는... 그런 우스운 상황이었다.

우습기도 하고 놀랍기도 하지만 이 코드를 내가 직접 짜지 않는 이유는 귀찮아서...라기보다는 내가 이걸로 하고 싶은 일이 따로 있고 WebAssembly 인터프리터를 만드는 게 주 목표는 아니기 때문이다. (원래 하고 싶은 일은 나중에 언급할 듯.) WebAssembly 구현이라고 하면 기술적으로 복잡해 보이지만, 내 용도에서 유래하는 몇 가지 조건(대표적으로 결정론적인 동작)을 제약으로 걸면 기술적으로 복잡하다기보다는 그냥 노가다에 가까워지기 때문에 끌리지 않는 것도 있긴 하다. 이전의 Angel이 과연 얼마까지 바이브 코딩으로 할 수 있는지를 테스트하는 목표였다면, 이번에는 정말로 목표를 달성하는 수단으로 기능할지 실험해 볼 작정이다.

9

나루 UI를 전면적으로 개편했습니다. 먼저 메인 화면에 오이카페타이포 블루의 광고를 넣었고요 (...) 파일 탐색기와 에디터를 좀 더 사용하기 편하게 개선했습니다. 또, 어떤 이유로든 나루를 떠나 다른 곳에서 사이버 보금자리를 차리고 싶은 분들을 위해 나루 갠홈 다운로드 기능을 추가했습니다. 앞으로도 잘 부탁드립니다!

광고가 삽입된 나루 홈페이지 스크린샷새로워진 나루의 파일 탐색기 스크린샷갠홈 다운로드 버튼 스크린샷
8
0
0
3
0
0
2

요즘 오에카키 같은 2000년대 초반 인터넷 유물?같은 게 종종 머릿속에 떠오르는데 분명 내가 어릴 때여서 추억화된 것 때문인 걸 알고 있음에도 그 시절 인터넷 서브컬쳐들이 좀 그리울 때가 있다. 뭔가 그 특유의 투박한 디자인들이 자꾸 떠오름...

5

Every CLI tool has the same validation code hidden somewhere:

  • “option A requires option B”
  • “can't use X and Y together”
  • “this only works in production mode”

I got tired of writing it. So I built something that makes it unnecessary.

https://hackers.pub/@hongminhee/2025/stop-writing-cli-validation-parse-it-right-the-first-time

4
1
0

맹자에 따르면 측은지심은 옥시토신에서 발하고 수오지심은 아드레날린에서 발하고 사양지심은 세로토닌에서 발하고 시비지심은 도파민에서 발하는 것이다.
음기는 염기성이고 양기는 산성인 것과 마찬가지로 자명하다. 아니라고? 태양은 수소이온 덩어리고 달 토양은 아폴로가 가져왔다.
뭐? 태양은 수용액이 아니라고? 그런건 모르겠고 아무튼 그렇다.

더 보기: sfstory.co.kr/novel2/lists/6626