# follow_notify = gemini://foo/bar
to your feed’s metadata, so that clients who follow you can ping that URL every now and then? How would you even notice that, do you regularly read your gemini logs? 🤔
@aelaraji@aelaraji.com Nice hack! 👌
@bender@twtxt.net I doubt I’ll be able to watch it live 🤣 But by all means, please Yarns all the goodies 😅
@bender@twtxt.net Kind of mirrored the ssh
and ssh-keygen
utilities. No reason really.
$ echo 'hello world' | ./salty -i ./test_ed25519 --ssh-key --sign
@bender@twtxt.net Ahh yeah sorry about that 🤣 You were getting confused between salty.im and salty. The later of which salty.im actually uses and formed the basis of everything else. It’s a simple robust library and command-line tools with good test coverage. The lowest building block 😅
@movq@www.uninformativ.de That bad eh? 😅
For example:
$ echo 'hello world' | ./salty -i ./test.key -s | ./salty -i ./test.key -v
# signed by: kex1yfzzthmsdlqhgwzafy9zpjze6a0asxf6y552dp4yhvq66a4jje0qxqapvd
hello world
@bender@twtxt.net Yes of course it can 😅 Sorry I missed your question on IRC 😢
@mckinley@twtxt.net To answer some of your questions:
Are SSH signatures standardized and are there robust software libraries that can handle them? We’ll need a library in at least Python and Go to provide verified feed support with the currently used clients.
We already have this. Ed25519 libraries exist for all major languages. Aside from using ssh-keygen -Y sign
and ssh-keygen -Y verify
, you can also use the salty
CLI itself (https://git.mills.io/prologic/salty), and I’m sure there are other command-line tools that could be used too.
If we all implemented this, every twt hash would suddenly change and every conversation thread we’ve ever had would at least lose its opening post.
Yes. This would happen, so we’d have to make a decision around this, either a) a cut-off point or b) some way to progressively transition.
@bender@twtxt.net Holy shit that pod is still alive?! 🤔
url
field in the feed to define the URL for hashing. It should have been the last encountered one. Then, assuming append-style feeds, you could override the old URL with a new one from a certain point on:
@sorenpeter@darch.dk WebFinger requires additional setup that whilsts helps to solve the “identity” problem in an “abstract” way, that extra infra that needs to be setup a) isn’t trivial and b) hard to support on “shared hosting”.
Sharing hosting is also the reason why you can’t just use part of a URL really.
url
field in the feed to define the URL for hashing. It should have been the last encountered one. Then, assuming append-style feeds, you could override the old URL with a new one from a certain point on:
@movq@www.uninformativ.de Peobably not and I wouldn’t expect them to either 😅
But in all seriousness I’ve only ever wanted to improve Twtxt without sacrificing its simplicity too much.
@movq@www.uninformativ.de Sorry haha I didn’t mean for it to sound like that 🤣
@mckinley@twtxt.net Hmmm? Care to elaborate? 🤣
@movq@www.uninformativ.de True 👌
@movq@www.uninformativ.de Tbey all hate me for stomping on their precious dear twtxt 🤣
url
field in the feed to define the URL for hashing. It should have been the last encountered one. Then, assuming append-style feeds, you could override the old URL with a new one from a certain point on:
@lyse@lyse.isobeef.org Hmmm interesting idea 🤔
On the Subject of Feed Identities; I propose the following:
- Generate a Private/Public ED25519 key pair
- Use this key pair to sign your Twtxt feed
- Use it as your feed’s identity in place of
# url =
as# key = ...
For example:
$ ssh-keygen -f prologic@twtxt.net
$ ssh-keygen -Y sign -n prologic@twtxt.net -f prologic@twtxt.net twtxt.txt
And your feed would looke like:
# nick = prologic
# key = SHA256:23OiSfuPC4zT0lVh1Y+XKh+KjP59brhZfxFHIYZkbZs
# sig = twtxt.txt.sig
# prev = j6bmlgq twtxt.txt/1
# avatar = https://twtxt.net/user/prologic/avatar#gdoicerjkh3nynyxnxawwwkearr4qllkoevtwb3req4hojx5z43q
# description = "Problems are Solved by Method" 🇦🇺👨💻👨🦯🏹♔ 🏓⚯ 👨👩👧👧🛥 -- James Mills (operator of twtxt.net / creator of Yarn.social 🧶)
2024-06-14T18:22:17Z (#nef6byq) @<bender https://twtxt.net/user/bender/twtxt.txt> Hehe thanks! 😅 Still gotta sort out some other bugs, but that's tomorrows job 🤞
...
Twt Hash extension would change of course to use a feed’s ED25519 public key fingerprint.
@aelaraji@aelaraji.com My work has this thing called “compressed work”, where you can buy extra time off (as much as 4 additional weeks) per year. It comes out of your pay though, so it’s not exactly a 4-day work week but it could be useful, just haven’t tired it yet as I’m not entirely sure how it’ll affect my net pay
@bender@twtxt.net Yes, they do 🤣 Implicitly, or threading would never work at all 😅 Nor lookups 🤣 They are used as keys. Think of them like a primary key in a database or index. I totally get where you’re coming from, but there are trade-offs with using Message/Thread Ids as opposed to Content Addressing (like we do) and I believe we would just encounter other problems by doing so.
My money is on extending the Twt Subject extension to support more (optional) advanced “subjects”; i.e: indicating you edited a Twt you already published in your feed as @falsifian@www.falsifian.org indicated 👌
Then we have a secondary (bure much rarer) problem of the “identity” of a feed in the first place. Using the URL you fetch the feed from as @lyse@lyse.isobeef.org ’s client tt
seems to do or using the # url =
metadata field as every other client does (according to the spec) is problematic when you decide to change where you host your feed. In fact the spec says:
Users are advised to not change the first one of their urls. If they move their feed to a new URL, they should add this new URL as a new url field.
See Choosing the Feed URL – This is one of our longest debates and challenges, and I think (_I suspect along with @xuu@txt.sour.is _) that the right way to solve this is to use public/private key(s) where you actually have a public key fingerprint as your feed’s unique identity that never changes.
@aelaraji@aelaraji.com Join the club! 🤣 How about more days in a weekend?! 😱 Bringon #FourDayWorkWeek !!! 🤣
Message-Id
. Email is a federated system, but by no means is it "decentralised". You still have to send your email somewhere, not just post it on a website on your own server like Twtxt 😅
@bender@twtxt.net Haha, easy to demonstrate. I’ll start an email thread with myself, then you see if you can join in 🤣
We can also make use of comments in the feed to build support for detecting/declaring Twts(s) were edited in a feed that are ignored by clients that don’t understand the comments. By design clients ignore comments anyway, but the parser we build for yarnd
(which I’d love to turn into a C library that others can just import) can do some interesting things here. @xuu@txt.sour.is can probably talk more on this…
I think Email Message-Id(s) only ever worked because typically you are exchanging emails with recipients you know and vice versa. It’s much easier to cope with the problems above, because you just ensure your client preserves the Message-Id
. Email is a federated system, but by no means is it “decentralised”. You still have to send your email somewhere, not just post it on a website on your own server like Twtxt 😅
There are some subtitles differences like this that makes Message/Thread Id(s) not really that suitable IMO.
@bender@twtxt.net The problem with the approach Email clients do things is;
- How do you come up with the message/thread id in the first place? I’m pretty sure most clients just use a UUID.
- How do you know what you’re replying to if you don’t see the message/thread id in the first place?
- How do two different users that don’t know each other, but follow the same feed (say /.) make two independent responses forming a thread? What message/thread id do they use? (see above)
@bender@twtxt.net Sorry, trust was the wrong word. Trust as in, you do not have to check with anything or anyone that the hash is valid. You can verify the hash is valid by recomputing the hash from the content of what it points to, etc.
@falsifian@www.falsifian.org Yes;
I don’t think twtxt hashes are long enough to prevent spoofing.
The current spec needs to be updated to expand the hash length to 11 characters to avoid hash collisions (which will happen at some point with 7, if not already).
The issue isn’t dealing with “spoofing”, it’s about solving how clients in a decentralised model agree on the threading model and identity of a thread. Message ID(s) suffer from the fact that as @movq@www.uninformativ.de points out, clients have to “obey” this unwritten rule, but they’re otherwise just arbitrary. Whereas Twt Hashes (I didn’t come up with the idea originally, some smart fellow in cryptography did) are content addressable, meaning that clients don’t have to agree on anything, they can trust that the hash is a cryptographic representing of the thread they’re replying to, no matter what.
@falsifian@www.falsifian.org I like this idea actually for edits.
@movq@www.uninformativ.de Care to share your thoughts here?
I don’t know what happened behind the scenes that killed off twtxt (I have a few guesses, though), but the sad truth is that it’s gone.
Agreed
@bender@twtxt.net A Fred changed its url metadata field 🤣
After unfollowing and refollowing on the new feed URL, I’m now 100% certain this is what happened for @cuaxolotl@sunshinegardens.org 🤣 The real problem is really this:
How do we identify a feed?
It cannot be the URL, because the author could change where they serve it from. This was as “good” as we could get it, but time and time again this has proven to be problematic for, well, a few folks that change their mind, which frankly should be allowed 😅
For supporting edits, I was thinking more along the lines of: If a client edits a Twt already published, it should put the hash of the previous Twt. Something like:
2024-09-05T13:37:40Z (edit:mp6ox4a) Hello world!
For supporting edits, I was thinking more along the lines of: If a client edits a Twt already published, it should put the hash of the previous Twt. Something like:
2024-09-05T13:37:40+00:00 (edit:mp6ox4a) Hello world!
To be honest, I don’t really see “editing” as a problem. I see that as a natural behavior of “forking” in the first place, that just forms a. new sub-tree. What’s really problematic here is when a feed author changes the “identity” of their feed and changes the # url =
metadata field, which is what I believe @cuaxolotl@sunshinegardens.org has just done, though I’m not 100% certain, I’m like 98% sure haha 😝
@lyse@lyse.isobeef.org Did you check your pocket? 🤣
@movq@www.uninformativ.de Sorry but what’s a partial hash exactly? 🤔
@cuaxolotl@sunshinegardens.org Did you recently change the url
metdata key of your feed?
# url = https://sunshinegardens.org/~xj9/twtxt/tw.txt
Was this at one point # url = https://sunshinegardens.org/users/xj9/twtxt/tw.txt
?
@lyse@lyse.isobeef.org Please for the love of god, elaborate 😅
@lyse@lyse.isobeef.org da fuq?! same here, what did you just reply to?! 🤔
@lyse@lyse.isobeef.org da hell are you replying to?! 🤣
Offline backups currently cost me around ~$2.00 AUD per month.
Spent the day performing backups (hadn’t done it in a while 😱) and wrote a full backup definition internal document that defines my backup process, scope, security, frequency, backup locations, capacity and backup and restoration procedures. Very happy with the doc and the updated (now fully documented) plan and scheduled backup frequency (once per month, which I’ll put into my calendar as it’s done by hand for now, with tools). So far backing up ~410GB out of a possible ~12.8TB worth of data in two locations – I deliberately don’t backup everything as much of the data can be re-created (music, videos, tv shows, etc). #Backups #Data
I’ll share my opinion on this later 🤣
What do we think about this? 😅
Swa this pop up in my Github news feed today 🤔 Which links to https://github.com/musingstudio/go-subclub
A Go (golang) library for interacting with the sub.club API.
So I got curious and had a peek 👀
Let’s fund the Fediverse
Posting or hosting on the open social networks no longer means you have to do it for free. Developer Preview now available.
And further down:
Monetize your feeds
If you post quality content and you’ve developed a loyal audience, you should be able to ask your most passionate followers to support you with a premium subscription.
That’s a promise not available on the Fediverse …until now.
Hmmm 🤔
@slashdot@feeds.twtxt.net I can only see a mass exodus of uses fleeing telegram as the service becomes less secure or less privacy focused and basically more shit.
@quark@ferengi.one cheers 🍻
it might have made sense in the days of hose and buggy and smoke signals to centralise everything, but these days we have a globalized interconnected society with fast transport and communications. There is no reason for this model anymore 🤣
@slashdot@feeds.twtxt.net Can we please stop this whole “Back to the Office” garbage nonsense?! 😱 If a job does not require the physical presence of a person(s) to perform their role, or they are not “customer facing” or in a job that’s required to “serve the public”, let’s just stop this utter nonsense. As much as I want my shares in Cromwell to go up, I really don’t care. Let the corporate office buildings burn to the ground for all I care, turn them into cheap housing estates or apartments. Why we ever thought centralizing in once place to live and work is beyond me 🤦♂️
@cuaxolotl@sunshinegardens.org No you’re not the only one. I do this too, I often think about a problem in my head, even imagine the code, sometimes for weeks, hell even months, before I even write a line of code 🧑💻
@lyse@lyse.isobeef.org Thankfully it’s quite cool here so far 👌
Interesting 🤔
@bender@twtxt.net That sucks 😢 Sorry to hear you didn’t sleep well 😴
curl
foo that does just that, don't be lazy! :-P
@bender@twtxt.net I was in bed 🤣
@bender@twtxt.net Haha I aggressively unfollow feds that are like this now 🤣
@falsifian@www.falsifian.org Yes hit a Twt permalink URI and ask for application/ json
@lyse@lyse.isobeef.org Uggh 🥵 That sounds awful and reminds me of our very odd little 3-day heat wave we had last week 😱
@bender@twtxt.net Thanks! 🙇♂️
I see 🤔 Thanks!
@movq@www.uninformativ.de This ☝️
@bender@twtxt.net Do you recall what you were clicking through? 🤦♂️
@falsifian@www.falsifian.org You are totally right. The specs are at least “open enough” for us to consider that as an implementation detail. We, and by we I mean @movq@www.uninformativ.de @lyse@lyse.isobeef.org @bender@twtxt.net @xuu@txt.sour.is and others should discuss this in more detail I believe and try to see if we can agree on what we’re trying to solve.
Does yarnd provide an API for finding twts? Is it similar?
No, it doesn’t. But yarns
(the search engine/crawler wrote) seems more fitting here. It’s been discussed before, the possibility of building a “Twtxt Register v1” compatible API for yarns
. I think a search engine + crawler + registry (especially ones that can form a bit of a “distributed network) are far more useful I think in order to support the actual decentralised Twtxt / Yarn ecosystem (which is how I prefer to describe it).
@falsifian@www.falsifian.org Ahh but this is solved now with the new single shot fetch?
@bender@twtxt.net I’ve sort of lost the plot here a bit 🤦♂️ What’s the problem we’re trying to figure out? 🤔
@falsifian@www.falsifian.org You are however right that registries always had a “search” capability, amost others.
@movq@www.uninformativ.de Jenny hasn’t changed the way it computes hashes has it? (yarnd
certainly hasn’t).
@falsifian@www.falsifian.org I think I’m missing something in my description. When I say “search engine” I also mean “with a crawler” that is able to self-discover feeds. A registry (as designed today, or as the spec described) required users to add their feeds to one or more registries, putting the burden on the user(s). I for example do not bother adding my feed to a registry (which one would I add it to anyway?)
@falsifian@www.falsifian.org to my knowledge registries were never designed to crawl the Twtxt space. If they did, they would be considered a search engine 🤣
@falsifian@www.falsifian.org So yes, you would ask a pod about the missing Twt by hash, or whatever. Pods do this already, even though there aren’t that many now, so it maybe a bit less effective today. However it’s more of a small/tiny “distributed” protocol, you ask any pod.
On registries however, I think a registry is the wrong approach. I see far greater value in feed crawlers and search engines like the (half baked one) I built over at https://search.twtxt.net/
@bender@twtxt.net I usually follow anyone and anything, then I unfollow when they turn out to be either not interesting or otherwise 🤣
@mckinley@twtxt.net Why is it so hard so you think? 🤔 What’s missing to make this an easy choice for folks? 🤔
Wow! 😮 That’s huge!
@bender@twtxt.net Hehe this is soo true 🤣 And I hate it 😅
Is it really that fucking hard to use decentralized, Self-Hosted tech? 🤔 Or do people just not know how? 😢
@bender@twtxt.net Yes yes but this is exactly my point! We again have a social network claiming to be “decentralized” only to have “ top heavy” instances 🤣 – Mastodon is the same too 😅
@slashdot@feeds.twtxt.net Hang on a minute!!! 😱
This rapid growth led some users to encounter the occasional error that would state there were ‘Not Enough Resources’ to handle requests, as Bluesky engineers scrambled to keep the servers stable under the influx of new sign-ups,”
I thought BlueSky was supposed to be a decentralized social metwork?! 🤦♂️
@cuaxolotl@sunshinegardens.org Very interesting! 🤔What makes this “offline” first though? 🤔
@cuaxolotl@sunshinegardens.org Interestinf 🤔 Thanks for supporting the work we’ve done too! Happy to hear improvement suggestions too 👌
@movq@www.uninformativ.de All totally makes sense actuallly 🤣
Introduction to JuiceFS | JuiceFS Document Center – Thinking about using JuiceFS to solve a long-running problem I’ve always had.
- Be able to run services on any node in my cluster and let Docker Swarm pick whatever node it likes (instead of now where I have to pin some workloads to specific nodes, as that’s where their local storage volume is)
- Manage the scalability of data and growth over time instead of what I do now which is to extend EXT4 filesystems on my Docker Swarm nodes every few years.
@bender@twtxt.net Yeah that’s for sure 👍 I use the Monaco font normally. Been using that for a few years now.
As a reminder, this is how zoomed in I normally am to read anything at all, Try doing this on the website 🤣
Fonts for me have to be crisp, sharp, without any crooked edges or boxed shapes. It has to be crisp and sharp at all zoom levels!
@bender@twtxt.net That’s just it, “pixelated” fonts are rubbish! 🤣 Imagine being blind for a moment, how well do you think you could read any of the text? 😅 I can’t even read it zoomed in! LOL 😝
@bender@twtxt.net Ita disgusting 🤮 I can’t read shit 🤣
@slashdot@feeds.twtxt.net AI not living up to its hype?! Shock! Horror! 😱🤣 #AI
wut da fuq is this?! 🤣
@bender@twtxt.net I have not hmmm 🤔
@xuu@txt.sour.is Haha 🤣
@shreyan@twtxt.net Good morning! 🥱
@bender@twtxt.net Hah! 🤣
Good points 🙇♂️
@movq@www.uninformativ.de Yeah your original idea of precent encoding some information about the new follower is probably what we need to think about more. I think it’ll also work for Gopher/Gemini folk too right? So essentially new metadata key (optional) with some spec for encoding information about the new follower if either a) You don’t implement the User-Agent part of the spec or extensions or b)You use a protocol that makes this impossible.
@movq@www.uninformativ.de Sad, the search engine doesn’t have the full conversation 😢 I think I need to teach yarns
how to crawl and index archived feeds 🤔
For HTTP WebSub is a good simple option here and there is this free inline WebSub hub anyone can use.
@movq@www.uninformativ.de Something like that, yeah 🤔
Similarly an optional subscription endpoint so we can optionally avoid having to pull feeds.