Lee Dogeon

@moreal@hackers.pub · 24 following · 25 followers

어느 한 개발자입니다.

GitHub
@moreal

Fedify CLI로 Content Warnings 이해하기

Lee Dogeon @moreal@hackers.pub

Warning

제목이 적절한지 잘 모르겠다. 본문은 Mastodon에 있는 Content Warnings이라는 것이 ActivityPub Activity 객체에서 어떻게 묘사되는지 확인하는 내용이다. 정확한 내용이 아닐 수 있다.

서문 (동기)

Mastodon에서 글을 쓸 때 Content Warnings을 자주 쓰는데:

  1. 내가 쓰는 글이 어떤 사람에게는 기분 상할 글일 수도 있을까 하는 걱정도 있고,
  2. 혼자 말을 자주 적는데 소음같이 느껴져서 보고 싶지 않을 사람도 있을까 싶어서 "혼자 말" 같은 경고문을 달고 적어놓는다.

요즘은 "혼자 말" 대신 요약을 좀 적어놓는 편인 것 같다. 그런데 Mastodon에서 글을 적으면 몇 글자 더 적을 수 있는지, 글자 수 제한을 표시해준다. Content Warnings을 적는데도 글자 수 제한이 줄어드는 것을 보고 본문과 Content Warnings가 같은 필드에 있는 걸까 그런 궁금증이 들었다. 어떻게 생겼는지 보고 글을 적고 있는 지금 다시 생각하면, 조금 잘못된(?) 상상이었던 것 같지만 암튼 그랬다.

본문

Activity 객체 읽어오기

내가 적은 글의 Activity 객체 버전을 확인해보려면 어떻게 해야 하지 싶던 중, @hongminhee 님이 만드신 Fedify에서 제공하는 CLI 도구에 관련 기능이 있었던 것 같아 살펴보니 fedify lookup이라는 명령어가 있었다.

사용법은 아래와 같이 인자로 글 URL을 넘겨주면 됐다.

fedify lookup https://social.silicon.moe/@moreal/114252336335817713

그러면 아래와 같이 Activity 객체 내용을 보여준다:

$ fedify lookup https://social.silicon.moe/@moreal/114252336335817713
✔ Fetched object: https://social.silicon.moe/@moreal/114252336335817713.
Note {
  id: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713",
  attribution: URL "https://social.silicon.moe/users/moreal",
  contents: [ "<p>본문</p>", <ko> "<p>본문</p>" ],
  published: 2025-03-30T16:31:40Z,
  replies: Collection {
    id: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/replies",
    first: CollectionPage {
      partOf: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/replies",
      next: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/replies?only_other_accounts=true&page=true"
    }
  },
  shares: Collection {
    id: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/shares",
    totalItems: 0
  },
  likes: Collection {
    id: URL "https://social.silicon.moe/users/moreal/statuses/114252336335817713/likes",
    totalItems: 0
  },
  summary: "Content Warning 테스트",
  url: URL "https://social.silicon.moe/@moreal/114252336335817713",
  to: URL "https://social.silicon.moe/users/moreal/followers",
  cc: URL "https://www.w3.org/ns/activitystreams#Public",
  sensitive: true
}
✔ Successfully fetched the object.

Activity 객체 이해하기

"Content Warnings"에 넣었던 Content Warning 테스트라는 문구는 summary 필드에 들어있었다.

summary 필드에 대해 살펴보기 위해서 ActivityPub 문서에 들어갔다. "Note"를 키워드로 검색해보니 아래 같은 예제를 발견했다:

{"@context": "https://www.w3.org/ns/activitystreams",
 "type": "Note",
 "to": ["https://chatty.example/ben/"],
 "attributedTo": "https://social.example/alyssa/",
 "content": "Say, did you finish reading that book I lent you?"}

예전에 Fedify에 기여할 때 기억으로는 Activity가 JSON-LD 포맷으로 표현되므로 스키마를 확인하고자 @context 필드의 링크로 들어갔다. 그렇게 타고 들어가서 Note의 정의를 발견했는데 Object를 상속하였고, 상속받은 것 외에 자신만의 필드는 없어 보였다.

링크를 또 타고 들어가 summary의 정의를 볼 수 있었다. 설명은 아래와 같다:

A natural language summarization of the object encoded as HTML. Multiple language tagged summaries MAY be provided.

HTML로 스타일링할 수도 있고, 여러 언어별로 요약을 제공할 수도 있다고 한다. 아래 JSON은 문서에 있는 예제인데, 영어(en)와 스페인어(es), 중국어 간체(zh-Hans) 언어마다 요약을 각각 제공하는 것으로 보인다.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "name": "Cane Sugar Processing",
  "type": "Note",
  "summaryMap": {
    "en": "A simple <em>note</em>",
    "es": "Una <em>nota</em> sencilla",
    "zh-Hans": "一段<em>简单的</em>笔记"
  }
}

결론

  • Content Warnings에 요약을 적는 건 적절한 용례이다! (?)
    • +) 댓글로 달아주셔서 알게된 놓친 부분인데, Content Warnings를 쓰면 as:sensitive 확장 속성도 같이 추가되어서 Mastodon에서 Content Warnings를 요약으로 쓰는 것이 마냥 맞는 용례는 아닌 것 같다.
  • 사용자가 주로 사용하는 언어로 작성하면, 애플리케이션 단에서 다른 요약들도 번역해서 자동으로 채워줄 수도 있겠다. (읽는 쪽에서 번역하는 게 나으려나)
Read more →
0

rel="me" 메모

Lee Dogeon @moreal@hackers.pub

서문 (동기)

아래와 같은 Hackers' Pub 글을 보았습니다:

이제 프로필의 링크에 인증 여부가 보이게 됩니다. 링크를 인증하기 위해서는, 링크된 페이지 측에서도 Hackers' Pub 프로필을 rel="me" 속성과 함께 링크해야 합니다. Mastodon이나 GitHub 같은 경우 프로필에 링크를 추가하면 rel="me" 속성이 추가되게 되어 있으니, Mastodon이나 GitHub 프로필 링크를 추가하면 인증은 자동으로 될 겁니다. 개인 웹사이트가 있으신 분들은 Hackers' Pub 프로필을 rel="me" 속성과 함께 링크하면 인증이 됩니다.

참고로 인증은 프로필 설정을 저장할 때 이뤄집니다. 이미 Mastodon이나 GitHub 프로필을 링크해 두신 분들은 인증 표시가 안 뜰 수도 있는데, 그럼 프로필 설정에 들어가셔서 저장 버튼을 한 번 눌러주시면 인증 버튼이 붙을 겁니다.

from https://hackers.pub/@hongminhee/0195ad00-50db-7bb1-b0a0-edaf9ce73515

그래서 Hackers' Pub 설정으로 들어가서 GitHub 링크를 추가하고 저장버튼을 눌러봤지만 체크 표시가 나타나지 않았습니다. rel="me"가 뭔지 잘 몰라서 https://github.com/moreal?rel=me 같이 추가해봤는데 이것도 아니라서 (아닐 것 같았지만) 찾아본 내용을 가볍게 메모로 남깁니다.

본문

rel="me"를 검색하니 MDN 문서가 반겨주었습니다. HTML <link rel="stylesheet" ... 할 때 rel 속성이었습니다. <link rel="me" 혹은 <a rel="me" 같은 느낌으로 사용할 수 있는 것 같았습니다.

https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/me

GitHub 프로필 설정에서 https://hackers.pub/@moreal 소셜 링크를 추가하면 아래처럼 링크 a 요소에 rel="me" 속성을 추가하여 줍니다.

<a rel="nofollow me" class="Link--primary wb-break-all" href="https://hackers.pub/@moreal">https://hackers.pub/@moreal</a>

이 값을 활용하여 인증 마크를 표시하는 것으로 보입니다. (Hackers' Pub 링크 인증 소스코드)

결론

GitHub 등에서 https://hackers.pub/@<id> 를 연관 링크로 추가하고 Hackers' Pub 프로필 설정에서 다시 저장 버튼을 누르면 체크 표시가 나타납니다!

여담

함께 rel 속성에 달려있는 nofollow 같은 값은 검색엔진에게 주는 힌트처럼 보입니다. 해당 링크와 연관이 있음을 보장하지 않음, 같은 의미 같습니다. 일단 지금 하려던것과 무관하니 더 찾아보지는 않았습니다.

https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel#nofollow

그리고 Hackers' Pub이 오픈소스라서 실제로 어떻게 인증마크를 표시하는지 확인할 수도 있었습니다!

Read more →
1