ActivityPub 플러그인

네, 의도적으로 미묘한 차이로 만들어 두었습니다. 여기서는 이 토픽이나 게시물을 읽는 대부분의 사용자가 "이 게시물은 이 커뮤니티 외부의 사용자로부터 온 것입니다"라는 것을 바로 알아야 할 필요는 없다고 가정합니다. 관리자나 해당 기능을 구현하는 입장에서는 재미있는 정보일 수 있지만, 대부분의 사용자는 콘텐츠 자체에 집중하기를 원합니다. 그래서 우리는 게시물의 ActivityPub 관련 기술적 세부 사항은 비교적 조용히 넘어가도록 선택했습니다.

2개의 좋아요

그러면 내 사용자들은 다르네요. 분명히 알고 싶어 했거든요. 하지만 이건 문화적 차이, 그리고 우리가 핀란드인으로서 얼마나 비사회적 행동에 가까운지(미국 콘텐츠 크리에이터들 기준이죠. 미국 수준으로 스몰톡을 할 능력이 전혀 없으니까 :joy:)를 보여주는 사례일 거예요.

그래도 CSS로 조정하는 건 비교적 쉬웠기 때문에 기본값 그대로 두는 게 좋습니다(혹시 같은 궁금증을 가진 분이 있다면, 이제 하나의 해결책이 여기에 있으니 참고하세요).

2개의 좋아요

Discourse의 게시물에 Mastodon으로 답글을 달았는데, 해당 답글이 Discourse에 표시되지 않습니다. 이는 버그인가요, 아니면 아직 해당 기능이 구현되지 않은 것인가요? 혹은 아예 구현 계획이 없는 건가요?

버그이거나 다른 문제인 것 같습니다. 방금 토론에서 해당 주제가 마스토돈(Mastodon)에 게시되었고, 거기서 댓글을 받았으며, 토론에 답변을 남겼더니 마스토돈에서도 그 답변이 보였습니다.

기본적인 질문이지만: 최신 버전을 사용하고 계신가요?

1개의 좋아요

네, 플러그인을 새로 설치했지만, 아예 작동하지 않아 이 포크(PR 대기 중)를 사용해야 했습니다: GitHub - kuba-orlik/discourse-activity-pub: Adds ActivityPub support to Discourse. · GitHub

PR: Fix wrong inbox/outbox URLs - Pull Request #193 - discourse/discourse-activity-pub - GitHub

2개의 좋아요

안녕하세요, 중재와 관련이 있지만 정확히 답변을 찾지 못한 몇 가지 질문을 도와주실 수 있을까요?

  • 게시물이 연동(federated)된 후에도 로컬 관리자가 중재(편집, 숨김 처리, 삭제 등)할 수 있나요?
  • 게시물이 원본 인스턴스에서 편집되면, 연동된 인스턴스에서도 자동으로 업데이트되나요?
  • 중재자가 플래그 옵션이나 메시지/채팅을 통해 연동된 사용자에게 연락을 시도할 수 있나요? 아니면 원격 게시 작성자는 로컬 인스턴스의 실제 사용자가 아니기 때문에 연락이 불가능한 건가요?
  • 두 개의 연동된 인스턴스에서 동일한 사용자 이름과 이메일 주소를 가진 계정이 있다면, 각 인스턴스에서 여전히 서로 다른 두 개의 계정으로 간주되는 것이 맞나요? 이를 "병합"할 방법은 없나요?
  1. 네
  2. 네 (또는 그래야 합니다)
  3. 아니요, 하지만 문제가 있는 액터를 삭제할 수는 있습니다 (Mastodon에서는 다른 사용자가 보고할 수 있지만, 실제로 어떻게 처리되는지는 해당 인스턴스의 관리자에 따라 달라집니다)
  4. Discourse는 ActivityPub를 통해 이메일을 확인하지 않습니다. 대신 icaria@… 형식의 여러 계정이 존재할 수 있으며, 여기서 '도메인 부분’인 인스턴스 이름이 달라질 수 있습니다. 이 모든 계정은 여전히 동일한 사람이 소유하고 있습니다. 이러한 계정을 병합할 수 없는데, 그렇게 하면 실제로 서버를 차단하여 주제/게시물을 삭제해야 하기 때문입니다.
1개의 좋아요

좋습니다. 저희 인스턴스에서 플러그인을 활성화하고, 태그에 연결된 액터를 생성했으며, 첫 게시물을 Fediverse로 연동했습니다. 정말 기대되고 인상적입니다.

몇 가지 질문이 있습니다. (기능이 부족한 부분에 대한 제안일 수도 있지만, 아직 어떤 기능이 있는지 파악하는 중입니다.)

연동된 토픽을 보는 Discourse 사용자의 입장에서, 해당 게시물(메시지)에 대한 Mastodon 링크를 쉽게 얻어 그곳에서 부스트(재공유)할 수 있는 방법이 있을까요? 토픽에 추가된 작은 로그에서 찾지 못했습니다:

Discourse에서 온 투트(toot)를 보는 Mastodon 사용자의 입장에서, 팔로우할 액터의 Mastodon 계정을 쉽게 찾을 수 있는 방법이 있을까요? 게시자의 계정은 볼 수 있지만, 액터의 계정은 볼 수 없습니다. 포럼으로 연결되는 링크를 따라가도 액터를 찾는 방법을 유추할 수 있는 방법을 찾지 못했습니다.

왜 플러그인이 모든 답글을 부스트(boost)하는 것일까요? 그냥 답글로 두어 전형적인 “조용한 공개”(quiet public) 답글처럼 두면 되지 않나요? 이러한 부스트는 Mastodon에서 해당 액터를 팔로우하는 사람들에게 많은 노이즈를 생성합니다.

Mastodon 사용자가 새 게시물(답글이 아닌)을 작성하면서 액터의 계정이나 Discourse 사용자의 계정을 멘션할 때 무엇이 일어나야 합니까?

마지막으로, 이것은 정상적으로 보이지 않으며, 우리는 그걸 꽤 많이 받고 있습니다(몇 시간 만에 백 건 이상)

Job exception: stack level too deep

activesupport-7.2.2.1/lib/active_support/core_ext/object/blank.rb:166:in `present?' 
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/json_ld.rb:57:in `base_object_id' 
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/json_ld.rb:58:in `base_object_id' 

(snip, dozens of these)

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/json_ld.rb:58:in `base_object_id'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_process.rb:25:in `process_id'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_process.rb:8:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
sidekiq-7.3.9/lib/sidekiq/processor.rb:220:in `execute_job'
sidekiq-7.3.9/lib/sidekiq/processor.rb:185:in `block (4 levels) in process'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:180:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sidekiq-7.3.9/lib/sidekiq/job/interrupt_handler.rb:9:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:26:in `track'
sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:134:in `call'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:173:in `invoke'
sidekiq-7.3.9/lib/sidekiq/processor.rb:184:in `block (3 levels) in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:145:in `block (6 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_retry.rb:118:in `local'
sidekiq-7.3.9/lib/sidekiq/processor.rb:144:in `block (5 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/config.rb:39:in `block in <class:Config>'
sidekiq-7.3.9/lib/sidekiq/processor.rb:139:in `block (4 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/processor.rb:281:in `stats'
sidekiq-7.3.9/lib/sidekiq/processor.rb:134:in `block (3 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_logger.rb:15:in `call'
sidekiq-7.3.9/lib/sidekiq/processor.rb:133:in `block (2 levels) in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_retry.rb:85:in `global'
sidekiq-7.3.9/lib/sidekiq/processor.rb:132:in `block in dispatch'
sidekiq-7.3.9/lib/sidekiq/job_logger.rb:40:in `prepare'
sidekiq-7.3.9/lib/sidekiq/processor.rb:131:in `dispatch'
sidekiq-7.3.9/lib/sidekiq/processor.rb:183:in `block (2 levels) in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `handle_interrupt'
sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `block in process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `handle_interrupt'
sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `process'
sidekiq-7.3.9/lib/sidekiq/processor.rb:86:in `process_one'
sidekiq-7.3.9/lib/sidekiq/processor.rb:76:in `run'
sidekiq-7.3.9/lib/sidekiq/component.rb:10:in `watchdog'
sidekiq-7.3.9/lib/sidekiq/component.rb:19:in `block in safe_thread'

해당 스크린샷의 “Note” 라벨을 클릭하면 Discourse의 Note 객체로 가는 링크를 얻을 수 있지만, 이것이 원하시는 내용인지 확신이 서지 않습니다. 기대하는 동작이 무엇인지 조금 더 설명해 주시겠어요? 혹시 원하시는 작업을 보여주는 작은 사용자 스토리를 공유해 주셔도 좋습니다.

Discourse 사용자를 말씀하시는 건가요? 현재 Discourse 사용자를 팔로우할 수 없습니다.

여기서 기대하는 동작이 무엇인지 더 자세히 설명해 주실 수 있을까요? 사용자 스토리를 통해 설명해 주셔도 좋습니다.

이것은 이 PR이 병합될 때 처리되어야 합니다.

1개의 좋아요

정말 그런가? 아니면 이전의 Job exception: stack level too deep 질문들과 기본적으로 같은 건가?

1개의 좋아요

맞습니다! 이전 보고서를 놓치고 있었습니다. 곧 PR를 올릴 예정입니다.

1개의 좋아요

자주 있는 일이죠, 할 일이 너무 많아서 :joy:

감사합니다.

1개의 좋아요

물론입니다!

디스코urs 사용자인 동시에 마스토돈 계정도 가진 사용자로서, 제 디스코urs에서 새로운 연동 토픽을 발견했을 때, 제 마스토돈 계정으로 이를 빠르게 부스트(재공유)하고 싶습니다. 이렇게 하면 제 마스토돈 팔로워들이 이를 알게 되고, 그들의 마스토돈 계정으로 답글을 남길 수 있으며, 결과적으로 디스코urs의 해당 토픽에 많은 연동 피드백이 모이게 됩니다. (또는 포럼에 대해 알지 못했던 몇몇 사용자가 이 결과로 디스코urs에 가입할 수도 있겠죠!)

이 작업을 수행하려면 사용자는 마스토돈 클라이언트의 검색창에 붙여넣을 수 있는 URL을 쉽게 찾아야 합니다. 이 URL은 디스코urs 게시글에 해당하는 연동 투트(메시지)를 제공해야 합니다.

현재 디스코urs 인터페이스에서 이 URL을 찾을 수 없습니다. 제가 지금까지 발견한 디스코urs에서 연동 게시글을 부스트하는 가장 쉬운 방법은 이미 해당 디스코urs 액터를 팔로우하고 있고, 해당 게시글이 제 마스토돈 타임라인에 이미 올라와 있는 상태인 것입니다. 이는 이미 액터를 팔로우하고 있는 사람들에게는 괜찮지만, 아직 액터를 팔로우하지 않는 디스코urs 사용자들에게는 그렇지 않습니다.

문제를 설명하는 데 도움이 되었기를 바라며, 상황을 더 혼란스럽게 만들지 않았기를 바랍니다. :wink: 현재 동작 방식을 더 잘 이해한 후에, 지속적 부스트에 대한 사용자 스토리는 나중에 공유하겠습니다.

1개의 좋아요

제가 잘 이해했다면, 그 방식으로 마스토돈(Mastodon)에서 거의 아무것도 찾을 수 없다는 뜻이네요.

제게는 이런 유형의 문제가 대화 자체에서 발생합니다. 모든 것이 리부스트(reboost)이기 때문에 전체 주제를 파악하려면 먼저 원본 게시물을 찾아야 하는데, 리부스트의 댓글은 팔로워에게 표시되지 않기 때문입니다. 그래서 그 대화가 사라져 버리는 겁니다.

또한 디스커스(Discourse)의 댓글을 리부스트하면 팔로우할 수 없는 "user-actor"로 표시됩니다.

이것과 확실히 부족한 (해시)태그가 현재 가장 큰 문제점입니다 — 적어도 제게는요.

1개의 좋아요

음, 원하는 링크를 찾았네요… 단, 상단 게시글이 아니라 답글 쪽에 있더라고요:

답글에서는 이 스크린샷에서 “22h” 옆, 오른쪽 상단 모서리에 있는 연방(federation) 아이콘입니다.

이걸 클릭하면 다음과 같은 대화상자가 나타납니다:

그리고 실제로는 Mastodon의 해당 답글로 연결됩니다: icaria36 🎶: "@icaria36@the.socialmusic.network This is a test …" - SoNoMu

상단 게시글에 해당하는 아이콘과 링크가 빠져 있습니다. 분명 어디선가 눈에 띄는 곳에 있을 텐데 찾지를 못하겠습니다. :nerd_face:

수정:

아, 잠깐, 그 링크는 Mastodon에서 온 게시글에만 표시되고 Discourse 네이티브 게시글에는 표시되지 않네요. 방금 깨달은 건데, 그 작은 아이콘은 이를 구별하기 위해 파란색과 초록색 버전이 있다는 것입니다. 파란색과 초록색은 이렇게 작은 아이콘을 구별하기에는 좋은 색상 조합이 아닙니다. 제 데스크톱 모니터는 꽤 괜찮은 편이고, 색맹도 아닌데, 이렇게 작은 아이콘의 차이를 방금 자세히 살펴보고 나서야 알아차렸습니다.

제게는 또 다른 큰 문제가 있습니다. 그것은…

연방화된 Discourse 게시물에 답글을 남기는 Mastodon 사용자로, 누군가가 제 게시물에 답글을 남기거나 Discourse에서 나를 멘션할 때 Mastodon 알림을 받기를 원합니다.

현재로선, Discourse 사용자의 Mastodon 사용자 게시물에 대한 답글은 답글을 받은 Mastodon 사용자가 놓칠 가능성이 매우 높습니다. 답글을 받거나 멘션되었을 때조차 알림을 받지 못하기 때문입니다. 이는 이미 Mastodon에서 어렵기 그지없는 실제 대화를 더 어렵게 만듭니다 — 누군가가 내 댓글에 답글을 남겼는지도 알 수 없으니까요. 다시 한번, 제가 뭘 놓치고 있는 게 아니라면 말입니다.

하지만 이 모든 것을 단순히 개선에 대한 피드백으로 받아주십시오. 이 플러그인은 이미 인상적이며, 우리는 이를 유지할 것입니다. 또한 문제 보고와 새로운 기능 테스트를 돕는 데 기꺼이 참여하겠습니다. @angus 님과 팀에 진심으로 감사드립니다!

1개의 좋아요

"게시(Publish)"와 "전송(Deliver)"의 차이점은 무엇인가요? 이미 게시되었지만 게시글이 아직 전송되지 않은 상태의 “토픽 관리(Topic Admin)” 스크린샷입니다. 해당 게시글은 이미 Mastodon에 올바르게 연동(federated)되어 있는데, 관리자가 "게시글 #1 전송"을 클릭하면 어떤 일이 일어나는지 궁금합니다.

ActivityPub 카테고리나 태그(관련 설정이 있는 경우)에 게시물을 올리면 게시(Publish)와 전달(Deliver)이 모두 자동으로 수행됩니다. 두 동작의 차이와 이러한 관리자 제어 기능은 유연성과 특정 사용 사례를 위해 존재합니다.

Publish = 게시물이 페디버스(fediverse)에서 이용 가능해집니다.
Deliver = 해당 액터(actor)의 팔로워에게 게시물이 전달됩니다.

이 동작은 이미 전달된 경우를 포함하여 언제든지 동일한 게시물을 다시 전달할 수 있게 해줍니다. 이를 위한 다양한 사용 사례가 있습니다. 예를 들어:

  1. 처음에 게시물을 게시할 때 팔로워에게 스팸이 되지 않도록 하기 위해 주제 내 모든 게시물을 팔로워에게 전달하지 않았습니다. 이 경우 개별 게시물을 전달할 수 있습니다.
  2. 게시물이 액터를 팔로우한 새로운 팔로워가 생기기 전에 게시된 경우입니다. 이 경우 동일한 게시물을 다시 전달할 수 있습니다.

해당 주제의 "Topic Info(주제 정보)"를 클릭하면, 게시물이 이미 Mastodon에서 연방화(federated)되어 있다면 게시물이 이미 전달되었음을 확인할 수 있습니다.

2개의 좋아요

자, 이제 문제를 매우 잘 설명하는 실제 사용자의 실제 사용자 스토리를 갖게 되었습니다.

특정 연동된 게시물을 Fedi에 공유하고 싶은데, 어떻게 하는지 아는 분 있나요? 시도해 본 것들:

  • @fediverse@the.socialmusic.network의 프로필을 확인 - 게시물이 표시되지 않음
  • 제 socialmusic 프로필을 확인 - 게시물이 표시되지 않음
  • Discourse 포럼에서 “공유” 버튼을 찾음: URL이 Masto 검색에서 인식되지 않음
2개의 좋아요

저였어요! 흥미로운 플러그인을 만들어 주셔서 감사합니다. 우리 포럼에서 Federation을 가지고 놀고 있습니다.

몇 가지 질문이 있었는데, 이전에 다뤄진 내용이라면 죄송합니다 (포럼을 검색해 보았지만 관련 내용을 찾지 못했습니다).

  • Mastodon/기타 플랫폼 측에서 비공개, 팔로워 전용, 목록에 표시되지 않는(unlisted) 게시물은 어떻게 처리되나요?
  • 프라이버시를 중시하는 사용자의 경우, 예를 들어 Gotosocial에서 계정을 검색 엔진과 디렉터리에서 발견 가능하도록 설정하지 않은 사용자는, 그들의 연동(federated) 답글은 어떻게 처리되나요?

특히 동의(consent) 문제에 대해 생각하고 있습니다: 누군가가 자신의 게시물이 공개 포럼에서 검색되기를 원하지 않을 수 있습니다. 그들이 답글을 달고 있는 주제가 Discourse에서 공개적으로 표시되고 있다는 사실을 모를 수 있습니다. Discourse 사용자의 게시물은 잘 표시되어 있지만, 같은 스레드에서 AP 사용자에게 답글을 달 때 그것이 원래 Discourse 주제였다는 것을 놓칠 수 있습니다.

3개의 좋아요