Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MSC2997: Add t-shirt #2997

Open
wants to merge 4 commits into
base: old_master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions proposals/2997-tshift.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# MSC2997: "There's an MSC for that!"
Sorunome marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

@MTRNord MTRNord Oct 1, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly for visual reference based on the current MSC state. :) Not finished in the slightest, and more a 15m photoshop adventure than anything else. But maybe it helps future readers to visualize some ideas on this MSC.

Fonts used are roboto mono regular and "Maybe Next" Regular.

Front


Throughout fosdem 2021 multiple different features or ideas around matrix were discussed. As it turns
out, most of them already had an MSC for that! One feature that was keep being brought up, was to get
"There's an MSC for that!" onto a t-shirt. Unfortunately, there wasn't an MSC for that yet.

## Proposal

Get a t-shirt with "There's an MSC for that!" written on it. This T-shirt shall include a code block
typeset in a monospace block that should read
Comment on lines +9 to +10

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Get a t-shirt with "There's an MSC for that!" written on it. This T-shirt shall include a code block
typeset in a monospace block that should read
Get a t-shirt. This T-shirt shall include a code block typeset in a monospace block that should read

```json
{
"type": "m.t-shirt",
"content": {
"body": "There's an MSC for that!"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should body in this case actually be the user? T-shirts are generally most useful on the user's body

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As @uhoreg pointed out here it might be a plan that, moving forward, any event should have a fallback body to display.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My suggestion is simply that the t-shirt will be more useful if the body in question were to be the user's body instead of some arbitrary text.

Properly serialising the end user may however prove to be a significant implementation challenge

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oooh, do you mean like this?

{
  "type": "m.t-shirt",
  "content": {
    "body": "@sorunome:sorunome.de"
  }
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a medical stuff, so it's probably depending on us to spec HL7 FHIR resource state events. ^_^

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should make it a state event, then? Since state_keys starting with @ are preserved so that they only can be set by the user themself and not by others.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes! And the content is quite obvious.
https://www.hl7.org/fhir/genomics.html

Copy link
Contributor

@kate-shine kate-shine Feb 18, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the other hand, I'm quite worried that the serialization of user would require a space of t-shirt-as-rooms

}
}
Comment on lines +12 to +17
Copy link
Contributor

@HarHarLinks HarHarLinks Aug 15, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A POC implementation was done for CCCamp23!

The following constitutes the backend implementation

Suggested change
{
"type": "m.t-shirt",
"content": {
"body": "There's an MSC for that!"
}
}
{
"type": "m.t-shirt",
"content": {
"body": "There's an MSC for that!",
"background": "$bgcolor",
"text-color": "$fgcolor",
"size": "$size",
"fitted": $fitted,
"frontend.logo": $logo,
"backend.highlight": $highlight
},
"origin_server_ts": $timestamp
}

where

  • bgcolor is the shirt's color, in this case #000000
  • fgcolor is the frontend print's color, in this case #FFFFFF
  • size is the T-shirt size in T-Shirt sizes, we used S, M, L, XL, XXL, XXXL
  • optionally, fitted indicates whether it's a fitted T-shirt (boolean)
  • logo is whether the frontend depicts the [matrix] logo (boolean), in this case true
  • highlight is whether the backend implementation uses syntax highlighting (boolean), in this case true
  • timestamp is the creation or event start, in this case 1692049320000

Full event as implemented by us:

{
  "type": "de.sorunome.t-shirt",
  "org.matrix.msc2997.content": {
    "body": "There's an MSC for that!",
    "background": "#000000",
    "text-color": "#FFFFFF",
    "size": "M",
    "fitted": true,
    "frontend.logo": true,
    "backend.highlight": true
  },
  "origin_server_ts": 1692049320000
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(gratz @Sorunome, you're eternalised in a couple T-shirts now.... 🎉)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(implementation accepted - MSC description updated)

Copy link
Contributor

@HarHarLinks HarHarLinks Sep 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We iterated for Matrix Community Summit 2023!
It is based on the extensible events for media and by extension, files.
content contains 3 blocks:

  • Like the media extensible events, there is the m.text fallback block in case your t-shirt manufacturer is unable to reproduce the graphic given by the file.
  • The m.file block holds some common properties
  • The m.t-shirt block (unstable prefix org.matrix.msc2997.t-shirt) specifies some t-shirt specific details

Some details of the event metadata are not shown in the backend for comprehensiveness.

Suggested change
{
"type": "m.t-shirt",
"content": {
"body": "There's an MSC for that!"
}
}
{
"type": "de.sorunome.t-shirt",
"sender": "$sender_mxid",
"content": {
"m.text": [
{ "body": "There's an MSC for that!" }
],
"m.file": {
"url": "mxc://$some_url",
"name": "$url_label",
"mimetype": "$mime",
"size": "$size"
},
"org.matrix.msc2997.t-shirt": {
"background": "$bgcolor",
"text-color": "$fgcolor",
"fitted": $fitted,
"frontend.logo": $logo
"backend.highlight": $highlight
}
},
"origin_server_ts": $event_start
}

where:

  • sender_mxid per https://spec.matrix.org/latest/client-server-api/#room-event-format
  • some_url a url in the format of https://spec.matrix.org/latest/client-server-api/#matrix-content-mxc-uris that coincidentally also works when using it with the HTTP(s) protocol instead of MXC - we used mxc://summit2023.matrixmeetup.de/conference
  • mime the material of the shirt, in this case t-shirt/cotton
  • size is the T-shirt size in T-Shirt sizes, we used S, M, L, XL, XXL, up to 5XL
  • bgcolor is the shirt's color, in this case #000000
  • fgcolor is the frontend print's color, in this case #FFFFFF (only relevant if the fallback text is used)
  • optionally, fitted indicates whether it's a fitted T-shirt (boolean) - our implementation lists it explicitly even if false
  • logo is whether the frontend depicts the graphic indicated by the m.file.url (boolean), in this case true
  • highlight is whether the backend implementation uses syntax highlighting (boolean), in this case true
  • timestamp is the creation or event start, in this case 1695283200000

Full event as implemented by us:

{
  "type": "de.sorunome.t-shirt",
  "sender": "@me:homeserver.tld",
  "content": {
    "m.text": [
      { "body": "There's an MSC for that!" }
    ],
    "m.file": {
      "url": "mxc://matrixmeetup.de/summit2023",
      "name": "Matrix Community Summit 2023",
      "mimetype": "t-shirt/cotton",
      "size": "L"
    },
    "org.matrix.msc2997.t-shirt": {
      "background": "#000000",
      "text-color": "#FFFFFF",
      "fitted": true,
      "frontend.logo": true,
      "backend.highlight": true
    }
  },
  "origin_server_ts": 1695283200000
}

```
## Potential issues

Once the spec is complete and there are no more MSCs the t-shirt will be obsolete.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Once the spec is complete and there are no more MSCs the t-shirt will be obsolete.
Once the spec is complete and there are no more MSCs the t-shirt will be obsolete. That's unlikely to happen anytime soon though.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Once the spec is complete and there are no more MSCs the t-shirt will be obsolete.
Once the spec is complete and there are no more MSCs the t-shirt will be obsolete.
That is never going to happen, though.


## Alternatives

Instead of a shirt, a sweater or thelike could be used.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems shirts have not been considered which I find quite sad since I am a regular user of them


Instead of just printing normal event contents on the shirt we might want to consider using
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the increased flexibility for metadata would be useful, specific care should be given to the sizing implementation. Smaller users may have issues with the fit of a room based t-shirt

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It could allow us to have not only "One size fits all" t-shirts, but also "One size fits many" - at once!

t-shirts-as-rooms. This would allow greater flexibility, as we could easily add any amount of metadata
to the t-shirt in the future, such as the amount of times it has been washed or what temperature to
iron it at.

## Security considerations

Unfortunately not all people are able to wear t-shirts, so a solution for those would have to be
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about wristbands with text for them?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a fair point, though I'm not sure if it would mitigate the security that a t-shirt provides. For one, the surface area of a t-shirt far outweighs that of a wristband. Wristbands can also be made from a variety of materials, some even opting for mere paper.

Not to mention the lack of area for displaying the intended messaging of the MSC.

I think if wristbands is taken as an approach, care should be taken to ensure the security and practicality of the device.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about a hat? Or similar headware? It is more visible than a wristband and everyone that is affected by MSC tends to have a head. Or do we also want to integrate aliens via a bridge end expect headless users?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about capes? Almost everyone has a neck and you can make them pretty big to put arbitrary messages on them. Would need to come with a disclaimer not to wear them next to aircrafts though.

found.

## Unstable prefix

In places where this proposal mentions `t-shirt`, `de.sorunome.t-shirt` is to be used instead