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

Tiny notes (210 max chars) #1710

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

vitorpamplona
Copy link
Collaborator

This is my first stab at making a VERY opinionated kind whose Clients only render these types of events.

Read here

@pablof7z
Copy link
Member

👀👀👀

Markup languages such as markdown MUST NOT be used.

Are you ripping out markdown from amethyst kind:1s? 🍿

@vitorpamplona
Copy link
Collaborator Author

vitorpamplona commented Jan 21, 2025

Sir, this is kind 25. Kind 1s don't change. :)


Reactions MUST use [NIP-25](25.md) with a `k` tag to `25`. Clients MUST only download and display reactions that include the `k` tag in notifications.

Zap Events MUST also include the `k` tag of the source event. Clients MUST only render zaps that include the `k` tag in notifications.
Copy link
Member

Choose a reason for hiding this comment

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

We need to update NIP-57 to allow for this; many zappers don't accept the 9734 if it has a tag they don't like, I ended up having to remove k tag from Olas zaps.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

We will need to make this work. Otherwise all clients will see all the other clients notifications and it will just confuse users.

@pablof7z
Copy link
Member

Sir, this is kind 25. Kind 1s don't change. :)

Exactly

https://github.com/nostr-protocol/nips/blob/master/10.md?plain=1#L19

@pablof7z
Copy link
Member

I think entities, like mentions and links should count as 1 character (that's what my 140-chars relay does)

@vitorpamplona
Copy link
Collaborator Author

I think entities, like mentions and links should count as 1 character (that's what my 140-chars relay does)

Could be as well, but I still want the pre-cached names and quotes in there. The Client should be able to layout the post without any other event and that includes the @NAMEs and quoted events.

@fiatjaf
Copy link
Member

fiatjaf commented Jan 21, 2025

What happens if I publish a kind:25 with more than 140 characters? Do I go to jail or what?

@vitorpamplona
Copy link
Collaborator Author

vitorpamplona commented Jan 21, 2025

What happens if I publish a kind:25 with more than 140 characters? Do I go to jail or what?

Receiving clients are going to crop it. And supporting relays should reject it. Your message ends up not showing up anywhere that matters (the clients that support this kind and care about it)

@staab
Copy link
Member

staab commented Jan 21, 2025

This might be a little too opinionated, particularly with regard to how things should be rendered. But I like the approach. I do think character counts for entities/images should be defined.

@mikedilger
Copy link
Contributor

FYI: Twitter had a 140 character limit because the tech initially was for SMS. It wasn't because 140 is somehow a magically good cutoff.

I think this idea is silly and virtually pointless but if people start using it I will be compelled to support these in gossip, bloating things further.

@kehiy
Copy link
Contributor

kehiy commented Jan 21, 2025

what is the usecase?

@vitorpamplona
Copy link
Collaborator Author

There is a passionate amount of users on Nostr who want a character limit on Kind 1.

I don't think we should change Kind 1, but we can create a kind just for them.

I just used that opportunity to figure out a different way to define kinds to be more prescriptive on what Clients supporting that kind must and must not do so that the experience is elevated on all supporting clients.

@fiatjaf
Copy link
Member

fiatjaf commented Jan 21, 2025

I agree with the idea of creating different kinds and being more strict about them, but I think "tiny notes" is too close to kind 1 to justify a change. Kind 1 is already "microblogging". Unlike with kinds 20, 21 and 22 there is no reason to believe these tiny notes will have any content that wouldn't fit naturally in kind 1s.

@vitorpamplona
Copy link
Collaborator Author

That's kinda the point. These opinionated kinds can serve as specific implementations of generic kinds like kind 1, 20, 21 and 22 for those who want to build a different user experience with pretty much the same type of payload. I think this is just the beginning. There are a lot of specific user experiences that cannot be built on generic kinds because there is too much trash on that kind that breaks the desired experience (tiny notes in this case). As we move into the future with better and better clients, there is a good probability we will see many (dozens) sub-types of kind 1s and others.

@kehiy
Copy link
Contributor

kehiy commented Jan 21, 2025

There is a passionate amount of users on Nostr who want a character limit on Kind 1.

I don't think we should change Kind 1, but we can create a kind just for them.

I just used that opportunity to figure out a different way to define kinds to be more prescriptive on what Clients supporting that kind must and must not do so that the experience is elevated on all supporting clients.

a client can put limitations on kind 1, show kind 1s with limited chars, or just summarize them, and configure their default relay to accept 140 char kind 1s only. then it would be the same thing + more clients wil support it.

@kehiy
Copy link
Contributor

kehiy commented Jan 21, 2025

also, what of i want to build a client with 150 char limit? i can't create a nip for it.

@vitorpamplona
Copy link
Collaborator Author

a client can put limitations on kind 1, show kind 1s with limited chars, or just summarize them, and configure their default relay to accept 140 char kind 1s only. then it would be the same thing + more clients wil support it.

Not easily. The client has to download everything and then filter only the small new threads. Since most kind1 are replies and bigger, the client will have to download a TON of data before seeing the first useful events.

Having to use specific relays to filter down Kind1 content sucks.

Also, the whole point is to not mix with the regular kind 1 feed. Implementers of this kind don't want to see small kind1s just because they are small and miss all the rest the author is writing. They want to see posts from people that WANT to post only small tweets. It's more consistent to just migrate to a new kind and build a community over there than trying to figure where each post will show up based on size and the amount of imetas that were added.

@vitorpamplona
Copy link
Collaborator Author

also, what of i want to build a client with 150 char limit? i can't create a nip for it.

You can. And you most definitely will if you think 150 is a good number and different than anything else. That's the beauty of Nostr, people will do what they need to do to satisfy their users. There is nothing we can do about it.

@vitorpamplona
Copy link
Collaborator Author

vitorpamplona commented Jan 21, 2025

In a more general point, we started by hosting images and videos with just kind1. Then we realized that it was dumb and created NIP-94 for a feed of external files. Then we realized NIP-94 is too general and created Video event kinds. Then pictures were also migrated to Picture Kinds. #1704 made me realize even the Video kinds are now too general.

We are almost always moving to new kinds that are more specialized versions of the older kinds. And this will keep going.

@kehiy
Copy link
Contributor

kehiy commented Jan 21, 2025

also, what of i want to build a client with 150 char limit? i can't create a nip for it.

You can. And you most definitely will if you think 150 is a good number and different than anything else. That's the beauty of Nostr, people will do what they need to do to satisfy their users. There is nothing we can do about it.

i agree that this is the good point about nostr. and we should not stop it. but when we try to make it an standard its a little different. what do you want from an nip? before i posted a comment on another pr here and talked about it. i think making more standards is not a good idea. at the end of the they we would have a lot of nips supported by small fraction of clients and limited usage. but as i said before, all of these prs are ok since we are calling them implementation possibilities.

maybe i create a restricted list of nips somewhere and added some tags like whatever this is for clients or relays. this would be easy and useful for devs who are implementing something specific.

@kehiy
Copy link
Contributor

kehiy commented Jan 21, 2025

In a more general point, we started by hosting images and videos with just kind1. Then we realized that it was dumb and created NIP-94 for a feed of external files. Then we realized NIP-94 is too general and created Video event kinds. Then pictures were also migrated to Picture Kinds. #1704 made me realize even the Video kinds are now too general.

check: #995 (comment)

We are almost always moving to new kinds that are more specialized versions of the older kinds. And this will keep going.

don't you think it would keep stuff broken/incompatible for a long time or even forever?

@vitorpamplona
Copy link
Collaborator Author

i think making more standards is not a good idea.

That's a fallacy. It's better to do LOTs of specific NIPs than a few super generic ones. NIPs are not standards. They just describe what's out there. Because people can do whatever they want, it is very likely that we will have 1000s of NIPs describing exactly the same thing with small differences. And it will all be good because each Client is just concerned with their own domain. They don't even need to read the 1000s of NIPs to code.

don't you think it would keep stuff broken/incompatible for a long time or even forever?

That's just the way things are. I still process the old [index] way of citing users and notes on Kind 1 just because there are millions of notes that use that system. Old stuff will always be there. And that's why it breaks new user experiences.

@mikedilger
Copy link
Contributor

In a more general point, we started by hosting images and videos with just kind1. Then we realized that it was dumb and created NIP-94 for a feed of external files. Then we realized NIP-94 is too general and created Video event kinds. Then pictures were also migrated to Picture Kinds. #1704 made me realize even the Video kinds are now too general.

We are almost always moving to new kinds that are more specialized versions of the older kinds. And this will keep going.

What if I want to post a video and a short blurb about the video? and maybe a picture, then some more text, then another picture, and with a subject and with with PoW? Composition lets us do that, combinations that nobody could reasonably write a NIP for. By moving everything into separate kinds we lose composition.

@vitorpamplona
Copy link
Collaborator Author

Kind of. As you can see, this PR uses a lot of compositions from other nips.

To me there are 2 types of NIPs:

  1. generic non-root objects like zaps, reactions, reports, comments, custom emojis, edits, drafts, multiple generic tags like subject, labels, encryptions, etc.. those things offer the composition blocks to other nips.
  2. Root objects on feeds like kind 1, 20 and video minds, nip 28 and 29, communities, spreadsheets, medical data, and so many others. These don't compose well because they are designed for a specific experience.

The root objects are always specializing to get closer to a desired user experience. And the non-root objects move to the generalized/ compostable direction.

@1l0
Copy link

1l0 commented Jan 22, 2025

Love it, especially the "Cached Information" part. It feels like kind-1 2.0. I really appreciate the effort from the big client dev since it’s too late to fix the broken kind-1 (kind-1 replies are actually broken, though). This brings a refreshing perspective for client developers who have reluctantly implemented the broken parts and pretended that were great for users.

@chr15m
Copy link

chr15m commented Jan 22, 2025

This should be configurable via a tag like ["l", "140"]. That way a client can be built for 140 but you could also build clients for e.g. 280 using the same kind, or more complicated things like ["mod", "ALLCAPS"]' for a social network where only Odell is allowed to post. So it's like kind 1 but with arbitrary restrictions different clients can implement for their use cases. Enforcing at the relay level seems like a mistake. Keep relays dumb.

@AsaiToshiya AsaiToshiya changed the title Tiny notes (140 max chars) Tiny notes (210 max chars) Jan 22, 2025
@AsaiToshiya
Copy link
Collaborator

The title of the PR has been changed to avoid unnecessary confusion.

@vitorpamplona
Copy link
Collaborator Author

This should be configurable via a tag like ["l", "140"]. That way a client can be built for 140 but you could also build clients for e.g. 280 using the same kind, or more complicated things like ["mod", "ALLCAPS"]' for a social network where only Odell is allowed to post. So it's like kind 1 but with arbitrary restrictions different clients can implement for their use cases.

I don't think event kinds should be general with tags to make them specific. It doesn't work. It tries to put too many different communities into the same bucket and people start asking why some things show in client A but not in client B while both support the same NIP. It's terrible for user experience.

Each kind should have its own culture around it. With many apps that support that specific culture. If you want a different culture, like ALL CAPS, then build a different kind so that apps can be developed JUST FOR THAT.

Generalization is the killer of innovation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants