洪 民憙 (Hong Minhee) :nonbinary:'s avatar

洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social · 997 following · 1407 followers

An intersectionalist, feminist, and socialist living in Seoul (UTC+09:00). @tokolovesme's spouse. Who's behind @fedify, @hollo, and @botkit. Write some free software in , , , & . They/them.

서울에 사는 交叉女性主義者이자 社會主義者. 金剛兔(@tokolovesme)의 配偶者. @fedify, @hollo, @botkit 메인테이너. , , , 等으로 自由 소프트웨어 만듦.

()

洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Hello, I'm an open source software engineer in my late 30s living in , , and an avid advocate of and the .

I'm the creator of @fedify, an server framework in , @hollo, an ActivityPub-enabled microblogging software for single users, and @botkit, a simple ActivityPub bot framework.

I'm also very interested in East Asian languages (so-called ) and . Feel free to talk to me in , (), or (), or even in Literary Chinese (, )!

洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee) :nonbinary:'s post

安寧(안녕)하세요, 저는 서울에 살고 있는 30() 後半(후반) 오픈 소스 소프트웨어 엔지니어이며, 自由(자유)·오픈 소스 소프트웨어와 聯合宇宙(연합우주)(fediverse)의 熱烈(열렬)支持者(지지자)입니다.

저는 TypeScript() ActivityPub 서버 프레임워크인 @fedify 프로젝트와 싱글 유저() ActivityPub 마이크로블로그인 @hollo 프로젝트와 ActivityPub 봇 프레임워크인 @botkit 프로젝트의 製作者(제작자)이기도 합니다.

저는 ()아시아 言語(언어)(이른바 )와 유니코드에도 關心(관심)이 많습니다. 聯合宇宙(연합우주)에서는 國漢文混用體(국한문 혼용체)를 쓰고 있어요! 제게 韓國語(한국어)英語(영어), 日本語(일본어)로 말을 걸어주세요. (아니면, 漢文(한문)으로도!)

洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee) :nonbinary:'s post

こんにちは、私はソウルに住んでいる30代後半のオープンソースソフトウェアエンジニアで、自由・オープンソースソフトウェアとフェディバースの熱烈な支持者です。名前は洪 民憙ホン・ミンヒです。

私はTypeScript用のActivityPubサーバーフレームワークである「@fedify」と、ActivityPubをサポートする1人用マイクロブログである 「@hollo」と、ActivityPubのボットを作成する為のシンプルなフレームワークである「@botkit」の作者でもあります。

私は東アジア言語(いわゆるCJK)とUnicodeにも興味が多いです。日本語、英語、韓国語で話しかけてください。(または、漢文でも!)

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hackers.pub

Hackers' Pub에 리액션 기능 만들고 있는데, 선택 가능한 에모지 세트를 이 정도로 대충 정해봤습니다. 더하거나 뺄 게 있을까요? 그리고 5 종류인 게 많다고 보시나요 적다고 보시나요?

const REACTION_EMOJIS = ["❤️", "😕", "😮", "🤔", "👀"];
const DEFAULT_REACTION_EMOJI = REACTION_EMOJIS[0];
ALT text detailsconst REACTION_EMOJIS = ["❤️", "😕", "😮", "🤔", "👀"]; const DEFAULT_REACTION_EMOJI = REACTION_EMOJIS[0];
洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social · Reply to 박준규's post

@curry 홈 서버가 아직 널널해서 서비스만 더 추가하는 식으로… ㅎㅎㅎ

洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee) :nonbinary:'s post

翻譯機(번역기)랑 글쓰기 앱 만들어 보고 싶음…

洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

이미 벌려 둔 일이 많은데도 일을 더 벌리고 싶다… 봄이라 그런가?

洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social · Reply to 🦊's post

@root 그래도 대체로 알아들을 수 있답니다. ㅎㅎ

洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

「刺繍」の旧字体ですね。

https://mean.engineer/@indutny/114288786976630444

Fedor Indutny's avatar
Fedor Indutny

@indutny@mean.engineer

やばい😨漢字ですよ!辞書でも検索できませんそうです。

助けてくれて…🥲

わからない漢字
ALT text detailsわからない漢字
lionhairdino's avatar
lionhairdino

@lionhairdino@hackers.pub

NixOS.kr 디스코드에 올렸는데, 다른 분들의 의견을 들어보려고 해커스펍에도 올립니다. 닉스 경험이 많지 않은 사람의 글이니, 정확하지 않을 수 있습니다. 틀린 곳이 있으면 바로 알려주세요.

※ 닉스를 처음 접하는 분들이나, 닉스로 실용적인 업무를 하시는데 문제가 없는 분들한테는 적당한 글은 아닙니다. 서두에 읽으면 도움이 될만한 분들을 추려서 알려 드리려고 하니, 의외로 필요한 분들이 없겠습니다. 실무자들은 이렇게까지 파고들며 알 필요 없고, 닉스 개발자들이야 당연히 아는 내용일테고, 입문자 분들도 역시 이런 내용으로 어렵다는 인식을 갖고 시작할 필요는 없으니까요. 그럼 남은 건 하나네요. mkDerivation 동작을 이미 아는 분들의 킬링 타임용이 되겠습니다.


외국어를 익힐 때, 문법없이 실전과 부딪히며 배우는 방법이 더 좋기는 한데, 가끔은 문법을 따로 보기 전엔 넘기 힘든 것들이 있습니다. 닉스란 외국어를 익히는데도 실제 설정 파일을 많이 보는 것이 우선이지만, 가끔 "문법"을 짚고 넘어가면 도움이 되는 것들이 있습니다.

닉스 알약 (제목이 재밌네요. 알약) 글을 보면 mkDerivation속성 집합을 받아, 거기에 stdenv 등 기본적인 것을 추가한 속성 집합을 만들어 derivaition 함수에 넘기는 간단한 래핑 함수임을 직관적으로 잘 설명하고 있습니다.

그런데, 실제 사용 예시들을 만나면, mkDerivation에 속성 집합을 넘기지 않고, attr: {...} 형태의 함수를 넘기는 경우를 더 자주 만납니다. 그래서, 왜 그러는지 실제 구현 코드를 보고 이유를 찾아 봤습니다.

  mkDerivation =
    fnOrAttrs:
    if builtins.isFunction fnOrAttrs then
      makeDerivationExtensible fnOrAttrs
    else
      makeDerivationExtensibleConst fnOrAttrs;

mkDerivation정의를 보면 인자로 함수를 받았느냐 아니냐에 따른 동작을 분기합니다. 단순히, stdenv에서 가져온 속성들을 추가한다면, 함수를 인자로 받지 않아도 속성 집합을 병합해주는 //의 동작만 있어도 충분합니다.

{ a = 1; } // { b = stdenv.XXX; }

하지만, 함수로 받는 이유를 찾으면, 코드가 단순하지 않습니다. 아래는 함수를 받을 때 동작하는 실제 구현 일부를 가져 왔습니다.

makeDerivationExtensible =
    rattrs:
    let
      args = rattrs (args // { inherit finalPackage overrideAttrs; });
      ...

전체를 보기 전에 일단 args에서부터 머리가 좀 복잡해집니다. argsargs를 재귀 참조하고 있습니다. 보통 rattrs 매개 변수로는 아래와 같은 함수들이 들어 옵니다.

stdenv.mkDerivation (finalAttrs: {
  pname = "timed";
  version = "3.6.23";
  ...
    tag = finalAttrs.version;
}

(와, 해커스펍은 코드 블록에 ANSI가 먹습니다! 지원하는 곳들이 드문데요.)
코드를 바로 분석하기 전에, 닉스의 재귀 동작을 먼저 보면 좋습니다.

재귀 생각 스트레칭

nix-repl> let r = {a = 1; b = a;}; in r
error: undefined variable 'a'

위 동작은 오류지만, 아래처럼 rec를 넣어주면 가능합니다.

nix-repl> let r = rec {a = 1; b = a;}; in r 
{ a = 1; b = 1; }

rec동작은 Lazy 언어의 fix로 재귀를 구현하는 동작입니다. ※ 참고 Fix 함수

rec를 써서 속성 안에 정의 중인 속성에 접근할 수 있습니다. 그런데, 아래 같이 속성을 r.a 로 접근하면, rec 없이도 가능해집니다.

nix-repl> let r = {a = 1; b = r.a;}; in r
{ a = 1; b = 1; }

닉스 언어의 Lazy한 특성 때문에 가능합니다.

이제, 원래 문제와 비슷한 모양으로 넘어가 보겠습니다. 아래같은 형태로 바로 자기 자신에 재귀적으로 접근하면 무한 재귀 에러가 나지만,

nix-repl> let x = x + 1; in x
       error: infinite recursion encountered

아래처럼 람다 함수에 인자로 넘기면 얘기가 달라집니다.

nix-repl> let args = (attr: {c = 1; b = attr.a + attr.c + 1;}) (args // { a = 1; }); in args
{ b = 3; c = 1; }

여기서 속성b의 정의 동작이 중요합니다. 위 내용을 nix-instantiate로 평가하면,

 nix-instantiate --eval -E 'let args = (attr: {c = 1; b = attr.a + attr.c + 1;}) (args // { a = 1; }); in args'
{ b = <CODE>; c = 1; }

--eval 옵션은 WHNF까지만 평가합니다. <CODE>는 하스켈 문서에서 나오는 <thunk>와 같은, 평가가 아직 이루어지지 않은 상태를 뜻합니다. ※ Nix Evaluation Performance
b는 아직 평가가 되지 않았으니, 에러가 나지 않고, b가 필요한 순간에는 attr.a가 뭔지 알 수 있는 때가 됩니다.

attr: 
  { c = 1; 
    b = attr.a + attr.c + 1;
  }

속성 b아직 알 수 없는, 미래의 attr에 있는 a를 받아 써먹고, 원래는 rec없이 접근하지 못했던, c에도 attr.c로 접근이 가능합니다. (attr.c은 현재 정의하고 있는 속성셋의 c가 아니라, 매개 변수 attr로 들어온 속성셋의 c입니다.)

원래 문제로 다시 설명하면, mkDerivation에 넘기고 있는, 사용자 함수 finalAttrs: { ... }에서, 닉스 시스템이 넣어주는 stdenv 값 같은 것들과 사용자 함수내의 속성들을 섞어서 속성 정의를 할 수 있다는 얘기입니다. 아래처럼 말입니다.

    tag = finalAttrs.version;

뭐하러, 이런 복잡한 개념을 쓰는가 하면, 단순히 속성 추가가 아니라, 기존 속성이 앞으로 추가 될 속성을 기반으로 정의되어야 할 때는 이렇게 해야만 합니다. 함수형 언어에선 자주 보이는, 미래값을 가져다 쓰는 재귀 패턴인데, 저는 아직 그리 익숙하진 않습니다.

kiwiyou's avatar
kiwiyou

@kiwiyou@twt.rs

폐인과 폐인 (*폐인03은 부정적인 뉘앙스가 있는 단어입니다.)

Jaeyeol Lee (a.k.a. kodingwarrior) :vim:'s avatar
Jaeyeol Lee (a.k.a. kodingwarrior) :vim:

@kodingwarrior@silicon.moe

해커스펍에서 리액션 다음으로 지원되는기능은 블락일까 아니면 해시태그일까

Mark Crocker's avatar
Mark Crocker

@mcrocker@indieweb.social

SE Radio 657: Hong Minhee @hongminhee on and the – Software Engineering Radio se-radio.net/2025/02/se-radio-

References, Fedify fedify.dev/ and hollo: Federated single-user microblogging software github.com/fedify-dev/hollo are also interesting.

Juntai Park's avatar
Juntai Park

@arkjun@hackers.pub

앞으로 Hackers'해커스 Pub퍼브에서는 國漢英文混用국한영문혼용으로 글을 올려볼까?

Simon Park's avatar
Simon Park

@parksb@silicon.moe · Reply to Simon Park's post

트위터 봇 만들 때는 스팸짓 좀 해도 어차피 팔로워가 없으면 다른 사람 피드를 가득 채울 일이 없으니 부담도 없었다. 그런데 여기에서는 봇을 조금 잘못 돌리면 연합 타임라인이 순식간에 봇의 스팸글로 가득 차 버린다. 트위터 서버에 비해 영세한 이 서버에 부담을 주지 않아야 한다는 생각도 들고... 아무쪼록 조심해야 할 것 같다.

Simon Park's avatar
Simon Park

@parksb@silicon.moe

BotKit을 이용해 국내외 기술 블로그의 아티클을 업로드하는 'Tech Blog Bot'을 만들었다. 1시간에 한 번씩 구독중인 블로그들의 새 아티클을 확인해 큐에 넣고, 1분에 하나씩 큐의 아티클을 업로드한다. BotKit의 유려함에 첫 번째로 놀랐고, 테스트로 돌려본 봇이 스팸짓을 하는 걸 보면서 두 번째로 놀랐다. techblogbot.parksb.xyz/

봄별 はるぼし Haruboshi🌟's avatar
봄별 はるぼし Haruboshi🌟

@haruboshi@aoharu.place

그러고보니 문득 생각이 난 건데 해커스.펍 (@hollo@hollo.social)와 마찬가지로 @hongminhee@hollo.social 님이 Fedify(@fedify@hollo.social) 기반으로 만든 자체 ActivityPub 소프트웨어라는 걸 알게 된 건 꽤 됐지만 그렇게 규모가 제법 되는 서비스가 저 분 소유의 홈서버에서 돌아가고 있다는 사실을 알게 된 건 얼마 전의 일이다.

やまのく's avatar
やまのく

@yamanoku@hackers.pub

Hackers’ Pub、気が付いたらいろいろとUIが変わっている

I LIKE TRAINS's avatar
I LIKE TRAINS

@Native@pointless.chat

포인트리스 연합우주 소프트웨어 호스팅 서비스
- 완전 관리형: 구독기간 중 업그레이드를 포함한 서버 유지보수가 무료입니다.
- 데이터베이스와 웹서버를 분리한 구조로 성능이 높습니다.
- 마스토돈, 미스키, Hollo 를 지원합니다.
- 방화벽: Cloudflare Zero Trust 를 구성해드립니다.
수익금은 포인트리스 서버비로 사용됩니다.

티르's avatar
티르

@tirr@mitir.social

액펍 특성상 완전한 삭제는 매우 어렵습니다 (삭제 액티비티가 전달되지 않는 서버가 있을 수 있음)

금강토's avatar
금강토

@tokolovesme@seoul.earth

일본어로 발표 준비 중인 홍민희와 응원 중인 나

洪 民憙 (Hong Minhee) :nonbinary:'s avatar
洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

프로필 寫眞(사진)에서 머리띠 빼는 거 잊고 있었다!

https://c.koliosky.com/notes/a65tfpeqnnwg0lu4

ふぉの :inkan: :sabakan: (自律しろ)'s avatar
ふぉの :inkan: :sabakan: (自律しろ)

@fono@ma.fono.jp

Fedify、デフォルトでObservabilityがあるの本当に有り難い。

ふぉの :inkan: :sabakan: (自律しろ)'s avatar
ふぉの :inkan: :sabakan: (自律しろ)

@fono@ma.fono.jp

資金調達できているの凄すぎ。

ふぉの :inkan: :sabakan: (自律しろ)'s avatar
ふぉの :inkan: :sabakan: (自律しろ)

@fono@ma.fono.jp

国漢文混用体の新聞、断罪、覚悟、といった文字が見える。

ふぉの :inkan: :sabakan: (自律しろ)'s avatar
ふぉの :inkan: :sabakan: (自律しろ)

@fono@ma.fono.jp

Fedify、開発者体験が良すぎて感動した。

zunda's avatar
zunda

@zundan@mastodon.zunda.ninja

Misskeyから$[ruby 漢字 ふりがな]で投稿するとMastodonで日本語のルビも表示されますね
https://misskey.io/notes/a67g5u99pkft0bwp

日本語(にほんご)にふりがなが付くかな?
ALT text details日本語(にほんご)にふりがなが付くかな?
Esurio's avatar
Esurio

@esurio1673@c.koliosky.com

Miのruby周りはそこそこ混沌としている(Forkeysでは対応してたりしなかったりで)

zunda's avatar
zunda

@zundan@mastodon.zunda.ninja

有名な方のスクリーンショットに入り込んでしまうことの多いアカウントはこちらです

NTSK's avatar
NTSK

@ntek@hl.oyasumi.dev

Hackers' Pub、きになる

もちもちずきん🍆's avatar
もちもちずきん🍆

@Yohei_Zuho@mstdn.y-zu.org

過去数ヶ月の開発を通じて、Federationプロトコルの複雑さと、分散システムの考え方、OSSコミュニティーの力、小さな問題からでも大きなプロジェクトが生まれる。

zunda's avatar
zunda

@zundan@mastodon.zunda.ninja

Hongさんの投稿に振りハングルが付いてるの見たよなあと思ったらHongさんの功績だった。すばらしいなあ!!

Esurio's avatar
Esurio

@esurio1673@c.koliosky.com

この当時のMiはrubyタグをサポートしてなかったけどPRを出して解決

← Newer
Older →