XiNiHa

@xiniha@hackers.pub · 79 following · 89 followers

GitHub
@XiNiHa
Bluesky
@xiniha.dev
Twitter
@xiniha_1e88df
4

오픈소스 프로젝트에 여러분의 gemini cli(등등)의 무료 사용량을 기여하세요

오픈소스 소프트웨어라는 소프트웨어 개발 방법은 그동안 대성공을 거두어 오고 있습니다. 여기에는 여러 요인이 있지만, 중요한 요인 중 하나는 이것입니다. 상업 소프트웨어든 오픈소스 소프트웨어든 공평하게 프로그래머의 시간을 들인 만큼 개발된다는 것이지요. 능력 있는 소프트웨어 개발자가 시간을 기여하면 오픈소스 소프트웨어는 상업 소프트웨어만큼이나 빠르게 성장할 수 있었습니다.

하지만 AI 프로그래밍의 시대가 빠르게 다가오고 있습니다. 앞으로 소프트웨어 개발은 프로그래머의 시간만으로 개발되지 않습니다. 상업소프트웨어는 AI 프로그래밍을 적극적으로 사용하여 이전과 다른 생산성으로 개발되기 시작할 것입니다. 상업 소프트웨어와 달리 오픈소스 소프트웨어는 언제나 그럴 수는 없습니다. 프로젝트의 성장과 유지를 위해 훌륭한 프로그래머들의 시간을 들이는 것을 넘어서, 훌륭한 프로그래머들이 시간에 더해 비용까지 들여야 한다면요.

상업 소프트웨어와 오픈소스 소프트웨어 사이의 불균등한 생산성의 시대가 코앞까지 다가오고 있습니다.

새로운 기여자 확보의 문제

문제는 여기서 그치지 않습니다. 오픈소스 프로젝트는 새 기여자를 얻기 더 힘들어져가고 있습니다. 왜냐하면 이제 'good first issue'라는 것은 의미가 없기 때문입니다. 그 정도로 쉬운 일은 새로운 기여자 대신 로봇이 해결할 가능성이 높고, 그 로봇은 새로운 기여자의 로봇일 수도 있습니다. 결국 AI 프로그래밍으로 기여하는 새 기여자는 이 프로젝트에 대해 거의 배우지 못하게 됩니다.

전통적인 오픈소스 생태계에서 'good first issue'는 단순히 쉬운 문제를 해결하는 것이 아니었습니다. 새로운 기여자가 프로젝트의 코드베이스를 이해하고, 개발 프로세스를 익히며, 커뮤니티와 소통하는 법을 배우는 학습 과정이었습니다. 하지만 AI가 이런 단순한 작업들을 대신 처리하게 되면, 새로운 기여자들은 진입 기회를 잃게 됩니다.

AI 프로그래밍의 현재 위치

AI 프로그래밍은 완벽하지 않습니다. 숙련된 전문가가 숙련된 도메인에서 작업하는 것만큼 잘하지는 못합니다. 하지만 비숙련된 프로그래머가 처음 보는 프로젝트에서 작업하는 것보다는 잘할 때가 많습니다.

그러나 많은 오픈소스 소프트웨어는 바로 이런 비숙련 기여가 성장의 한 축을 차지합니다. 처음 프로젝트에 참여하는 개발자들의 작은 기여들이 모여 거대한 프로젝트가 됩니다. 그리고 이런 비숙련 기여의 일부는 손쉽게 AI가 대체할 수 있는 기여입니다.

다행히도 지금은 AI 프로그래밍의 초창기입니다. Gemini CLI가 무료 사용량을 제공하듯이, 앞으로 여러 회사들이 비슷한 기회를 제공할 것입니다. Claude, ChatGPT, Copilot 등 다양한 AI 도구들이 개인 사용자에게 무료 크레딧을 제공하고 있습니다.

이것은 오픈소스 프로젝트에 기여할 새로운 기회로 삼을 수 있을까요?

주의: 이 글은 아무 프로젝트에나 방문해서 AI로 적당한 코드를 생성한 다음 패치를 보내라는 뜻이 아닙니다.

AI 프로그래밍은 (아직은) 마법이 아닙니다. "이 프로젝트를 겁나 멋지게 만들 기능을 추가해주세요"라고 한다고 해서 그런 패치가 나오는 식으로는 동작하지 않습니다.

이상적인 경우: AI 친화적 프로젝트

가장 좋은 방법은 프로젝트가 AI 친화적으로 준비되는 것입니다. 바로 작업할 수 있을 만큼 잘 정의된 이슈들이 있는 프로젝트라면, "nnn 번 이슈에 대해 작업해 주세요"라는 요청만으로도 누구나 기여할 수 있을 것입니다.

하지만 (적어도 아직은) 그런 프로젝트가 많지는 않을 것입니다.

현실적인 접근: AI가 잘하는 일들에 집중

대신 AI는 인간과 비대칭적으로 잘하는 기능이 있습니다.

이를테면 이슈에 minimal reproducible case가 보고되어 있지만 아직 구체적으로 발생하는 원인이 밝혀져 있지 않은 경우를 생각해봅시다. 버그를 고치는 사람이 해야하는 지루한 작업 가운데 하나는, 이 문제를 어떻게 수정할지를 생각하기에 앞서 이 문제가 어디서 발생하는지 찾는 것입니다. 디버거를 써야 할 수도 있고, 코드에 많은 trace log를 남겨야 할 수도 있습니다.

하지만 AI 코딩 에이전트는 테스트가 재현 가능하기만 하다면, 문제를 발생시키는 정확한 줄을 찾아내는 데 탁월합니다. 지치지 않고 정석적인 지루한 방법으로 꾸준히 로그를 추가하고 테스트를 다시 실행하면서 문제를 찾아내거든요.

어쩌면 문제의 원인이 아주 단순해서, 문제를 바로 수정할 수 있을지도 모릅니다! 그렇다면 패치를 제출해도 좋겠지요. 하지만 바로 수정하기까지는 어렵더라도 괜찮습니다. 버그 리포트와 실제 코드의 문제를 매핑하는 것은 그 자체로 지루하고 시간이 걸리는 일입니다. 이것을 대신하는 것으로도 큰 작업을 대신하는 것입니다.

주의: 모든 프로젝트가 AI 기여를 환영할 리는 없습니다. 충분히 유용하게 다듬어지지 못한 유형의 AI 기여는 스팸처럼 느껴질 가능성이 있음을 유의해야 합니다.

미래

사실 누구나 자기 라이브러리를 뚝딱 만들어낼 수 있게 되었다는 점에서 오픈소스 프로젝트에 참여하는 사람들의 동기와 기여 방식 자체가 크게 뒤바뀔 가능성이 높습니다.

AI 프로그래밍을 누구나 거의 무료로 사용할 수 있는 시대가 올까요? 아마 어느 정도의 사용량까지는 그럴 것입니다. 그것이 얼마나 많은 양일지에 따라서 오픈소스 프로젝트의 미래는 크게 바뀌겠지요.

만일 정말로 AI 프로그래밍을 누구나 무제한적으로 사용할 수 있다면, 대규모가 아닌 대부분의 오픈소스 프로젝트에는 더이상 협력이 필요하지 않을 것입니다. 진정으로 '어떻게'보다 '무엇을'이 더 중요한 시대가 온다면, 프로젝트의 목표를 확고하게 가진 사람이 극한의 완성도까지 프로젝트를 밀어붙이는 편이 훨씬 좋은 결과를 만들겠지요.

그런 시대가 올지 오지 않을지 모르겠습니다. 하지만 그 전까지는, AI 프로그래밍이 누구에게나 주어지는 기회이지만 프로젝트를 단숨에 완성할만큼 주어지지는 않는 시대가 유지되는 동안에는, 다음 세대의 오픈소스 기여의 방법은 AI 프로그래밍 사용량을 기여하는 것이 하나의 큰 축이 될 것입니다.

15
0
0
4

XiNiHa shared the below article:

How to pass the invisible

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

This post explores the enduring challenge in software programming of how to pass invisible contextual information, such as loggers or request contexts, through applications without cumbersome explicit parameter passing. It examines various approaches throughout history, including dynamic scoping, aspect-oriented programming (AOP), context variables, monads, and effect systems. Each method offers a unique solution, from the simplicity of dynamic scoping in early Lisp to the modularity of AOP and the type-safe encoding of effects in modern functional programming. The post highlights the trade-offs of each approach, such as the unpredictability of dynamic scoping or the complexity of monad transformers. It also touches on how context variables are used in modern asynchronous and parallel programming, as well as in UI frameworks like React. The author concludes by noting that the art of passing the invisible is an eternal theme in software programming, and this post provides valuable insights into the evolution and future directions of this critical aspect of software architecture.

Read more →
11
1
0
1

회사에서 AI 도입 드라이브가 강한데 솔직히 하나만 했으면 좋겠다는 생각이 든다. 기존의 방식으로 일하는 것을 그만두든지 AI를 신경쓰지 말든지. 두개를 애매하게 다 하려니까 가랑이가 찢어진다.

1

실제로 Hackers' Pub은 Mac mini M4 깡통에서 돌아가는데, 아직 Asahi Linux가 M4를 지원 안 해서 macOS 안에 컨테이너 띄워서 돌리고 있어요. Asahi Linux가 M4 지원할 때까지 숨 참고 기다리는 중입니다…

2

Windows NT라는 이름은 David Cutler의 말장난에서 비롯되었다고 한다. 그가 DEC에서 일할 적에 만든 운영체제가 VMS인데, Microsoft로 옮긴 뒤에 VMS를 계승한다는 의미에서 VMS의 각 알파벳을 한 글자씩 뒤로 미룬[1] WNT를 코드네임으로 썼던 것.


  1. V → W, M → N, S → T. ↩︎

6

XiNiHa shared the below article:

If you're building a JavaScript library and need logging, you'll probably love LogTape

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

LogTape offers a novel approach to logging in JavaScript libraries, designed to provide diagnostic capabilities without imposing choices on users. Unlike traditional methods such as using debug packages or custom logging systems, LogTape operates on a "library-first design" where logging is transparent and only activated when configured. This eliminates the fragmentation problem of managing multiple logging systems across different libraries. With zero dependencies and support for both ESM and CommonJS, LogTape ensures minimal impact on users' projects, avoiding dependency conflicts and enabling tree shaking. Its universal runtime support and efficient performance make it suitable for various environments. By using a hierarchical category system, LogTape prevents namespace collisions, offering a seamless developer experience with TypeScript support and structured logging patterns. LogTape provides adapters for popular logging libraries like Winston and Pino, bridging the transition for users invested in other systems. Ultimately, LogTape offers a way to enhance library capabilities while respecting users' preferences and existing choices, making it a valuable consideration for library authors.

Read more →
9

XiNiHa shared the below article:

Announcing LogTape 1.0.0

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

LogTape 1.0.0 has been released, marking a significant milestone for this zero-dependency logging library designed for the modern JavaScript ecosystem. This release emphasizes API stability and introduces high-performance features such as non-blocking sinks for console, stream, and file logging, along with the `fromAsyncSink()` function for integrating asynchronous logging operations. New sink integrations include packages for AWS CloudWatch Logs and Windows Event Log, enhancing LogTape's versatility. The update also brings a visually appealing console logging experience with the `@logtape/pretty` package, and seamless integration with existing Winston or Pino setups through adapter packages. Key developer experience enhancements include programmatic access to log levels and improved browser compatibility. LogTape 1.0.0 streamlines logging infrastructure with a comprehensive package ecosystem, offering specialized packages for various logging needs. This release provides a stable and mature logging solution, making it easier to manage and optimize logging in JavaScript applications.

Read more →
11
4

Nginx의 njs에 QuickJS 엔진 추가되니 기능이나 문법 제약도 거의 없어서 출근해서 해볼 성능 테스트만 제대로 되면 좀 복잡한 로직 필요한 리버스 프록시는 이걸로만 짤거같음. JS모듈들 대충 번들로 만들고 import해서 다 쓸수 있어서...

6

언어 구현을 하는 데에 최고의 언어는 뭘까... 예전엔 OCaml이라고 생각했었고 요즘은 Scala가 최고라고 생각하고 있기는 한데, 더 나은 대안 언어는 없을까? 탈JVM이 하고 싶다 (그렇다고 Scala Native는 아닙니다 진짜...)

4
12
0
0
3

Zed는 아직 쓰지도 않는데도 요즘 보기드문 장인정신이 느껴지는 소프트웨어라 호감이 간다. 지금 쓰고있는 Windsurf는 VS Code 포크떠서 AI 채팅만 추가했는데 하루에 3번 터져서 에디터를 재시작해야한다(AI 채팅 패널이 터지는거라 VS Code가 아닌 Windsurf 문제로 보임). 5조 투자받은건 어따썼니??

5

With this latest PR, inference for `noFloatingPromises` is pushed to over 80% success rate in Vercel's repositories: github.com/biomejs/biome/pull/

While I targeted specific patterns used by their own `swr` library, all the fixes are generically applicable, meaning other code benefits too.

Do you want to use Biome's `noFloatingPromises`, but need support for some library that is important to you? Reach out to us and we can make it happen: biomejs.dev/enterprise/

1
4

With Biome v2 reaching ~75% accuracy for the `noFloatingPromises` rule, one might wonder, how?
* First of all keep in mind this is measured on a single (very large) repository. Yours might fare differently depending on libraries/patterns/etc..
* What you're seeing is a successful application of the 80/20 rule, which says that by doing 20% of the work, you can reach 80% of the results. So far we're only scratching the surface of , but for most applications, that's all we need.

1

My Vercel contract is almost coming to an end, but I'm extremely happy that we managed to get to about 75% success rate for `noFloatingPromises` in our v2 release: biomejs.dev/blog/biome-v2/

The success rate is even slightly higher already in the `next` branch, and I still have 2 weeks to go. And just to highlight: This is merely the start.

I'll be looking for new means of funding to pursue this work, and thankfully Biome donations are also making a significant difference: opencollective.com/biome

1
6

요즘 '이건 잘못된 코드지만 당분간 고칠일이 없기를 기도하자'고 하며 넘어간 코드들에서 나온 버그들을 계속 고치는 중이다.

과거의 나의 정확한 안목에 뿌듯해하며 동시에 피눈물을 흘리고 있다.

8
6

어제부터 Jujutsu라는 버전 관리 시스템을 써보고 있습니다. git의 branch는 연속적인 단일 작업을 표현하는 느낌이 강하게 드는데 사실 그저 어느 commit을 가리키는 포인터일 뿐이라는 걸 느끼게 해주네요. Jujutsu에서는 같은 커밋에서 다음 커밋을 여러 개 만들면 그게 브랜치이고, 여러 커밋을 parent로 하는 커밋을 하나 만들면 그게 머지이고, 수정이 다 끝나면 그냥 원하는 브랜치 이름의 포인터를 적절히 옮기면 됩니다. 부분 변경을 커밋 간에 자유롭게 옮길 수 있는 것까지 합치면 재미있는 사용 방법이 많이 있을 것 같습니다. 특히 megamerge workflow를 쓰면 git 쓰다가 생겼던 "지금 하는 작업을 끝내야 다음 변경사항을 작업"하는 강박이 해소될 것 같아 기대가 많이 됩니다.

12

XiNiHa shared the below article:

LogTape 0.12.0 Release Notes

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

LogTape, a zero-dependency logging library for JavaScript and TypeScript, has released version 0.12.0 with several enhancements. The update introduces a new `trace` log level for more granular debugging and improves file sink performance through configurable buffering. A significant addition is the `@logtape/syslog` package, enabling log message transmission to syslog servers using RFC 5424. The update also includes `Logger.warning()` as an alias for `Logger.warn()` for consistency. Furthermore, all LogTape packages now share unified versioning for better compatibility. The build infrastructure has been migrated from `dnt` to `tsdown`, enhancing compatibility with modern JavaScript toolchains and improving build times. This release optimizes logging capabilities and ensures smoother integration with various JavaScript runtimes.

Read more →
9

를 해볼까요.

  • @ranolpRanol☆P 와 동일인입니다...만 해당 계정은 근시일 내에 살릴 계획이 없습니다.
  • @ranolp 계정은 프로그래밍 언어론/해커스펍 사용기 위주 계정입니다.
  • 다시 말하자면 그 외 일상적인 내용은 트위터에서 이야기한다는 뜻입니다...
  • TypeScript와 얼추 호환되면서 제정신인 타입 추론 규칙을 가진 언어를 만들려고 타입 이론을 공부하고 있습니다.
    • 좀 많이 전에는 Bidirectional Typing (J. Dunfield, N. Krishnaswami)을 읽었었고,
    • 독일에 있는 튀빙겐 대학 내에서 연구하는 대수적 효과 언어 Effekt도 간단히 살펴보았었습니다.
    • 최근에는 힌들리-밀너-다마스 타입 추론 위에 얹은 부타입 확장을 살펴보고 있습니다.
      • 캠브릿지 대학 연구인 MLsub (S. Dolan and A. Mycroft)...
      • 을 단순화한 Simple-sub (L. Parreaux)을 시작으로 MLstruct, Ultimate Conditional Syntax 등 홍콩대 연구를 많이 보고 있습니다
      • MLscript가 정말 흥미로운 언어에요 ReScript but more Kotlin처럼 생겼음
  • 올해 들어서 An Infinitely Large Napkin으로 군론과 군의 작용, 위상수학과 대수 위상(호모토피만), 그리고 범주론을 배웠습니다.
  • 형식적 증명 보조기에도 관심이 많습니다.
    • Software Foundation을 통해 Coq (현 Rocq)를 약간 배웠습니다.
    • Lean 4도 약간 맛보기를 했습니다.
    • 의존 타입/마틴 뢰프 타입(MLTT)/호모토피 타입(HoTT) 등을 배워 간단한 증명 보조기도 만들어보고 싶네요.
      • 아마 An Infinitely Large Napkin 스터디가 끝나면 HoTT 스터디를 하지 않을까 싶네요.

15
0
0

이런 면에서 KDL이 아주 훌륭하다고 느꼈던 게 /- 주석이란 게 있다. AST 노드 하나를 주석 처리하는 거.

노드 하나를 주석 처리하는 슬래시 대시 주석의 사용 예시 화면
3
5

XiNiHa shared the below article:

Hackers' Pub의 게시글에 번역 힌트 주기

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

Hackers' Pub의 게시글 번역 기능에서 LLM의 오역 가능성을 줄이기 위해, Markdown 내 HTML 주석을 활용한 특별한 지침 제공 방법을 소개합니다. 게시글 상단에 `<!--`와 `-->` 사이에 LLM 번역가를 위한 지침을 작성하여 제목 지정, 특정 용어 사용 등의 구체적인 요청을 할 수 있습니다. 이는 LLM에게 맥락을 제공하여 번역 품질을 향상시키는 데 도움을 줍니다. 저자가 직접 번역 맥락을 설정함으로써 LLM 번역의 정확성을 높일 수 있다는 점에서 유용한 팁입니다.

Read more →
4

새로 오신 분들도 많이 계시니, 한 번 해 볼까요? 저부터 해보겠습니다.

  • Hackers' Pub을 만들고 운영하고 있습니다. (Hackers' Pub은 저희 집 홈 서버에서 돌아가고 있습니다… 😂)
  • 연합우주(fediverse)와 ActivityPub에 관심이 많고, 또 관련된 소프트웨어(@fedifyFedify: an ActivityPub server framework, @holloHollo :hollo:, @botkitBotKit by Fedify :botkit:, Hackers' Pub…)를 만듭니다.
  • 좋아하는 언어는 Haskell인데 자주 쓰는 언어는 TypeScript입니다. 예전에는 Python을 좋아하고 자주 썼습니다.
  • 함수형 프로그래밍을 좋아합니다만, 좋아하는 만큼 잘 다루는지는 잘 모르겠습니다.
  • 옛날에는 덕 타이핑 언어를 좋아했는데, 나이가 들고 협업을 많이 하게 되면서 정적 타이핑 언어를 선호하게 되었습니다. 그래도 여전히 덕 타이핑 언어가 제공하는 특별한 생산성이 있다고 생각합니다.
  • 자유 소프트웨어와 오픈 소스를 좋아합니다. GPL을 좋아하지만, 트랜스젠더 배제적인 행보를 보인 적 있는 자유 소프트웨어 재단이나 여러 성추행 전적이 있는 Richard Stallman은 좋아하지 않습니다.
  • 소프트웨어 문서화에도 관심이 많습니다. 문서화가 소프트웨어 개발의 중요한 부분이라고 생각합니다. 문서화 도구들에도 관심이 많습니다.
  • 원래는 백엔드 개발자였는데 바로 전 직장이 블록체인 회사여서 백엔드 개발에서 손을 놓은 지 좀 되니까 이제는 잘 모르게 됐습니다. 재활이 필요합니다.
  • 현재는 일 안 하고 쉬고 있습니다.
  • 30대 후반, 기혼, 자녀는 없습니다. 서울에서 살고 있습니다.

아무쪼록 잘 부탁드립니다.

17
0
0
6

XiNiHa shared the below article:

“조용한 연합우주” 문제를 해결하는 두 가지 접근법: 대화 백필링 메커니즘

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

이 글은 연합우주(fediverse)에서 발생하는 "조용한 연합우주" 문제, 즉 대화의 일부만 보이는 현상의 원인과 해결책을 탐구합니다. ActivityPub 프로토콜의 분산 특성으로 인해 대화가 여러 서버에 분산되어 저장되면서 발생하는 이 문제를 해결하기 위해, 답글 트리 크롤링과 컨텍스트 소유자 기반 방식이라는 두 가지 주요 접근법을 제시합니다. 답글 트리 크롤링은 모든 답글을 순차적으로 가져오는 방식이지만 네트워크 취약성과 작업량 증가의 단점이 있고, 컨텍스트 소유자 방식은 대화의 원 작성자가 대화 내용을 관리하는 중앙화된 접근법이지만 컨텍스트 소유자에 대한 의존성이 높다는 단점이 있습니다. 또한, 모더레이션 패러다임의 충돌과 상위 전파 누락 문제와 같은 논쟁점을 지적하며, 주기적 크롤링, 사용자 트리거, 멘션 기반 백필과 같은 추가적인 백필 메커니즘을 소개합니다. 마지막으로, FEP 수렴 논의와 구현체 간 협력 현황을 통해 향후 개발 방향으로 하이브리드 접근법의 표준화를 제시하며, 다중 전략 구현, 리소스 관리, 모니터링 및 로깅의 모범 사례 가이드라인을 제시합니다. 이 글은 연합우주가 더욱 풍부하고 연결된 소셜 네트워크로 발전하기 위한 노력과 사용자 경험 개선의 중요성을 강조합니다.

Read more →
7
0
0

평소에 함수형 언어 매니아들이 주장하는만큼 이펙트를 엄격하게 구분하는게 중요하다곤 생각안했는데, local first 앱을 만들다가 네트워크 요청을 포함한 IO와 그렇지 않은 IO를 구분해야하는 이유를 찾았다. 앱의 초기화 로직에 네트워크 요청이 숨어있으면 API 서버 장애시 앱이 아예 안켜지는 문제가 있다. 방금 이거랑 관련된 버그 찾느라 시간을 많이 썼다.

8

[페미위키 6월 운영팀 모집]
운영팀은 페미위키를 어떻게 키워낼까 고민하는 개인들의 모임이며 여성혐오자가 아니라면 추가 조건 없이 함께할 수 있습니다.
운영팀 연락에 사용할 구글 지메일로 admin@femiwiki.com으로 지원 동기를 적어 보내주세요. (제목 "페미위키 운영팀 지원")

만화 캐릭터 검색할 때 성희롱을 봐야 할까?
페미위키는 만화, 게임, 웹툰, 애니메이션 등 취미 정보를 다룰 때 혐오를 담지 않도록 주의합니다
2

안녕하세요, 페미위키 개발팀입니다. 개발팀 활성화를 위해 이리저리 둘러보다 해커스펍에 대해 알게 되었습니다. 여건이 되면 페미위키 개발에 대해서 얘기할 수 있는 기회를 만들어보려 합니다!

더불어 페미위키 개발팀에서 오픈소스 컨트리뷰터 & 개발팀을 모집합니다! 페미니스트시라면 정체성 불문, 거주국 불문하고 모시고 있습니다. 함께 페미니즘 정보집합체 만들어가요!

페미위키 오픈소스 컨트리뷰터 & 개발팀 모집1. 우대 사항:

페미위키 편집 경험이 한 번 이상 있으신 분
AWS 경험이 필요하신 분
사실상 표준이 아닌 기술/서비스에 거부감이 덜 하신 분 (예: Vue.js, Less.js, GitLab, Nomad, PHP)
기억 나는 리눅스 명령어가 세 개 이상인 분
ARM 서버 운영 경험이 있으신 분
JS를 TS로 변환하면 개운하신 분
GitHub Actions 사용 경험이 있으신 분
PHP 문법을 기억하시는 분
git rebase를 쳐본 적 있으신 분
오픈소스를 사랑하시는 분2. 업무 내용

신규 프로젝트
* 레벨 제도
* 프로필 페이지
* 게이미피케이션 / 도전과제
* HA 구성

상시 업무
* 서비스 모니터링
* 버그 수정
* 기술 지원
* 소프트웨어 업그레이드관심 있다면 망설임 없이 https://github.com/femiwiki 접속!
8
0
1

오늘 @xiniha 님 소환해서 배운 것:

  • SolidStart 기본적인 사용법
  • SolidStart 위에서 GraphQL 질의해서 결과 갖다 쓰는 법
  • GraphQL + Relay에서 커넥션에 추가 필드 끼워넣는 법
  • SolidStart에서 shadcn/ui…가 아니라 solid-ui 쓰는 법

그리고 배운 건 아니고 그냥 @xiniha 님이 다 해주신 것:

  • Lingui를 이용한 국제화 세팅
  • Deno를 쓰기 때문에 생기는 온갖 트러블들 해결

이제 이 새로운 스택으로 Hackers' Pub을 재구현하기만 하면 된다…! 다행히 도메인 모델은 분리되어 있어서, UI 위주로 재작성하면 될 것 같다.

4

We're migrating Hackers' Pub to a pretty unconventional tech stack, and I'm honestly excited about it!

Thanks to my friend @xiniha, we're diving into , , , , and . In a world dominated by Next.js and React, this feels refreshingly different. And yes, we're sticking with instead of Node.js too.

Some might call it contrarian, but I like to think of it as exploring what's possible beyond the mainstream. Sometimes the road less traveled leads to interesting places.

7

Hackers' Pub에 공유할 수 있는 초대 링크 기능을 추가했습니다. 설정 → 초대 페이지에서 초대 링크 생성이 가능하며, 초대 링크는 정원이나 유효 기간, 메시지를 정할 수 있게 되어 있습니다. 아무래도 DM으로 직접 초대 요청을 달라고 하면 쑥스러움이 많은 분들은 요청을 안 하시는 경우가 많은 것 같아서 만들게 되었습니다. 참고로, 초대 링크를 통해 가입한 사용자는 초대 링크를 생성한 사람과 자동으로 맞팔하게 됩니다.

초대 링크는 생성하는 화면초대 링크 페이지
9

We're excited to announce Hollo 0.6.0, a significant release that brings enhanced security, better user experience, and important infrastructure improvements to your single-user microblogging setup.

Enhanced OAuth Security with Modern Standards

This release prioritizes security with comprehensive OAuth 2.0 improvements that align with current best practices. We've implemented several critical RFC standards that significantly strengthen the authorization process:

OAuth 2.0 Authorization Code Flow with Access Grants — We've overhauled the OAuth implementation to properly separate authorization codes from access token issuance, providing better security isolation throughout the authentication process.

RFC 7636 PKCE (Proof Key for Code Exchange) Support — Hollo now supports PKCE with the S256 code challenge method, which prevents authorization code interception attacks. This is particularly important for public clients and follows the latest OAuth 2.0 security recommendations outlined in RFC 9700 (OAuth 2.0 Security Current Best Practices).

RFC 8414 OAuth Authorization Server Metadata — We've added support for OAuth Authorization Server metadata endpoints, allowing clients to automatically discover Hollo's OAuth capabilities and configuration. This makes integration smoother and helps clients adapt to your server's specific OAuth setup.

Enhanced Profile Scope Support — The new /oauth/userinfo endpoint and expanded profile scope support provide applications with standardized ways to access user profile information, improving compatibility with a wider range of OAuth-compliant applications.

These OAuth improvements not only make Hollo more secure but also position it at the forefront of federated social media security standards. We encourage other fediverse projects to adopt these same standards to ensure the entire ecosystem benefits from these security enhancements.

Special thanks to Emelia Smith (@thisismissemEmelia 👸🏻) for spearheading these critical OAuth security improvements and ensuring Hollo stays ahead of the curve on authentication best practices.

Revamped Media Storage Configuration

We've significantly improved how Hollo handles media storage configuration, making it more flexible and future-ready:

New Environment Variables — The storage system now uses STORAGE_URL_BASE (replacing the deprecated ASSET_URL_BASE) and FS_STORAGE_PATH for local filesystem storage (replacing FS_ASSET_PATH). These changes provide clearer naming and better organization.

Improved Security Requirements — The SECRET_KEY environment variable now requires a minimum of 44 characters, ensuring sufficient entropy for cryptographic operations. You'll need to update your configuration if your current secret key is shorter.

Network Binding Control — The new BIND environment variable lets you specify exactly which network interface Hollo should listen on, giving you more control over your server's network configuration.

Thanks to Emelia Smith (@thisismissemEmelia 👸🏻) for leading these infrastructure improvements.

Better User Experience

Customizable Profile Themes — You can now personalize your profile page with different theme colors. Choose from the full range of Pico CSS color options to make your profile uniquely yours.

Enhanced Administration Dashboard — The dashboard now displays the current Hollo version at the bottom, making it easier to track which version you're running. You can also sign out directly from the dashboard for better session management.

Improved Post Presentation — Shared posts on profile pages now have better visual separation from original content, and the sharing timestamp is clearly displayed. This makes it much easier to distinguish between your original thoughts and content you've shared from others.

Better Image Accessibility — Alt text for images is now displayed within expandable details sections, improving accessibility while keeping the interface clean.

Syntax Highlighting — Code blocks in Markdown posts now feature beautiful syntax highlighting powered by Shiki, supporting a comprehensive range of programming languages. This makes technical discussions much more readable.

Enhanced Character Limit — The maximum post length has been increased from 4,096 to 10,000 characters, giving you more space to express your thoughts in detail.

Thanks to RangHo Lee (@rangho_220우주스타 아이도루 랭호 🌠) for the version display feature and Okuto Oyama (@yamanoku) for the image accessibility improvements.

Privacy and Content Improvements

EXIF Metadata Removal — Hollo now automatically strips EXIF metadata from uploaded images before storing them, protecting your privacy by removing potentially sensitive location and device information.

Public API Endpoints — Following Mastodon's approach, certain API endpoints are now publicly accessible without authentication, making Hollo more compatible with various client applications and improving the overall federation experience.

Thanks to NTSK (@ntekNTSK) for the privacy-focused EXIF metadata stripping implementation.

Technical Foundation

Node.js 24+ Requirement — This release requires Node.js 24.0.0 or later. We've also upgraded to Fedify 1.5.3 and @fedify/postgres 0.3.0 for improved performance and compatibility.

Test Coverage & Quality Assurance — The codebase now includes comprehensive testing infrastructure and test coverage. We're committed to expanding this coverage and integrating testing more deeply into our development and release workflows. This also provides an excellent opportunity for first-time contributors to get involved by writing tests.

Cross-Origin Request Support — OAuth and well-known endpoints now properly support cross-origin requests, aligning with Mastodon's behavior and improving client compatibility.

Cleaner Token Endpoint — The scope parameter is now properly optional for the OAuth token endpoint, clarifying that it only affects client credentials flows (not authorization code flows, where it was already ignored).

Looking Forward

This release represents a major step forward in making Hollo not just a great single-user microblogging platform, but also a leader in federated social media security standards. The OAuth improvements we've implemented should serve as a model for other fediverse projects.

We're particularly excited about the OAuth security enhancements, which demonstrate our commitment to staying ahead of security best practices. As the federated web continues to evolve, we believe these standards will become increasingly important for maintaining user trust and ensuring secure interactions across the fediverse.

Upgrading

Upgrading to Hollo 0.6.0 is straightforward, but there are a few important considerations:

Railway Deployment

  1. Go to your Railway dashboard
  2. Select your Hollo project and service
  3. In the deployments tab, click the three-dot menu and select Redeploy

Docker Deployment

  1. Pull the latest image: docker pull ghcr.io/fedify-dev/hollo:latest
  2. Stop your current container
  3. Start with the new image using your existing configuration

Manual Installation

  1. Pull the latest code: git pull
  2. Install dependencies: pnpm install
  3. Restart the service: pnpm run prod

Important Upgrade Notes

Environment Variables: Update your configuration if you're using deprecated variables:

  • Replace ASSET_URL_BASE with STORAGE_URL_BASE
  • Replace FS_ASSET_PATH with FS_STORAGE_PATH
  • Ensure your SECRET_KEY is at least 44 characters long

Session Reset: Due to the OAuth security improvements, existing user sessions may be invalidated during the upgrade. You'll likely need to log in again through your client apps (like Phanpy, Moshidon, etc.) after upgrading. This is a one-time inconvenience that ensures you benefit from the enhanced security features.

Thank you to everyone who contributed to this release, and to the community for your continued support. Hollo 0.6.0 brings significant improvements to security, usability, and the overall experience of running your own corner of the fediverse.

1
2
1

Exciting news for the project! We're thrilled to announce that Emelia Smith (@thisismissemEmelia 👸🏻) has joined as a co-maintainer alongside Hong Minhee (@hongminhee洪 民憙 (Hong Minhee)).

Emelia brings extensive experience in the ecosystem, having been a long-time contributor to Mastodon and a leading expert in trust & safety tooling for decentralized social networks. She's dedicated years to improving moderation systems and security across platforms.

Her recent contributions to Hollo have been substantial—implementing the reporting/flagging system and making significant improvements to OAuth and security features. These valuable contributions naturally led to her joining as a co-maintainer.

This collaboration marks an important milestone for Hollo as we continue building better single-user microblogging software for the fediverse. Welcome aboard, Emelia! 🚀

8
3
0

Hackers' Pub을 사용하면서 연합우주(fediverse) 뿐만 아니라 Bluesky 사람들과도 교류하고 싶으신 분들은 Bridgy Fed라는 서비스를 사용해 보시면 좋을 것 같습니다. Hackers' Pub 계정 생성 후 2주가 지난 분들만 사용 가능하긴 한데요.[1]

@bsky.brid.gyBridgy Fed for Bluesky 계정을 팔로하시면 Bluesky 쪽에 일종의 미러링 계정이 생성되게 됩니다. 성공적으로 Bluesky 미러가 생기면 @bsky.brid.gyBridgy Fed for Bluesky 계정이 맞팔을 해 올 겁니다.

예를 들어 제 @hongminhee洪 民憙 (Hong Minhee) 계정으로 @bsky.brid.gyBridgy Fed for Bluesky 계정을 팔로하면, Bluesky 쪽에 @hongminhee.hackers.pub.ap.brid.gy라는 계정이 생기는 식입니다. 그러면 Bluesky 쪽 사람들이 해당 계정을 멘션하거나, 댓글을 달거나, 인용을 하면 Hackers' Pub에서 그게 보이게 됩니다. 서로 팔로도 할 수 있고요.


  1. Bridgy Fed 쪽의 스팸 대책 정책이라고 합니다. ↩︎

3
3

1.6 is approaching with three major enhancements: RFC 9421 HTTP Message Signatures support with double-knocking for seamless backward compatibility, a new builder pattern for better code organization in large applications, and native support for serverless deployments. These additions strengthen Fedify's standards compliance while expanding deployment flexibility across different environments. Stay tuned for the official release! 🚀

2
0
0
2

대학생때 친구(컴알못)가 노트북 견적 짜달라고 한적이 있는데, 성능 상관없고 최대한 싸게만 해달라고 했다. 그래서 운영체제 미포함 기기에 우분투 깔아서 30만원으로 맞춰줬다. 우분투를 영업하려는 의도는 전혀 없었고 싸게 해달라는 요구를 최대한 맞춘 결과였다. 걔가 그때 형편이 안 좋아서 한푼이라도 아끼는게 중요했고, 나는 나름 목적을 달성했다는 것에 뿌듯해했다. 리브레 오피스 깔아주면서 한글, 엑셀 대신에 이거 쓰면 된다고 설명했던 기억이 난다.

그리고 이 일을 까맣게 잊고 살다가 1년후 쯤에 그 친구를 다시 만났는데, 보자마자 반응이

나 너무 많은 일이 있었어
12
1
0

Node.js 개발자라면 꼭 읽어봤으면 하는 아티클 2선

일반적인 Node.js 애플리케이션을 개발할 때 프레임워크와 무관하게 함께 일하는 동료들에게 필수적으로 추천하고 싶은 아티클이 있다.

빠르고 유지보수 가능한 데이터베이스 패턴들

https://sophiebits.com/2020/01/01/fast-maintainable-db-patterns

특정 프레임워크나 ORM에 의존하지 않고도 N+1 Query, 캐싱 같은 일반적인 문제를 해결하며 유지보수 가능한 형태로 코딩하는 방법을 제시한다. DataLoader로 모든 문제가 해결된다고 생각할 수도 있지만, 근본적인 문제 해결 과정을 직접 고민해보는 것만으로도 엔지니어링 역량 향상에 큰 도움이 된다.

Next.js에서 보안을 고려하는 방법

https://nextjs.org/blog/security-nextjs-server-components-actions

React 관련 내용이 포함되어 있지만, 그 부분을 제외하고 읽어도 충분히 가치가 있다. 데이터를 클라이언트에 전달할 때 마스킹하거나 접근 권한을 검사하는 방법을 구체적으로 알려준다. 핵심은 별도의 플러그인이나 외부 시스템 없이도 간단하면서 효과적인 권한 검사 시스템을 구축할 수 있다는 점이다.

마무리

위 아티클들을 추천하는 이유는 간단하다. 특정 프레임워크에 결속되지 않으면서도 독립적이고 지역적으로 백엔드 애플리케이션에서 볼 수 있는 일반적인 문제를 해결할 수 있는 방법들을 제시하기 때문이다. 이런 접근법은 전체 코드베이스의 안전성과 성능을 크게 향상시키며, 결국 더 많은 개발자들이 행복하게 일할 수 있는 환경을 만들어준다고 생각한다.

대부분 프레임워크에 의존적이거나 플러그인에 의존해 전체 코드베이스를 올바르게 수정하기 어려워지는 모습을 여러번 보았다. 개인적으로 엔지니어링 문화에서 크게 해결하고 싶은 부분이다. JavaScript 뿐만 아니라 가능하면 언어나 런타임에 있는 근원적 요소만을 통해 문제를 해결하는게 건강하게 문제를 해결할 수 있는 방법이라고 본다.

6