Jaeyeol Lee

@kodingwarrior@hackers.pub · 232 following · 156 followers

Neovim Super villain. 풀스택 엔지니어 내지는 프로덕트 엔지니어라고 스스로를 소개하지만 사실상 잡부를 담당하는 사람. CLI 도구를 만드는 것에 관심이 많습니다.

Hackers' Pub에서는 자발적으로 바이럴을 담당하고 있는 사람. Hackers' Pub의 무궁무진한 발전 가능성을 믿습니다.

그 외에도 개발자 커뮤니티 생태계에 다양한 시도들을 합니다. 지금은 https://vim.kr / https://fedidev.kr 디스코드 운영 중

Github
@malkoG
Blog
kodingwarrior.github.io
mastodon
@kodingwarrior@silicon.moe
2

해커스펍이 개발 초기에 어떤 모습이었는지 쭉 훑어보는 중.... MVP를 뽑을 수 있는 레벨로 가려면 대충 어느 쯤이어야하는지 감잡을 수 있을때까지 이분탐색하는 이 여정이 언제쯤에 끝날까....

2

패디버스 앱으로서 해커스펍이 누릴 수 있는 기능 중 하나가 Remote Follow인데, 이건 다른 페디버스 앱에서도 마찬가지로 이런 기능이라는게 있다는걸 알지 못하는 경우가 많다. 새로 진입하는 분들 타겟으로 카드뉴스 같은거라도 만들어야 하나...... 라는 생각이 문득 들었다.

좋은 기능이 있어도 설명이 필요하다는 것 자체가 성공한 UX는 아닌 것 같은데, 이게 구조 상 어쩔 수 없이 생기는 문제인건가 싶기도 하고

4

개밥먹기주도개발이라 의욕이 떨어질 일은 없겠지만 벌린 일이 많다... 동시에 진행하는게 너무 많으면 적신호인데...

프로젝트

  1. 파이썬 개발자를 위한 뉴스레터 관리 서비스 (근데 AI 에이전트가 들어간)
  2. Flutter 기반의 마스토돈 클라이언트
  3. Fedify를 응용한 무언가 (아직 시작은 안함)

그리고.... 주최해야하거나 혹은 주최해야할 것 같은 모임

  1. vim.kr 컨퍼런스 (아무리 늦어도 7-8월)
  2. Hackers' Pub 오프모임
  3. FediDev.kr 스프린트 모임
  4. foss 관련 컨퍼런스
6

일단 django 기본 개발환경 세팅. 시작이 반이랬다.

  1. poetry 대신 uv로 사용하는 툴을 변경했고,
  2. Docker 기반의 배포환경 세팅하고
  3. aider 기반으로 바이브코딩을 이어갈 수 있는 환경을 구축했음.

프로덕션 환경은...... 같이 작업하는 분이 준비되시면 작업하는걸로 ㅋㅅㅋ

이제 앞으로 해야하는 작업은 URL shortener를 먼저 구현하는 방향으로 갈지. (가장 빨리 끝남) 혹은 본격적으로 LLM 기반의 아티클 요약을 구현할지 결정하면 된다. (좀 늘어질 수 있음)

langchain 기반으로 짜면 될 것 같은데, 학습시간이 좀 있을 것으로 예상.

https://github.com/dahlia/yoyak 프롬프트는 여기를 참고하고 스슥하고 짜면 될 듯.

2
0
3
2

이걸 보니까 느끼는데, 사실 repomix 비슷한걸 @joonnotnotJoon 님이랑 같이 만들려고 시도는 했었던게 갑자기 기억난다.... 물론 내가 만들려고 했던건 체크리스트를 자동 생성해주는 CLI를 만드는 것이긴 했지만, 궁극적으로는 LLM에 친화적인 프롬프트를 만드는것도 로드맵이었음.

tree-sitter의 tag query라는게 있다는걸 아예 몰랐어서 빙빙 돌아가다가 결국 흐지부지 되어버린 비운의 프로젝트...

2

왜 이런 소리를 하고 있냐면.... 귀찮아서 손 댈 엄두도 안나고 미루기만 했을 작업을 ChatGPT랑 티키타카해서 2시간 만에 끝냄..... 평소였으면 컨텍스트 스위칭 시간 포함해서 5시간 이상은 걸렸을텐데..

음. 그렇지. 음. 이건 아니야. 음. 여기서 이렇게 하는건 어떨까?

하고 티키타카하면 코드가 짠!



RE: https://hackers.pub/@kodingwarrior/019623b8-54a2-7d15-84c6-90cd443fae96

4
1
2

최근에 추천사를 썼던 책이 있는데요. 이 교재를 활용해서 LLM AI 에이전트를 개발해볼까합니다. 제가 자원봉사(?)를 하고 있는 곳에서 컨텐츠 팀을 담당하고 있는데, 거기서 하는 일 중 하나가 뉴스레터 발행입니다.

TLDR 뉴스레터처럼 링크들을 오마카세처럼 모아서 양질의 콘텐츠를 제공하는게 목표인데, 그런 데이터를 모으기 위해서 최대한 아티클들을 모아서 요약해주는 봇을 만들어야겠다는 판단이 들었습니다. 언어 LLM 관련된 리소스도 많은 파이썬을 쓰게 될 것 같고, 서버 프레임워크는 컨텐츠 관리(어드민페이지)의 수월함을 위해서 Django를 쓰게 될 것 같습니다.

https://product.kyobobook.co.kr/detail/S000216210672



RE: https://hackerspub-ask-bot.deno.dev/message/01962280-fc29-748e-9ba8-fad032795e0d

5
1
0

이 글을 작성한 이후로 바로 Ask 봇을 만들었는데, 생각보다 오래 걸리지 않았다.

  1. @fedify/botkit 리포지토리를 RepoMix에다가 넘겨서 프롬프트로 변환한다.
  2. 1에서 넘겨받은 프롬프트를 ChatGPT(o3-mini-high)한테 입력 넣어서 주기적으로 글 작성하는 봇 만들어달라고 한다.
  3. Cron 돌리는 스크립트 넣어달라고 하는등 티키타카를 한다.
  4. 부족한 부분은 BotKit 문서 보면서 채운다.

이렇게 하니까 1시간 컷 찍음



RE: https://hackers.pub/@kodingwarrior/0196222c-4b5a-783e-9dd8-8dc5f3e90202

1
0
0
2
2
1
3
3
1
3
2
0
0
0
0

"오케이, 코워지피티. 팔로할만한 페디버스 계정 찾아줘" 하면 냅다찾아주는 자원봉사를 해볼까 싶다가도 판을 너무 많이 벌려서 해볼자신이 없다...... 근데, 인스턴스 찾아보면 네임드 최소 5명은 있긴 함..

0
0

Why the Latest JavaScript Frameworks Are a Waste of Time

https://dev.to/holasoymalva/why-the-latest-javascript-frameworks-are-a-waste-of-time-52pc

The next time a new JS framework drops, I won’t be rushing to rewrite my projects. Instead, I’ll be focused on shipping products, writing solid code, and improving my problem-solving skills.
0
0
0

https://www.youtube.com/watch?v=30YWsGDr8mA

Julia Evans의 Make Hard Things Easy 명강이니 추천합니다.

내용을 요약하자면....

복잡하거나 난해하거나 어려운 것들을 단순한 것으로 만들기 위해서

  1. 난해한 것들을 단순하게 만들어주는 훌륭한 도구를 사용하거나
  2. 찾는데서 삽질하는 빈도를 줄이기위해 좋은 레퍼런스를 확보하거나
  3. 시간순으로 설명하거나
  4. 가려져있는 것들을 가시화할 것

어떤 것에 대해 질문을 올리면 Read The Fucking Manual 라는 질타를 받거나, 복잡하거나 어렵지만 다들 접하는 이슈이기 때문에 당연히 알아야 하는 것처럼 느껴지지만 그것이 자신만의 문제는 아니라고 결론냄.

복잡하고 어려운 코드들은 이유가 있으며, 그 배경에는 온갖 예외처리라던가 다양한 요구사항을 충족하다보니 생겨난 방대한 코드라던가 블랙박스 그 자체인 시스템들이 있기 때문에 잘 모르는 것도 이상한 것이 아니라고 강조함.

0

CLI 도구를 조합해서 커맨드 작성할때, (일회성이라면 모르겠지만) 자주 사용하는 스크립트라면 짧은 옵션보다 긴 옵션을 사용하는 것이 좋습니다. 풀 네임으로 커맨드라인 명령어를 작성하는 것이 어떻게 보면 문서화의 역할도 하기 때문입니다. 다른 프로그램에서 시스템 콜을 호출해서 사용하는 유즈케이스라면 더더욱 가독성을 높이는 효과가 있습니다.

어떤 CLI 도구는 man 커맨드로 문서를 봤을때 양이 어마어마하고 어렵게 느껴질 수 있습니다. 하지만, 위에서 언급한 것처럼 full name으로 작성한 스니펫들을 모아놓으면 그렇게 어렵지도 않고 각 도구의 역할을 명확하게 이해할 수 있고, 결과적으로는 장기적인 기억으로 남을 수 있습니다. git, curl, aws-cli, jq, gh 어떤 CLI 도구이던간에 모든 옵션을 하나하나 기억하려고 할 필요도 없습니다. 필요하면 그때그때 full name으로 명시된 옵션으로 스크립트를 짜놓고 모아두면 됩니다.

https://matklad.github.io/2025/03/21/use-long-options-in-scripts.html

0

보통은 Ruby 코드를 작성할때 irb 같은 대화형 인터페이스를 사용하는 것이 일반적이지만, Bash 스크립트와 섞어서 사용할때 one-liner 스크립트를 작성하면 더욱 빛을 발휘합니다. 여기서 one-liner 스크립트란 한줄짜리로 실행하는 스크립트라고 이해하면 됩니다. ruby one-liner 스크립트로 작성할때는 다음과 같이 시작합니다.

$ ruby -e "<expression>"

여기서 -e 옵션은 one-liner 스크립트의 필수요소인데, 파라미터로 넘겨준 한줄짜리 Ruby 코드를 evaluation해주는 역할을 합니다. 여러분이 **파이프 연산자**에 대한 개념을 이해하고 있다면, 이런 트릭도 사용할 수 있습니다.

$ echo "5" | ruby -e "gets.to_i.times |t| \{ puts 'hello world' \}"
# =>
# hello world
# hello world
# hello world
# hello world
# hello world

표준라이브러리를 사용하고 싶을때는 -r 옵션을 사용할 수도 있습니다. 이 옵션은 ruby에서 require를 의미하는데, 식을 평가하기전에 require문을 미리 선언하고 들어가는 것이라 이해하면 됩니다.

예를 들면, 이런 것도 가능합니다 .

$ echo "9" | ruby -rmath -e "puts Math.sqrt(gets.to_i)"
# => 3.0

위의 스크립트는 아래와 동일합니다.

$ echo "9" | ruby -e "require 'math'; puts Math.sqrt(gets.to_i)"
# => 3.0

이런 원리를 이용하면, JSON/XML/CSV/YAML 등의 포맷으로 출력되는 데이터를 어렵지 않게 처리할 수 있습니다. one-liner 스크립트를 작성하는 방법에 대해 자세히 알아가고 싶다면, https://learnbyexample.github.io/learn_ruby_oneliners/one-liner-introduction.html 여기를 참고해주시면 좋을 것 같습니다.

이에 관해서, 25분-30분 정도 분량의 글을 정리해서 올릴 것 같은데 커밍쑨.....

0

https://newsletter.posthog.com/p/50-things-weve-learned-about-building

PostHog가 성공적인 제품을 만들면서 깨달은 50가지 교훈 (뉴스레터에서 지금까지 발행해놓은 것들 오마카세처럼 모아놓음)

그 중에서 마음에 드는 것들을 몇개 뽑아보자면...

  1. 신뢰는 투명성에서 온다. Build in Public 같은 것이 도움이 될 수 있음
  2. 시장에 내놓지 않으면 검증 조차 할 수 없음. 일단 시장에 내놓고 반응을 살펴볼 것
  3. 개밥먹기를 통해서 고객에게 전달되기 전에 문제점을 빠르게 인식하고 개선할 수 있는 흐름을 만들 것
0
0

프론트엔드 개발자분들 위주로 페디버스로 영입을 많이 해보고 싶다. 포트폴리오로 개발할만한 것이 지천에 널려있는데...!!

  • 인스타그램 클론코딩 : PixelFed 클라이언트 개발에 적용하기
  • 트위터 클론코딩 : 마스토돈 클라이언트 개발할때 적용하기
  • 나만의 블로그 만들기 : 이건.... 해커스펍이 그 역할을 하겠지...?
0
0

딱 필요한 커밋 로그만 diff 떠서 슥 훑어보기

file = ARGV[0] # 파일을 파라미터로 넘겨줄 수 있지만, 디폴트로는 리포지토리에 대한 log를 나열하게 됨

git_logs = `git log --oneline #{file} | gum choose --limit 100` # 100개 정도만 조회해서 다중 선택

# See https://abhij.it/ruby-difference-between-system-exec-and-backticks/
git_logs.each_line do |line|
  commit_hash, *_ = line.split
  system("git show #{commit_hash}") # 선택한 커밋 해시에서 어떤 변경사항이 있었는지 조회
  puts("=====")
  puts("Press ENTER key to CONTINUE")
  puts("=====")
  gets
end

checklist = []
git_logs.each_line do |line|
  checklist << "- [ ] #{line}" # 지금까지 조회한 커밋 로그들을 파악완료했는지 여부 파악을 위해 체크리스트 생성
end

puts checklist.join
0
0

Vue.js로 쫌쫌따리 만들던 PixelFed 클라이언트 프로젝트가 있었는데, 차별점으로서 나름 내 개성을 살린 필터가 내장된 무언가를 만들려고 했었음. 근데..... 필터를 정작 만들지도 않았고, 지금 나와있는 픽셀페드 모바일 앱은 이미 내장이 되어있는 모양이고 하하하

0
0
0
0

VSCode 확장 중에 Vim 키맵을 지원하는 플러그인 vscode-vim을 지나가다 다들 보셨을 겁나다.

Vim 키맵을 지원한다는 것 만으로도 색다른(그리고 좀 더 생산성에 유의미한 변화를 주는) 개발경험을 누릴 수 있지만, VSCode에서 지원하는 기능(랭귀지서버 기능 포함)을 내가 원하는대로 키맵에 매핑할 수 있고 마우스를 거의 쓰지 않고도 오로지 개발에만 몰입이 가능하게 됩니다. Vim의 장점, VSCode의 장점 모두 누릴 수 있게 됩니다.

오늘 소개하는 영상은, vscode-vim을 어떻게 유용하게 사용할 수 있는지 소개하고 있습니다. 국내에 있는 자료 중에 이만큼 본격적으로 잘 소개해주는 자료는 없을겁니다 👀👀

https://youtu.be/oOLoE4pJQf4?si=R2zLyi02oamLnFWG

VSCode를 기반으로 하는 Cursor, Windsurf 등의 에디터에도 비슷하게 적용할 수 있으니 한번 참고해보면 좋을거에요!

0
0