そもそもapkit.serverはもともと使ってたMiddlewareの形式じゃなくてそれ自体をASGIフレームワークとして使う形なので前とは違ってFedifyの統合と全く違う方法になってる (元々存在した課題点を克服するためにこういう形になった)
洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 973 following · 682 followers
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)
.
Fedify、Hollo、BotKit、そしてこのサイト、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
apkitのActivityPubServerは完全にFastAPIとStarletteのAPIに依存してるからあんまり気にしてなかったな
というかコードの理解度的に (Starlette/FastAPI以外の)統合をかける余裕があるか怪しいからしばらくは標準の統合以外は自分では出さないかも (裏側のコードに関してはStarletteとFastAPIだけならある程度わかったつもりでいる)
apkitのActivityPubServerに関しては同期対応しないで非同期だけにしてる (分岐させてもいいけどわざわざこれでするであろう操作を同期でするとは考えてないから)
必要なら同期対応できるけどね
클라우드 플레어 쓰는 서버들이 다 터졌나?
思いついた
Requestじゃなくてfedifyみたいなctxを送りつけるようにするか (requestはctx.requestからする?)
@AmaseCocoaここあにゃん@みんなにゃーん JavaScriptではウェブフレームワークの種類に関わらず標準のRequestクラスがあったので抽象化が容易でしたが、ASGIでは標準的なRequestタイプが別にないので悩みどころになりそうです。🤔
思いついた
Requestじゃなくてfedifyみたいなctxを送りつけるようにするか (requestはctx.requestからする?)
참고로 Hackers' Pub의 행동 강령에서는 굳이 정치적인 주제를 금지하지 않고 있습니다. 정치적인 것과 그렇지 않은 것의 경계가 흐릿한 것도 있지만, 그렇게 했을 경우 기득권에 편향되기 쉽다는 점, 그리고 필요하다면 정치에 대해 이야기할 수 있어야 하기 때문입니다. 많은 커뮤니티에서 정치적 대화가 필요할 때 조차 정치적 주제를 기계적으로 금지함으로 인해 자정 능력을 잃는 것을 봐 왔습니다.
StarletteじゃなくてFastAPIベースにしたのはルートがデコレータで定義できたりするっていう理由がある (自分で実装してもいいかもしれないけど既存のものを基盤にできるならしたかった)
Coding ActivityPubServer...
nodeinfo path is auto-generated by starlette (fastapi)
Coding ActivityPubServer...
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").
@curry박준규 현재는 experimental인 cross build용 channel을 쓰면 GHCJS와 WASM GHC도 설치할 수 있답니다
any 쓰지 마세요
네
as unknown as
흐끼야악
지난 Google I/O Extended 에서 발표한 내용을 공유합니다. 핸즈온 세션이라 내용을 충분히 전하긴 어렵겠지만, 나름 유용한 사람도 있으실 것…
https://cojette.github.io/posts/firebasestudio/
…아이 자꾸 까먹음 종종 와야징.
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").
회사에 Admin페이지들이 RoR로 작성되어있었는데,
1. 개발환경 세팅이 오래걸리고,
2. RoR은 경험이 거의 없고 Active Record에 대한 지식이 없는데
3. 원하는 기능은 어렵지 않은 간단한 기능 추가들
인 상황이여서, 바이브 코딩을 첨으로 해봤다.
JS나 Python으로된 복잡한 프로덕션 프로젝트에는 써볼 엄두가 안났는데, 내부용 간단한 관리툴에 기능추가는 정말 안성 맞춤인 것 같다.
그리고 다른 언어들에 비해 RoR은 더욱 잘 맞는것 같기도.
이제 Zed에서 Claude Code를 베타로 사용 가능
------------------------------
- Claude Code 와 Zed 의 통합이 공개 베타로 출시
- 새로운 *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
간단한 글쓰기 서버로 굴리려고 오랜만에 꺼냈다.
방금 친구랑 모의면접을 봤는데(내가 면접관), 면접으로 알아낼 수있는게 딱히 있는지에 회의가 생겨버렸다. 아 물론, 내가 초보 면접관이라 면접스킬이 떨어지긴 한다만, 친구 얘기론(면접관 경험이 더 많음) 그래도 무난의 범위엔 든다고 한다. 이력서 기반으로 이것저것 물었는데, 만약에 이력서가 구라로 점철되있으면 그걸 걸러낼순 있었을 것이다. 근데 친구의 이력서는 당연히 그렇지 않았으니, 그냥 이력서가 구라가 아니란 사실 정도만;; 알아낼수 있었다. 이 이상 뭔가 더 꿰뚫어 보는게 가능할까... 하겠지? 그럼 어떻게 하는걸까.
@bglbgl gwyng 예전에 《애자일 이야기》에서 읽은 김창준 씨의 글 〈인터뷰에서 진실을 들으려면〉이 떠오르네요.
방금 친구랑 모의면접을 봤는데(내가 면접관), 면접으로 알아낼 수있는게 딱히 있는지에 회의가 생겨버렸다. 아 물론, 내가 초보 면접관이라 면접스킬이 떨어지긴 한다만, 친구 얘기론(면접관 경험이 더 많음) 그래도 무난의 범위엔 든다고 한다. 이력서 기반으로 이것저것 물었는데, 만약에 이력서가 구라로 점철되있으면 그걸 걸러낼순 있었을 것이다. 근데 친구의 이력서는 당연히 그렇지 않았으니, 그냥 이력서가 구라가 아니란 사실 정도만;; 알아낼수 있었다. 이 이상 뭔가 더 꿰뚫어 보는게 가능할까... 하겠지? 그럼 어떻게 하는걸까.
'스킬 이슈에서 스킬 있슈로!' 라는 삼류 국비 학원 광고 문구 같은 말장난이 생각남
2025-09-03 오늘의 #cosmoslide 작업한 내용 메모
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) 액티비티가 전송되는 방식
로컬 환경에 있는 서로 다른 두 액터끼리는 잘 되는걸 확인했는데, 서로 다른 서버의 액터끼리 잘 되는지는 좀 더 테스트가 필요함.
이번 주말까지는 게시글 작성하고 원격 서버 타임라인에 노출되는 것까지 어떻게 되긴 할 듯.
오늘은 다른 파트에서 나온 이상 현상을 보다가 흔한 실수 중 하나인 memcpy(dest, src, strlen(src))를 발견하고 공유했다. 동적 할당 방지를 위해 std::string과 std::format을 못 쓰는 상황도 아쉽고, 프로젝트 초창기에 다양한 helper class(std::array 기반 문자열 등)가 정립이 되지 않아 아쉽다. 그 때는 정말 초짜 신입이었으니, 별 도리가 없기도 했다.
올해 초에 조금이라도 바로잡고자 문자열 조작 로직을 개량해 직접 snprintf를 쓰지 않고 편리하게 문자열을 다룰 수 있도록 변경한 적이 있었다. 꽤 많은 팀원이 그 존재를 익혔지만 수많은 레거시 코드는 앞으로도 태곳적 상태에 머물지 않을까. 슬프기보다는 아쉽다. 근원적인 실수를 줄일 수 있는 기회가 더욱 있었을텐데...
옛날 C++에러 메시지의 수준도 요즘 하는 일에서 발생하는 문제에 비하면 너무 감사한 수준이다.
ActivityPub Academy로 최종 테스트할 때마다 야수의 심장으로 테스트하는중
지난 몇 달간 htmx로 웹 앱을 만들면서 느낀 점은, 골디락스 존의 하위 50% 애플리케이션에만 htmx가 적합하다는 것이다. 클라이언트 상태를 조금이라도 다뤄야 하는 순간이 오면 불행이 시작된다. 하이퍼미디어 시스템의 철학에 동의하는데, 그 구현은 아일랜드 아키텍처의 접근법이 더 나을 수도 있겠다는 생각이 든다. https://deno.com/blog/intro-to-islands
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 문법처럼 매끄럽게 클래스에 포함시킬 수 있는 뭔가가 있었으면 좋겠다.
最近はScalaとかSwiftとかの「割とモダンな言語」が基底型に型消去するみたいなコンパイルテクでゼロオーバーヘッドのラッパー定義できる言語が増えてる気がしているので、別にRustだけではないと思う。
Rustが気軽に定義できるって話なら、そりゃそうだと思うけれど
https://hackers.pub/ap/notes/01990ddf-6e44-769a-995c-6fac70d06920
確かにHaskellにもあるか。使わなさすぎて忘れてた
個人的には、一時的に開発目的で使うActivityPubサーバーにはngrokやfedify tunnelなどを活用し、長期的に継続して開発するActivityPubサーバーであればTailscale FunnelやCloudflare Tunnelを使用しています。
Fediverseの開発環境、自分は何回か作り直しては崩してをしてるんだけど、現実どうするといいんだろうな
自分の環境の場合 tailscale + ローカルホスト用自前ドメインでローカルに閉じた https 環境を用意出来てるんだけど、この環境、コンテナだとホストのネットワークを使わないと tailscale の ip へ到達できないんだよね
今のところローカル専用の https ドメインはメインマシンに建てた caddy へ流してそこから各アプリケーションに分岐してるんよね
で let's encrypt の証明書は DNS チャレンジでワイルドカード証明書を取ってるんで取得には問題無いんだけど、ローカルのネットワークルーティングをどうするかが非常に悩ましい
Fediverseの開発環境、自分は何回か作り直しては崩してをしてるんだけど、現実どうするといいんだろうな
自分の環境の場合 tailscale + ローカルホスト用自前ドメインでローカルに閉じた https 環境を用意出来てるんだけど、この環境、コンテナだとホストのネットワークを使わないと tailscale の ip へ到達できないんだよね
@hongminhee洪 民憙 (Hong Minhee) 눈물 흘리는 하이랄로 돌아오세요…
@z9mb1wwj 곧 〈왕눈〉으로 다시 하이랄 지키러 가겠습니다…
「割とモダンな言語」というわけではないが、Haskellもかなり昔からnewtypeというキーワードでサポートしていた。
最近はScalaとかSwiftとかの「割とモダンな言語」が基底型に型消去するみたいなコンパイルテクでゼロオーバーヘッドのラッパー定義できる言語が増えてる気がしているので、別にRustだけではないと思う。
Rustが気軽に定義できるって話なら、そりゃそうだと思うけれど
Value Objectが好きだけどオーバーヘッドが看過できない人向けの言語 → Rustすぎる
1시간 만에 완판! 걱정마세요 아직 대기 신청이 남아있습니다!
@z9mb1wwj 하이랄 이미 구했습니다.
디버깅을 하다가 도저히 모르겠어서 Gemini한테 시켜서 해보라고했는데, 걔도 나랑 똑같은 시도를 한다음에 잘 모르겠다고 하니까 덤앤더머같다;;
✨ Hackers' Public 첫 오프라인 모임! ✨
Hackers' Pub 사용자들의 자발적인 모임, Hackers' Public이 📅 9월 14일(일) 오후 3시 ~ 6시 열립니다.
이번 모임에서는 많은 분들이 흥미로워할 두 가지 발표가 준비되어 있습니다:
- 🎨 Code As a Canvas: 코드에서 예술작품이 되기까지
- ✍️ 폰트는 어떻게 만들어지는가 – Neo둥근모 개발 후일담
또한 자유롭게 교류할 수 있는 네트워킹 시간도 마련되어 있으니 많은 관심 부탁드립니다 🙌
현재는 2차 모집 단계이며, 👉 신청은 포스터의 QR코드 또는 http://public.hackers.pub 에서 가능합니다. (두 경로 모두 동일한 이벤트 페이지로 연결됩니다)
2차 모집 기간은 9월 7일까지이며, 완판이 되었더라도 참가자 신청 대기하신 분 중에서 두분 정도 선정할 예정입니다!
@cocoaAmaseCocoa おかしいですね。応答で410 Goneエラーが出ます。
일주일 넘게 손 놓고 있던 GitHub 이슈/PR 자동 레이블링 봇 다시 작업중.
@jcha0713joohoon 안녕하세요! 반갑습니다! #자기소개 에 올라와있는 분들 팔로하셔도 좋고, 자기소개도 해주시면 땡큐입니다<
해커스펍 오프라인 밋업 기대하고 있었는데 1차는 매진으로 못 사고 2차 기다리고 있었는데, 정신이 없어서 놓쳤네.. 담번엔 꼭 가봐야지
@yg1ee밀 2차 아직 안 떴어요!
洪 民憙 (Hong Minhee) shared the below article:
Fediverse Auxiliary Service Providers(FASP)の詳細解説
のえる @noellabo@hackers.pub
この記事では、Fediverseの課題を解決し、機能拡張を目指す新しいアーキテクチャ、Fediverse Auxiliary Service Providers(FASP)について解説します。FASPは、分散型ネットワークにおける検索・発見の限界や、セキュリティ・モデレーションの課題に対処するために開発されており、アカウント検索、コンテンツ検索、スパム検出などの機能を提供します。Mastodon gGmbHが主導し、NGI Searchプログラムからの資金提供を受けて開発が進められています。2025年にかけて基本仕様の公開、実装、テストが行われ、最終的にはFediverseエコシステム全体への拡大を目指しています。FASPは、Fediverseの可能性を大きく拡張する重要なプロジェクトであり、今後の進展が期待されます。
Read more →
洪 民憙 (Hong Minhee) shared the below article:
Fediverse Auxiliary Service Providers(FASP)とは?
のえる @noellabo@hackers.pub
Fediverse Auxiliary Service Providers(FASP)は、分散型SNSであるFediverseの課題を解決するための「助っ人サービス」です。情報の探しにくさや小規模サーバーの不利といった問題を、検索サービス、スパム対策、トレンド表示といった機能で解消します。サーバー管理者はFASPを登録するだけで、高度な機能を外部サービスとして利用でき、ユーザーはどのサーバーにいても便利な機能を使えるようになります。Mastodonの最新バージョンで試験的な機能も登場しており、今後はスマホアプリなどからも利用可能になる予定です。FASPは、Fediverseをより便利で使いやすいSNSへと進化させる鍵となります。
Read more →Want to use C libraries in MoonBit? Now you can😆
With C-FFI, MoonBit can call native C functions — from low-level hardware ops to high-performance math.
A step-by-step guide to MoonBit’s C-FFI:
https://www.moonbitlang.com/pearls/moonbit-cffi
apkit書き直すか
해커스펍 오프라인 밋업 기대하고 있었는데 1차는 매진으로 못 사고 2차 기다리고 있었는데, 정신이 없어서 놓쳤네.. 담번엔 꼭 가봐야지
NeoVim Keybinding 사용 통계 보여주는 쓸만한 플러그인을 찾고 있다. 스스로 돌아보는 데에도 좋을 것 같고 다른 사람과 비교해보면서 유용한 패턴도 배워볼 수 있지 않을까
apmodel 0.4.0
書き直したばかりでまだドキュメント整備してないからもしも使いたいならソースコード見ながら使ってください
https://pypi.org/project/apmodel/0.4.0/
오랜만에 Termfedi 업데이트 Renote/React를 할 수 있게 Action 모드를 추가했다.






