Profile img

Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub! My main account is at @hongminhee洪 民憙 (Hong Minhee).

Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다. 제 메인 계정은: @hongminhee洪 民憙 (Hong Minhee).

FedifyHolloBotKit、そしてこのサイト、Hackers' Pubを作っています。私のメインアカウントは「@hongminhee洪 民憙 (Hong Minhee)」に。

Website
hongminhee.org
GitHub
@dahlia
Hollo
@hongminhee@hollo.social
DEV
@hongminhee
velog
@hongminhee
Qiita
@hongminhee
Zenn
@hongminhee
Matrix
@hongminhee:matrix.org
X
@hongminhee
9
5
1

@hongminhee洪 民憙 (Hong Minhee) 근데 저는 어떤 언어든 디버깅용 로깅을 그냥 프리미티브로 제공하는게 맞다고 생각해요. stdout에다가 print하는 거랑 별개로 개발용으로요. 가령 console.log가 NodeJS 에선 그냥 print인데, 브라우저 개발자 도구에선 go to call site가 되는 제가 원하는 형태입니다.

0
1
6
4
4

또 모나드 설명 글 읽고 있음
그치만 주제 하나로 수많은 사람들이 각자의 해석에 따라 각자의 방식대로 글을 쓴다는 게 너무 재밌지 않음?
https://blog.merovius.de/posts/2018-01-08-monads-are-just-monoids/

4
2

작년에 어떤 커뮤니티에 계엄 소식을 전했는데 “여기서 정치적인 발언은 하지 말아주세요.” 라는 말을 들었다.

5

커뮤니티에서 정치적인 주제를 금지하면 결국 관리자가 보기에만 정치적이지 않은, 자기 입맛에 맞는 정치적인 글만 남더라구요

3
0
0
3

そもそもapkit.serverはもともと使ってたMiddlewareの形式じゃなくてそれ自体をASGIフレームワークとして使う形なので前とは違ってFedifyの統合と全く違う方法になってる (元々存在した課題点を克服するためにこういう形になった)

1

apkitのActivityPubServerは完全にFastAPIとStarletteのAPIに依存してるからあんまり気にしてなかったな

というかコードの理解度的に (Starlette/FastAPI以外の)統合をかける余裕があるか怪しいからしばらくは標準の統合以外は自分では出さないかも (裏側のコードに関してはStarletteとFastAPIだけならある程度わかったつもりでいる)

1
2
1
1
1

참고로 Hackers' Pub의 행동 강령에서는 굳이 정치적인 주제를 금지하지 않고 있습니다. 정치적인 것과 그렇지 않은 것의 경계가 흐릿한 것도 있지만, 그렇게 했을 경우 기득권에 편향되기 쉽다는 점, 그리고 필요하다면 정치에 대해 이야기할 수 있어야 하기 때문입니다. 많은 커뮤니티에서 정치적 대화가 필요할 때 조차 정치적 주제를 기계적으로 금지함으로 인해 자정 능력을 잃는 것을 봐 왔습니다.

9
2
4
4

GHCup 오랜만에 다시 설치하는데 못보던 게 생겼다.

GHCup provides different binary distribution "channels". These are collections of tools
and may differ in purpose and philosophy. First, we select the base channel.

[S] Skip  [D] Default (GHCup maintained)  [V] Vanilla (Upstream maintained)  [?] Help (default is "Skip").
2
4
1

GHCup 오랜만에 다시 설치하는데 못보던 게 생겼다.

GHCup provides different binary distribution "channels". These are collections of tools
and may differ in purpose and philosophy. First, we select the base channel.

[S] Skip  [D] Default (GHCup maintained)  [V] Vanilla (Upstream maintained)  [?] Help (default is "Skip").
4

회사에 Admin페이지들이 RoR로 작성되어있었는데,

1. 개발환경 세팅이 오래걸리고,
2. RoR은 경험이 거의 없고 Active Record에 대한 지식이 없는데
3. 원하는 기능은 어렵지 않은 간단한 기능 추가들

인 상황이여서, 바이브 코딩을 첨으로 해봤다.

JS나 Python으로된 복잡한 프로덕션 프로젝트에는 써볼 엄두가 안났는데, 내부용 간단한 관리툴에 기능추가는 정말 안성 맞춤인 것 같다.
그리고 다른 언어들에 비해 RoR은 더욱 잘 맞는것 같기도.

4

이제 Zed에서 Claude Code를 베타로 사용 가능
------------------------------
-
Claude CodeZed 의 통합이 공개 베타로 출시
- 새로운 *Agent Client Protocol (ACP)* 도입을 통해 다양한 에이전트와의 연결 확장 가능성 실현
- 개발자는
Zed 내에서 Claude Code를 실시간, 다중 파일, 커스텀 워크플로우와 함께 활용 가능함
- *Claude Code용 ACP 어댑터* 가 오픈소스로 공…
------------------------------
https://news.hada.io/topic?id=22887&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

2
3

방금 친구랑 모의면접을 봤는데(내가 면접관), 면접으로 알아낼 수있는게 딱히 있는지에 회의가 생겨버렸다. 아 물론, 내가 초보 면접관이라 면접스킬이 떨어지긴 한다만, 친구 얘기론(면접관 경험이 더 많음) 그래도 무난의 범위엔 든다고 한다. 이력서 기반으로 이것저것 물었는데, 만약에 이력서가 구라로 점철되있으면 그걸 걸러낼순 있었을 것이다. 근데 친구의 이력서는 당연히 그렇지 않았으니, 그냥 이력서가 구라가 아니란 사실 정도만;; 알아낼수 있었다. 이 이상 뭔가 더 꿰뚫어 보는게 가능할까... 하겠지? 그럼 어떻게 하는걸까.

방금 친구랑 모의면접을 봤는데(내가 면접관), 면접으로 알아낼 수있는게 딱히 있는지에 회의가 생겨버렸다. 아 물론, 내가 초보 면접관이라 면접스킬이 떨어지긴 한다만, 친구 얘기론(면접관 경험이 더 많음) 그래도 무난의 범위엔 든다고 한다. 이력서 기반으로 이것저것 물었는데, 만약에 이력서가 구라로 점철되있으면 그걸 걸러낼순 있었을 것이다. 근데 친구의 이력서는 당연히 그렇지 않았으니, 그냥 이력서가 구라가 아니란 사실 정도만;; 알아낼수 있었다. 이 이상 뭔가 더 꿰뚫어 보는게 가능할까... 하겠지? 그럼 어떻게 하는걸까.

4
2

2025-09-03 오늘의 작업한 내용 메모

https://github.com/cosmoslide/cosmoslide/pull/13

  • 이전 버전까지는 Cosmoslide 의 모든 계정은 public이고 팔로우 버튼을 누르면 바로 팔로우가 되는 로직으로 구현이 되어 있었음.
    • 즉, Follow 액티비티를 받으면 액티비티를 보낸 액터의 inbox에다가 바로 Accept(Follow) 액티비티를 보내는 구성
  • 이번에 작업한 내용은 각각의 계정을 private으로 변환할 수 있고, private 계정에 팔로우 버튼을 눌렀을때 바로 팔로우가 되는게 아니라 팔로우 요청으로 처리되도록 하는 작업이었음
    • 즉, Follow 액티비티를 받으면, manuallyAcceptsFollowers 옵션이 false인 경우에만 Accept(Follow) 액티비티를 보냄
  • 팔로우 요청 관리하는 화면 바이브코딩으로 적당히 빠르게 만들고..... 팔로우 요청을 수락하거나, 팔로우 요청을 거절하는 액션 자체는 서버 측 비즈니스 로직에서 처리한다기 보다는 가능하면 Federation에서 처리하도록 했음.
    • 즉, 팔로우 요청 수락버튼을 누르면 Accept(Follow) 액티비티가 전송되고, 팔로우 요청 거절 버튼을 누르면 Reject(Follow) 액티비티가 전송되는 방식

로컬 환경에 있는 서로 다른 두 액터끼리는 잘 되는걸 확인했는데, 서로 다른 서버의 액터끼리 잘 되는지는 좀 더 테스트가 필요함.

이번 주말까지는 게시글 작성하고 원격 서버 타임라인에 노출되는 것까지 어떻게 되긴 할 듯.

2

오늘은 다른 파트에서 나온 이상 현상을 보다가 흔한 실수 중 하나인 memcpy(dest, src, strlen(src))를 발견하고 공유했다. 동적 할당 방지를 위해 std::stringstd::format을 못 쓰는 상황도 아쉽고, 프로젝트 초창기에 다양한 helper class(std::array 기반 문자열 등)가 정립이 되지 않아 아쉽다. 그 때는 정말 초짜 신입이었으니, 별 도리가 없기도 했다.

올해 초에 조금이라도 바로잡고자 문자열 조작 로직을 개량해 직접 snprintf를 쓰지 않고 편리하게 문자열을 다룰 수 있도록 변경한 적이 있었다. 꽤 많은 팀원이 그 존재를 익혔지만 수많은 레거시 코드는 앞으로도 태곳적 상태에 머물지 않을까. 슬프기보다는 아쉽다. 근원적인 실수를 줄일 수 있는 기회가 더욱 있었을텐데...

4
3
1

지난 몇 달간 htmx로 웹 앱을 만들면서 느낀 점은, 골디락스 존의 하위 50% 애플리케이션에만 htmx가 적합하다는 것이다. 클라이언트 상태를 조금이라도 다뤄야 하는 순간이 오면 불행이 시작된다. 하이퍼미디어 시스템의 철학에 동의하는데, 그 구현은 아일랜드 아키텍처의 접근법이 더 나을 수도 있겠다는 생각이 든다. deno.com/blog/intro-to-islands

웹사이트 유형별로 자바스크립트 사용 필요성을 스펙트럼으로 표현한 차트. 수평 막대 다이어그램으로 웹사이트에서 자바스크립트(JS)의 필요 정도를 나타냄. 왼쪽 빨간색 구역은 ‘i don’t need no stinkin’ JS’로, 블로그와 코드 스니펫이 포함된 문서를 예시로 듦. 가운데 넓은 녹색 구역은 ‘Goldilocks JS’로, 마케팅 사이트, 전자상거래 사이트, 인터랙티브 SaaS를 포함. 오른쪽 파란색 구역은 ’JS me up!’으로, 소셜 미디어 사이트를 예시로 듦.
4

https://www.typescriptlang.org/docs/handbook/mixins.html

Typescript에 Mixin 기능은 있는데, 정작 내가 원하는 형태로 지원하는 기능이 아니다. 내가 원하는건 그냥 dart 마냥 클래스의 메서드를 확장하는 것 그 이상 그 이하도 아닌데.... 흑흑...

Dart의 경우


mixin Dog {
  void walk() { ... }
}

mixin Fish {
  void swim() { ... }
}

mixin Bird {
  void fly() { ... }
}

class Animal with Dog, Fish, Bird {
   ...
}

main() {
  final animal = Animal();
  animal.fly();
  animal.swim();
  animal.walk();
}

이런 느낌의 코드를 짜는게 가능하다.

Typescript도 유틸리티성 함수를 묶어서 mixin 문법처럼 매끄럽게 클래스에 포함시킬 수 있는 뭔가가 있었으면 좋겠다.

2

最近はScalaとかSwiftとかの「割とモダンな言語」が基底型に型消去するみたいなコンパイルテクでゼロオーバーヘッドのラッパー定義できる言語が増えてる気がしているので、別にRustだけではないと思う。
Rustが気軽に定義できるって話なら、そりゃそうだと思うけれど

1
2

Fediverseの開発環境、自分は何回か作り直しては崩してをしてるんだけど、現実どうするといいんだろうな

自分の環境の場合 tailscale + ローカルホスト用自前ドメインでローカルに閉じた https 環境を用意出来てるんだけど、この環境、コンテナだとホストのネットワークを使わないと tailscale の ip へ到達できないんだよね

今のところローカル専用の https ドメインはメインマシンに建てた caddy へ流してそこから各アプリケーションに分岐してるんよね

で let's encrypt の証明書は DNS チャレンジでワイルドカード証明書を取ってるんで取得には問題無いんだけど、ローカルのネットワークルーティングをどうするかが非常に悩ましい

0

Fediverseの開発環境、自分は何回か作り直しては崩してをしてるんだけど、現実どうするといいんだろうな

自分の環境の場合 tailscale + ローカルホスト用自前ドメインでローカルに閉じた https 環境を用意出来てるんだけど、この環境、コンテナだとホストのネットワークを使わないと tailscale の ip へ到達できないんだよね

0
1
0

最近はScalaとかSwiftとかの「割とモダンな言語」が基底型に型消去するみたいなコンパイルテクでゼロオーバーヘッドのラッパー定義できる言語が増えてる気がしているので、別にRustだけではないと思う。
Rustが気軽に定義できるって話なら、そりゃそうだと思うけれど

0
0