Profile img

wwj

@z9mb1@hackers.pub · 105 following · 87 followers

하이룽

Github
@sij411
kwonjiwon.org
kwonjiwon.org

작업 내역

  • https://github.com/cosmoslide/cosmoslide/pull/45 PDF 업로드 기능이라도 구축은 해야할 것 같아서 진행함. 보통은 express라던가 등등 JS 기반의 웹서버 프레임워크에서는 파일시스템/S3/GCS 등의 스토리지에 파일을 업로드할때, 스토리지에 접근하는 과정 자체를 추상화하는 flydrive라는걸 쓰는데, flydrive는 NestJS에서 사용이 되지 않는 ESM-only 모듈이어서, 어떻게 해야 하나 하다가 Claude Code한테 AWS S3에 접근하는 것만 적당히 추상화해서 야크쉐이빙 해달라고 했더니 그냥 순식간에 되었다. 문서를 뜯어보고 구현해야하는 수고는 줄었고, aws sdk를 어떻게 활용하는지는 가성비있게 학습할 수 있는 기회가 되었다.

  • https://github.com/cosmoslide/cosmoslide/pull/46 프로필 화면에 Presentation 탭을 넣었고, 프레젠테이션 파일을 업로드하면 Create(Note) 액티비티가 발생되도록 처리했다. react-pdf 이용해서 커스텀 PDF 뷰어 적당히 끼워넣었다.

PDF 업로드 기능 가설 검증프레젠테이션을 위한 커스텀 PDF 뷰어프로필 화면에 Presentation 탭 넣었다.
4

We're excited to announce that has been awarded a service agreement by the @sovtechfundSovereign Tech Agency! The Sovereign Tech Fund is investing €192,000 in Fedify's development over 2025–2026 to strengthen the fediverse ecosystem.

This investment will enable us to significantly expand Fedify's capabilities and make it easier for developers to build federated applications. The commissioned work focuses on improving developer experience, adding comprehensive debugging tools, and ensuring Fedify remains at the forefront of innovation.

Here are the key milestones we'll be delivering:

  • Web framework integrations: Official adapters for Next.js, Elysia, Fastify, and Koa, making it seamless to add federation to existing applications

  • ActivityPub debug & development tools: Real-time debug dashboard with WebSocket monitoring, federation lifecycle hooks, and implementation checklist CLI to make federation interactions transparent and debuggable

  • Storage & infrastructure enhancements: SQLiteKvStore for robust file-based storage across Node.js, Deno, and Bun, plus performance optimizations for production deployments

  • Comprehensive documentation & examples: Specialized tutorials for building federated blogs, social networks, and content platforms, with complete working examples and migration guides

  • Observability & monitoring: Full OpenTelemetry metrics, performance benchmarking tools, and federation health dashboards for production environments

  • Advanced features & standards: FEP-ef61 (Portable Objects) support and implementation of emerging Fediverse Enhancement Proposals to keep Fedify at the cutting edge

All developments will be open source and available for the entire community to use, contribute to, and build upon.

https://www.sovereign.tech/tech/fedify

7
13
3
8
3
0
1

Optique 0.6.0 is adding shell completion! We already support:

  • Bash
  • zsh
  • fish
  • PowerShell

This covers most users, but should we add more niche shells? Your input helps us prioritize!

5
1
3

@z9mb1wwj 일단 LLM과 AI 도구에는 언제나 hype이 가득해서 그대로 믿으면 안되는 것은 있지만, 지금 시점에서 Sonnet 4.5는 경쟁 모델이나 자사의 상위 모델보다도 에이전틱 코딩 등에서 더 좋은 벤치마크 결과를 내고 있어요. 그리고 Claude Code는 지금 시점에서 잘 만든 코딩 에이전트 중 하나구요.

전 사람들이 Claude와 Anthropic을 욕하는 이유가 초기보다 줄어든 Quota와 최근 일련의 성능 저하 이슈 등이 있다고 생각하는데, Sonnet 4.5는 가격이나 quota 아니면 속도 등에서 기존 Sonnet과 큰 차이가 없고 오히려 결과도 Opus보다 좋은 경우가 더 많아서 이러면 Quota 문제에 대해 기존보다 덜 스트레스를 받을 수 있다고 생각해요. 이제 Claude Code에 usage 커맨드도 들어가서 사용량 체크도 쉬워졌구요.

2

@z9mb1wwj

  1. (가장 쉽고 간단함) 겉면에 전분을 넉넉히 바르고 굽거나 튀기는게 짱입니다. 괜히 야채 튀기거나 할 때 전분을 묻히거나 전분물을 묻히거나 하는게 아니더라구요.
  2. (좀 더 복잡하고 귀찮음) 두부는 스폰지처럼 안에 물을 많이 머금고 있는데, 얼렸다가 녹이면서 좀 무거운걸로 위에 눌러두면 물이 쫙 빠집니다. 그러면 수분이 많이 빠져서 구울 때 더 바삭해지기 쉽고 전골같은거 만들 때는 국물이나 소스를 더 잘 머금게 됩니다.
0
1
0

최근 며칠간 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이 과연 얼마까지 바이브 코딩으로 할 수 있는지를 테스트하는 목표였다면, 이번에는 정말로 목표를 달성하는 수단으로 기능할지 실험해 볼 작정이다.

https://github.com/lifthrasiir/wah/ 정식으로 공개했다. 현재 4800여줄. WebAssembly 1.0 거의 완전 지원, 2.0은 SIMD를 포함해 8~90% 정도 지원하는 정도까지 왔다. 하지만 아직 API 문제를 완전히 풀진 못해서 모듈 링킹이 안 되는 치명적인 문제가 있다...

8
9
1
2
4
0

"두통과 함께하는 사람들"은 다음 주(22일 ~ 28일) 편두통 인식 개선 주간을 맞이해서 광화문에서 커피차 이벤트를 진행합니다! 주변에 많은 공유와 참여 부탁드려요.

  • 📆 언제? 2025년 9월 22일 (월요일) 오전 10시 ~ 오후 2시
  • 📍 어디서? 광화문 한국프레스센터 광장 [네이버 지도]
  • 📋 무엇을 하나요? 편두통 질환과 캠페인을 소개하며 다양한 기념품(안대와 귀마개 등)과 음료를 드립니다! 🎁🥤
  • 왜 하나요? 국제적으로 진행하는 캠페인의 일환으로 편두통에 대한 오해를 해소하고 편두통을 알리는걸 목표로 합니다.

오랫동안 열심히 준비하던 것 중 하나입니다. 부스 놀러와주시면 기쁠 것 같아요.

편두통, 오해말고 이해를! 당일 배포될 팜플렛의 표지입니다.
6
0
0

최근 며칠간 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
2
5
2

이제 자신이 보여주고 싶지 않은 추천사를 가리는 기능도 추가되었습니다. 메인 페이지에서 링크 타고가시면 사용 가능해요. 많은 이용 부탁드립니다.

https://referral.akaiaoon.dev/ 이 링크에서 사용 가능하고, 내가 받은 추천사는 https://referral.akaiaoon.dev/u/:username 으로 볼 수 있습니다. 아래 말코링님의 추천사 리스트를 참조해 주세요.

말코링님의 추천사

레퍼럴프로젝트의 새로운 기능 - 추천사 가리기
8
0
0
0
1
30
1
4
6

갑자기 불현듯 하이텔이나 나우누리 같은 옛날 PC통신이 떠올라서 난 한 번도 그 시절을 겪어본 적이 없었는데 어떤 느낌일까 싶어서 해보고 싶어가지고 검색 해봤는데 생각보다 쉽게 사설 BBS를 접속하는 프로그램을 찾아내서 탐방했음. 미국은 사설 BBS가 아직 명맥을 이어가는 것 같은데 국내 거는 사실상 멸종한 것 같다...여튼 하니깐 어릴 때 친구네집 펜티엄 컴퓨터 갖고 스치듯 했던 MS-DOS 갬성이 엄청 느껴져서 하는 내내 헤벌레 미소 지으면서 했다 ㅋㅋㅋ 나갈 때 작별인사 페이지도 따로 있어서 살짝 감동 먹음 🥹

참고로 사용한 프로그램은 MuffinTerm이고 애플 계열 기기에서 돌아간다 (아이패드 포함). 접속한 BBS는 8bit-boyz라는 미국 레트로 컴퓨팅 커뮤니티다.

8bit-boyz BBS 접속 사진
7

여러 분들의 도움으로 대충 리퍼럴 사이드 프로젝트의 모양이 점점 더 갖춰지고 있습니다...

이제 https://referral.akaiaoon.dev/t/malkoG 하면 malkoG 깃허브 핸들에 추천사를 작성하실 수 있고요, https://referral.akaiaoon.dev/u/malkoG 하면 malkoG 깃허브 핸들에 추천하신 분들의 추천사를 작성하실 수 있습니다.

다음에는 /t/ 엔드포인트용 뱃지 이미지를 만들까봐요... buy me a coffee 처럼 말이죠. 예를 들면: "Buy Me A Coffee" 뭐 이런 이미지가 있으면 더 좋지 않을까요.

4

wwj shared the below article:

How to Build a Simple ActivityPub Reminder Bot in Python

AmaseCocoa @cocoa@hackers.pub

This post guides you through building a simple ActivityPub bot in Python using the `apkit` library. The bot listens for mentions and schedules reminders for users. It covers setting up the project, generating cryptographic keys for secure communication, defining the bot's identity as an ActivityPub Actor, and initializing the `apkit` server. The tutorial walks through the core logic for parsing reminder commands, sending notifications, and defining necessary web endpoints like `/actor` and `/inbox`. It also details how to handle incoming activities, such as `Follow` and `Create` events, and how to run the application using `uvicorn`. While the example uses in-memory storage for simplicity, the post suggests improvements like persistent storage and robust task queuing for production environments. This tutorial provides a solid foundation for building more complex ActivityPub applications.

Read more →
16
1
0
2
7

협동조합을 만든다고 한 지 벌써 반 년이 지났습니다. 그동안 아무런 소식이 없어 많은 분들이 흐지부지됐거니 하고 생각하셨을 것 같습니다. 죄송합니다.

변명을 하자면, 협동조합이 왜 필요한지에 대해 깊이 고민하는 시간을 가졌습니다. 단순히 공동 운영이나 법인화가 목표라면 협동조합 이외에도 가능한 형태는 많으니까요.

긴 고민 끝의 결론은, '플랫폼은 컨텐츠를 만드는 사람들이 소유하고 운영해야 한다' 였습니다.
저는 플랫폼의 가장 큰 가치는 사용자와 이야기, 즉 사용자들이 만들어 낸 세계라고 생각합니다.
그러나, 회사가 운영하는 플랫폼들은 결국 수익을 가장 중요한 목적으로 삼고, 수익의 극대화를 위해서라면 사용자들이 만든 세계를 거리낌 없이 파괴하기도 합니다.
광고 수익을 높이기 위해 자극적이고 혐오적인 글을 알고리즘을 통해 추천하는 트위터가 단적인 예시입니다.

그래서 동인이 소유하고 운영하는 협동조합을 만드려고 합니다. 동인이니만큼 더더욱, 우리들이 만들어 낸 세계는 소중합니다.

1
0
0
17
0
0

오늘 모임 전까지는 만들어서 공개하고 싶었는데ㅠㅠ 수업 준비가 바빠서 진도를 못내고 있네요... 사실 PF까지는 다 만들었는데 문서 쓰는게 일입니다... 각종 튜토리얼에, 차근차근 진행할 수 있는 가이드라인에 등등.... 그래도,,,, 많이 기대해주세요,,, 년 단위 프로젝트가 되겠지만...

8
8
0
0
1
0
0
0
1

Today I discovered an interesting inconsistency in Activity Streams specs while investigating a Fedify issue.

The question: How should we interpret URLs like "icon": "https://example.com/avatar.png"?

JSON-LD context (https://www.w3.org/ns/activitystreams): @type: "@id" → “This is an IRI reference, dereference it to fetch an ActivityStreams object.”

Activity Streams Primer: “assume that a bare string is the href of a Link object, not an id” (no dereferencing)

Result: JSON-LD processor-based implementations try to parse PNG files as JSON and fail.

Turns out w3c/activitystreams#595 already discusses the same issue for href properties. I added a note that icon, image, etc. have the same problem.

Once again reminded of how tricky spec work can be…

0