Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub!

Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다.

FedifyHolloBotKit、そしてこのサイト、Hackers' Pubを作っています。

嗨,我是 FedifyHolloBotKit 以及這個網站 Hackers' Pub 的開發者!

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

Vim/Neovim의 시대가 가고, Vibe Coding 내지는 LLM 에이전트의 도움을 얻는 시대가 왔다지만, 난 아직까지는 전적으로 동의하지는 않음(부분적으로는 동의한다는 의미) 아직까지는 수제로 직접 코드를 짜는 것도 의미가 있고, CLI 기반의 에디터도 저마다의 발전을 하고 있다고 자신있게 말할 수 있음.

내가 생각하는 요오즘 시대 개발의 장점도 언급하면서 CLI 기반의 에디터는 어떤 위치에 있는지도 얘기해보고자 한다.

  1. 신뢰구간이 넓지 않아도 되는 작업을 할때는 AI를 사용하는 코드가 분명 시간을 확 줄여주고 결과적으로 생산성을 향상시키는 경향은 있지만, "정확함"을 위해서 프롬프트를 넣어야 하는데 그 프롬프트를 넣는 작업이 품이 많이 들때(넣어야 하는 맥락이 너무 많을때) 그렇게 정확하지는 않을뿐더러 맥락을 넣는 시간 때문에 차라리 내가 직접 짜는게 나을때가 많음. 수제로 직접 짜기 vs AI한테 전적으로 맡겨버리기 두 세계를 적절하게 오가면서 작업하는게 베스트이지 않나 싶음.

  2. GUI 에디터 특유의 장점도 분명 있긴 있다. GUI 에디터가 올인원 기능을 갖추고 있는 경우도 많고 편의성 면에서 미니멀리즘을 추구하는 CLI 기반의 에디터보다 가진 기능이 많다. 남이 차려준 밥상이 그렇게 달달하지 않을 수 없다. 하지만, 그런 기능들을 제공하는 플러그인이나 자체 기능들의 내부 구현을 막상 까보면 CLI 도구에 의존하는 기능들이 많다. 특히, LSP/린터/포매터가 그렇다. 다만 추상화레이어를 어떻게 감쌌느냐 정도의 차이가 있는데, 그 추상화레이어를 커스터마이징하는데 있어서의 진입장벽은 CLI 기반의 에디터가 상대적으로 낮은 편이다. 왜냐면, 인고의 시간을 거쳐서 해온게 딱 그거라서(.....)

  3. 바이브 코딩은 분명 압도적인 속도로 코드가 짜여질 수 있게 하고, 단위시간당 코드가 짜여지는 양 자체도 어마어마하다. 특히, scaffolding을 할때 더더욱 빛을 발휘한다. 그렇기 때문에, 코드를 짜는건 기계/인공지능에 위임하고, 자세한 디테일을 채우는건 유저리서치를 하거나 와이어프레임을 그려서 기획을 더 보강하는 등 중요한 영역에 집중할 수 있게 된다. 코드를 짜는데 드는 시간은 최소한으로, 중요한 영역에 집중하기 위해 생각하는 시간을 더 많이 가지는 것은 분명 좋은 일이다. 관련해서는 이 글도 읽어보면 좋을 것 같다. https://two-wrongs.com/typing-fast-is-about-latency-not-throughput

물론, 코드를 짜는데 있어서 중요한 것은 리터러시이다. LLM이 코드베이스의 이해를 빠르게 할 수 있도록 도와주긴 하지만, 위에서 언급했듯 어느 정도 시점이 되면 결국엔 직접 짜고 직접 수정하는 일도 있어야 한다. 로컬 LLM이 발전한다 하더라도, LLM을 사용할 여력이 되지 않는 환경에서도 동일한 생산성을 유지할 수 있을까? 생산성이 일관적이지 않다면, 그렇지 않은 환경에 노출이 되었을때 어떻게 대응할 수 있을지가 중요한 포인트일 수 있다고 생각한다. 인자강, 즉, 사람 자체가 강해질 필요가 있다고 생각한다.


인공지능에 전적으로 의존하지 않고 수제로 직접 코드를 짜는 사람들이 기계/인공지능에 저항해서 어떻게 살아남을까를 생각해보면 인간공학에 기반해서 편집하는 테크닉이 더 연구될 필요가 있다.

GUI 기반의 에디터가 날이 갈수록 좋아지고 있는 상황 속에서 CLI 기반의 에디터가 살아남으려면 더더욱 CLI 기반의 도구와 궁합이 좋은 것을 내세워서 차별점을 내세울 필요가 있다. Neovim은 그런 관점에서 IDE와 유사한 경험을 제공하는 쪽으로 잘 발전되어 왔다고 보고 있다.

Vim/Neovim 생태계는 아직까지는 미래가 낙관적이라고 본다.

0
0
0
0
0
0

📢 Haskell 생태계에서 안정성이란 무엇일까요?

Haskell 재단의 안정성 작업 그룹(SWG)이 생태계의 변화를 효과적으로 관리하기 위해 어떤 노력을 기울이고 있는지 소개합니다. GHC 언어 확장 분류, 컴파일러 안정성 기능 개선, 커뮤니티 소통 촉진 등 우리가 진행한 작업과 앞으로 나아갈 방향에 대해 이야기합니다. 함께 Haskell 생태계를 더 강하게 만들어가요! 💪🚀

🔗 자세히 보기

ChatGPT에게 링크 주고 요약문 작성을 부탁했다. SNS에 공유할 거라고 했더니 이모지도 막 달아주네⋯ 글쓴이는 하스켈 안정성 작업 그룹(SWG) 의장인 테일러 님인데 학부 때 과목에도 없는 하스켈 쓰다가 교수님이 “너 그런 거 쓰면 취업 못한다.”라고 했다고⋯

0

📢 Haskell 생태계에서 안정성이란 무엇일까요?

Haskell 재단의 안정성 작업 그룹(SWG)이 생태계의 변화를 효과적으로 관리하기 위해 어떤 노력을 기울이고 있는지 소개합니다. GHC 언어 확장 분류, 컴파일러 안정성 기능 개선, 커뮤니티 소통 촉진 등 우리가 진행한 작업과 앞으로 나아갈 방향에 대해 이야기합니다. 함께 Haskell 생태계를 더 강하게 만들어가요! 💪🚀

🔗 자세히 보기

0

vim.kr 디스코드에도 물어보긴 했는데, 해커스펍에도 공개적으로 물어봅니다.

Git 관련 유틸리티 중에 이런거 없을까요?

개발된 기능들은 어지간하면 싹 다 Staging 브랜치에 합쳐서 개발망에 배포중인데, 개발망에 배포된 기능/버그픽스 중에 몇개 컨펌된 것만 프로덕션에 배포하고 싶어요. 커밋을 가능하면 잘게 쪼개서 하는 편이긴 한데, 컨펌된 것만 한땀한땀 골라서 체리픽하다보니까 관리하는게 여간 귀찮은게 아니네요. 오죽하면 스프레드시트로 관리할 정도입니다 -_-;;;

커밋 중 몇개는 서로 독립적이긴 한데, 몇개는 비엔나소세지마냥 줄줄이 의존성이 엮여있어요. 줄줄이 의존성이 엮여있긴해도, 가만히 보면 A기능 / B기능 잘개 쪼개져있긴 해서, 그걸 좀 더 보기좋게 시각화하고 싶어요. staging 브랜치에 PR 머지할때도 일부러 Squash and merge로 머지합니다.

한줄 요약

  • 의도적으로 커밋 간의 연결관계를 디펜던시 그래프 형태로 가시화할 수 있는 Git 유틸리티 추천받습니다.
0

ChatGPT 덕분에 우연히 하찮은 버그 하나를 발견했다.

ChatGPT에게 소스 코드 보여주고 주석으로 문서 작성을 부탁했는데 다음과 같이 알아서 파이썬 doctest와 같은 코드를 출력했다.

>>> prefixLength "key=value"
3
>>> prefixLength "a=b"
1
>>> prefixLength "noequals"
8

이 함수는 입력 문자열에서 ‘=’ 왼쪽에 있는 문자열의 길이를 리턴한다. 그런데 ‘=’가 없을 경우는 미처 생각을 못했는데 ChatGPT가 출력한 코드를 보고 그 사실을 깨달았다.

덕분에 코드 패치하고 난생 처음 메이저 업데이트라는 것도 해본다.(원래 리턴 타입이 Int였는데 Maybe Int로 바꿔서 브레이킹 체인지가 되었다.)

https://hackage.haskell.org/package/align-equal-0.1.1.1/docs/Data-Text-AlignEqual.html

0

vim.kr 디스코드에도 물어보긴 했는데, 해커스펍에도 공개적으로 물어봅니다.

Git 관련 유틸리티 중에 이런거 없을까요?

개발된 기능들은 어지간하면 싹 다 Staging 브랜치에 합쳐서 개발망에 배포중인데, 개발망에 배포된 기능/버그픽스 중에 몇개 컨펌된 것만 프로덕션에 배포하고 싶어요. 커밋을 가능하면 잘게 쪼개서 하는 편이긴 한데, 컨펌된 것만 한땀한땀 골라서 체리픽하다보니까 관리하는게 여간 귀찮은게 아니네요. 오죽하면 스프레드시트로 관리할 정도입니다 -_-;;;

커밋 중 몇개는 서로 독립적이긴 한데, 몇개는 비엔나소세지마냥 줄줄이 의존성이 엮여있어요. 줄줄이 의존성이 엮여있긴해도, 가만히 보면 A기능 / B기능 잘개 쪼개져있긴 해서, 그걸 좀 더 보기좋게 시각화하고 싶어요. staging 브랜치에 PR 머지할때도 일부러 Squash and merge로 머지합니다.

한줄 요약

  • 의도적으로 커밋 간의 연결관계를 디펜던시 그래프 형태로 가시화할 수 있는 Git 유틸리티 추천받습니다.
0
0
0

The ActivityPub specification does not have an example of the "sharedInbox" field in use.

Although it does say "An optional endpoint..." — I suspect a lot of people won't know (with confidence) that it can go under the "endpoints" field. For example:

"endpoints": {
"sharedInbox": "https://social.example/inbox"
},

Especially if the person is still trying to understand ActivityPub, and isn't aware of the "endpoints" field yet.

sharedInbox

An optional endpoint used for wide delivery of publicly addressed activities and activities sent to followers. sharedInbox endpoints SHOULD also be publicly readable OrderedCollection objects containing objects addressed to the Public special collection. Reading from the sharedInbox endpoint MUST NOT present objects which are not addressed to the Public endpoint.
0

State of Vue 2025

https://www.monterail.com/stateofvue

Vue 프레임워크를 사용하는 온갖 회사들의 케이스스터디가 나열되어 있는데, 양이... 어마어마하다... 인터뷰 하나하나 읽어보는 재미가 있다. 저렇게 인터뷰할 수 있으면 좋겠다

0

https://elixir-lang.org/blog/2025/03/25/cyanview-elixir-case

수퍼볼 같은데서 수백대의 방송장비를 Elixir를 통해서 제어하고, Phoenix LiveView로 시각화하는 사례. Elixir 생태계에 Nerves라는 임베디드 시스템 제어 프레임워크가 있었던걸로 기억하고 있는데, 이게 이렇게 이어지는군아

0
0

State of Vue 2025

https://www.monterail.com/stateofvue

Vue 프레임워크를 사용하는 온갖 회사들의 케이스스터디가 나열되어 있는데, 양이... 어마어마하다... 인터뷰 하나하나 읽어보는 재미가 있다. 저렇게 인터뷰할 수 있으면 좋겠다

0

뉴욕 어딘가에는 컴파일러/DB/웹브라우저 등등 인터널을 까보면서 얘기하는 소셜클럽이 있다. 완전 비슷하게는 아니더라도 해커스펍을 중심으로 밋업을 하는것도 괜찮을지도? 밋업에 참여하는 외부인이 오면 초대장도 그때그때 발급해주는식으로 가고

https://eatonphil.com/nyc-systems-coffee-club.html

0

Hello @MastodonEngineering,

I wanted to share some feedback on the documentation provided in the Highlighting Journalism on Mastodon blog post.

Specifically, in The technical section, the example code for the fediverse:creator meta tag is given as:

<meta name="fediverse:creator" content="@Gargron@mastodon.social" />

Based on my testing (and that of others), Mastodon doesn't seem to recognize the creator link correctly when the leading @ is present in the content attribute. It only works when the @ is removed, like this:

<meta name="fediverse:creator" content="Gargron@mastodon.social" />

Following the blog's example directly led to some wasted time figuring out why it wasn't working. It would be great if either the example in the blog post could be corrected to reflect the current requirement, or if Mastodon's parser could be made more flexible to accept the handle with or without the leading @.

Appreciate all you do for !

0
0

We're incredibly honored to announce that (@indexBuilding ActivityPub) has become a formal sponsor of Fedify through Open Collective!

This is a significant milestone for our project, and we're deeply grateful to @johnonolanJohn O'Nolan and the entire Ghost team for their support and recognition of our work in the ecosystem.

Ghost's social web integration built on is a perfect example of how open standards can connect different publishing platforms in the fediverse. Their backing over the past months has been invaluable, and this formal sponsorship will help ensure Fedify remains sustainable as we continue to develop and improve the framework.

If you're building with ActivityPub or interested in federated applications, please consider joining Ghost in supporting open source development through our Open Collective:

https://opencollective.com/fedify

Every contribution, no matter the size, helps us maintain and enhance the tools that make the fediverse more accessible to developers. Thank you for being part of this journey with us! :fedify: ❤️ :ghost:

0
1
0

Ghost's social web integration is built on the fantastic work of @hongminhee洪 民憙 (Hong Minhee) and the Fedify.dev framework.

We've been backing work on the project for 6 months or so, and now we're thrilled to be formal sponsor of the project on Open Collective!

If you're building with Fedify and ActivityPub, please consider joining us to keep helping to make great open source work sustainable ❤️ Every little helps

opencollective.com/fedify

0
0
2

컴퓨터 관련 제품들 중에 상품명에 "ㅇMMㅇ" 이라는 키워드를 넣은 경우가 많이 보이는데요.

검색해 봐도 진짜로 상품명에 쓰인 경우만 확인되고, 그밖의 언급을 전혀 찾을 수가 없네요. 업계 은어인가? 혹시 이것의 정체를 아시는 분?

0

@hongminhee洪 民憙 (Hong Minhee)

近そうですね。 Chrome Built-in AIでのステータスもだいぶ前に「Early Preview Program (EPP)」からOrigin Trialになってました。

https://developer.chrome.com/docs/ai/built-in-apis

このEPPのTranslator, Language Detector, Sammarizerの各APIはLocalにGemini NanoをダウンロードしてChrome Canaryで管理(chrome://on-device-translation-internals/)してテストされていました。

画像のように個別の言語辞書データをインストールしてトレーニングさせる感じ。

W3CもChromeも同じGoogle ChromeのDomenicさんが管理してるんですね。

Google Chrome Canary (On Device Translation Internals) Language Packages.
0

daisuke replied to the below article:

Browser-Native Translation and Language Detection APIs Coming Soon

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

Just reviewed the W3C draft for the Translator and Language Detector APIs. This is genuinely exciting development for web developers.

The proposal would add native browser support for:

  • Text translation between languages
  • Language detection of arbitrary text
  • Both with streaming capabilities

No more relying on third-party translation services or embedding external APIs for basic language operations. All processing happens locally in the browser.

The API design is clean and straightforward:

// Translation example
const translator = await Translator.create({
  sourceLanguage: "en",
  targetLanguage: "fr"
});

const translatedText = await translator.translate("Hello world");

// Language detection example
const detector = await LanguageDetector.create();
const results = await detector.detect("Hello world");
// Returns array of detected languages with confidence scores

This will be a game-changer for multilingual sites and applications. The browser handles downloading appropriate language models and manages usage quotas.

The spec is still in draft form but shows promising progress toward standardizing these capabilities across browsers. Looking forward to seeing this implemented.

Read more →
0

@hongminhee洪 民憙 (Hong Minhee)

近そうですね。 Chrome Built-in AIでのステータスもだいぶ前に「Early Preview Program (EPP)」からOrigin Trialになってました。

https://developer.chrome.com/docs/ai/built-in-apis

このEPPのTranslator, Language Detector, Sammarizerの各APIはLocalにGemini NanoをダウンロードしてChrome Canaryで管理(chrome://on-device-translation-internals/)してテストされていました。

画像のように個別の言語辞書データをインストールしてトレーニングさせる感じ。

W3CもChromeも同じGoogle ChromeのDomenicさんが管理してるんですね。

Google Chrome Canary (On Device Translation Internals) Language Packages.
0
0

https://conscious-forgery-a96.notion.site/1b3bf9d3f391808e90f3dcb97b67b70d?pvs=4

개인적으로 한국판 alternativeto.net 같은 사이트가 요즘 필요하다고 느껴져서... 우선은 간단한 Notion 사이트를 만들어 보았어요. Notion 계정이 있다면 누구나 참여가 가능해요. (제가 공유를 잘 했길 바라요...)

0
0
0
0
0
0

뉴욕 어딘가에는 컴파일러/DB/웹브라우저 등등 인터널을 까보면서 얘기하는 소셜클럽이 있다. 완전 비슷하게는 아니더라도 해커스펍을 중심으로 밋업을 하는것도 괜찮을지도? 밋업에 참여하는 외부인이 오면 초대장도 그때그때 발급해주는식으로 가고

https://eatonphil.com/nyc-systems-coffee-club.html

0
0
0

저도 최근 VSC에서 Zed로 넘어오게 됐습니다. 특히 블로그 글을 mdx로 작성하는 입장에서, 플러그인 없이도 mdx 문법과 미리보기를 지원하는 Zed가 정말 마음에 들었어요. 하지만 내장 터미널에서 한글 사용 시 글자가 제대로 표시되지 않고, 일부 작업 시 Zed가 강제 종료되는 문제가 생겨서 최근 이슈를 제보했습니다.

https://github.com/zed-industries/zed/issues/26036

https://github.com/zed-industries/zed/issues/27599

https://hackers.pub/@hongminhee/0195e9c3-2bc8-712a-a38e-aa355335ab0b/shares

0

좋은 글 잘 읽었습니다. 글도 잘 쓰시고 코딩도 잘 하시고 부럽습니다. 본문 내용 중 ‘두부와 강철 영수증’이란 표현이 재밌네요. ‘오라클’이라는 전문 용어도 처음 알게 되었습니다. 과거에 하시던 블록체인과 현재 하시는 액티비티펍이 뭔가 탈중앙화라는 공통 분모가 있는 것 같네요.

0
0

Polymarket 등의 예측 시장에는 오라클 문제가 있다. 블록체인으로 만들어봤자, 어차피 베팅의 승패를 결정하려면 외부에서 딸깍 해줘야한다. 가령 4월 내에 탄핵이 이뤄질거냐 마냐 같은 게임을 상상하면 된다. 그 딸각하는 사람을 어떻게 믿을수 있냐는 문제가 오라클 문제다.

오라클 문제가 없는 예측 시장이 하나 생각났는데, 바로 수학 문제가 언제 풀릴 것이냐에 대한 것이다. 가령 리만 가설이 앞으로 1,000,000 블록 내에 풀릴지, 또는 P=NP랑 둘 중에 뭐가 먼저 풀릴지 등에 대한 것이다. 여기서 풀리는건 Lean 등으로 작성된 Formal Proof을 통해서 온체인으로 판단한다.

수학자들은 자신이 베팅을 걸어놓고 연구를 열심히해서 돈을 벌 수도 있다. 또 직접 연구를 하지 않더라도 GPU를 사서 자신의 베팅에 유리하도록 연구에 도움을 줄 수 있다. 앞서 그냥 유명하단 이유로 너무 거창한 문제를 예시로 들었는데, 그보다는 더 작고 쉬운 많은 문제들에 대해 이런 식의 경제가 돌아가는걸 상상해보자. 연구에 들어가는 자원 배분이 최적화되지 않을까?

0

요즘에는 굳이 터미널에서 vim, helix 같은 모달형 에디터를 써야하나 의문이 들어요
마우스를 안 쓰는 것이 과연 효율적인가? 오히려 비효율적이고 손목 건강에도 안 좋다는 의견도 있구요 (
http://xahlee.info/kbd/mouse_vs_keyboard.html)
그리고 Keyball 같은 키보드 쓰기 시작하니까 마우스를 쓰는 것이 부담이 매우 줄어듦
제가 이런 에디터를 썼던 큰 이유 중 하나는 가벼워서 실행/종료가 부담없고 빠르다는 것이었는데
lapce 쓰면 괜찮지 않을까? 싶어서 요즘 lapce를 들여다보는 중

0

리눅스가 기술적 문제를 오픈 소스 정책 - 필요하면 너네가 알아서 해라 - 로 돌파한 또 하나의 경우는 이식성인데, 다른 OS들에 비해 리눅스는 이식성을 위한 기술적, 구조적 대응이 미진했고 이는 초기에 굉장한 비판의 대상이었음.

하지만 리눅스는 1. 사실상 어떤 시스템용으로든 돌아가는 오픈 소스 컴파일러 gcc, 2. 간단하고 통일된 자유 라이센스의 소스 코드, 그리고 무엇보다 3. 강력한 유저층를 바탕으로 거의 모든 시스템에서 돌아가게 됐음.

이후로 커널 이식성 기술에 대한 논의는 수요를 많이 잃어버렸음. 실제 그거 없어도 포팅 잘 되는데 왜 자원을 투입하나, 라는 질문에 답하기 어렵거든...; 윈도 드라이버 프레임웍이 커널 레벨의 추상화를 하고 있지만 이쪽은 목표가 다르지. 😅

0

https://philipbohun.com/blog/0007.html

리눅스는 커널, 앱(userland) 모두 오픈 소스를 암묵적으로 전제하는 경우가 많아서, Binary Compatibility에는 관심이 적음. 안 되면 소스 코드 있으니까 네가 직접 수정-컴파일-패키징하면 된다는 사고 방식. 리눅스 시스템 콜은 이제는 상당히 안정화된 api이고, 이걸 이용한 게 Docker.

다만 이게 사양으로 불변이 확정된 것은 아니므로, 독점 소프트웨어의 경우 장기간 실행 가능성을 담보하려면 호환 레이어나 가상화, 혹은 컨테이너를 쓸 필요는 있겠다. 어느 쪽이어도 Win32 포팅보다는 더 싸고 안정적인 방법일 듯.

0
0

바이너리 배포에서의 안정성을 위한다면 아주 말이 안 되는 소리는 아니지만 프로그램에서의 시스템 콜의 오버헤드를 가중시키고 시스템 간의 완벽한 호환을 보장하기 어려운데다 이미 잘 쓰고 있는 POSIX API를 버리고 Windows API를 배포하는 것은 복잡도와 비효율성 그리고 리눅스 시스템을 제대로 활용할수 없는 유연성이 저해되고 너무나도 득보다 실이 큰것이 아닌가 하는

Foreign OS의 구성 요소를 통해서 해당 운영체제를 전체적으로 랩핑한다는 시도 자체는 정말 그래야 하는가? 싶다

오히려 리눅스에서 다이나믹 링킹을 할 방법을 찾는게 더 맞지 않나 싶은

RE:
https://hackers.pub/ap/notes/0195e8d1-3e72-7dc9-a194-47e7d3202329

0
0
0
0
0

洪 民憙 (Hong Minhee) shared the below article:

Fedify CLI로 Content Warnings 이해하기

Lee Dogeon @moreal@hackers.pub

이 글은 Mastodon의 Content Warnings 기능이 ActivityPub Activity 객체에서 어떻게 표현되는지 탐구합니다. Mastodon에서 글을 작성할 때 Content Warnings를 사용하는 이유와, 그것이 실제 데이터 구조에서 어떻게 나타나는지에 대한 궁금증에서 시작합니다. Fedify CLI 도구를 사용하여 실제 Activity 객체를 확인하고, Content Warnings에 입력한 텍스트가 `summary` 필드에 저장됨을 발견합니다. ActivityPub 문서에서 `summary` 필드의 정의를 찾아 HTML 스타일링과 다국어 지원이 가능하다는 점을 확인합니다. 결론적으로 Content Warnings를 요약으로 사용하는 것이 항상 적절한 용례는 아닐 수 있지만, 사용자가 선호하는 언어로 작성된 요약을 애플리케이션이 자동으로 번역하여 제공할 수 있다는 아이디어를 제시합니다.

Read more →
0
0