@andros@twtxt.andros.dev Haha 𤣠Weāve explored this idea in the past and we decided that itās actually a good idea to have an āappend-onlyā feed for various reasons. Weāve also explored the idea of using Range requests, but opted instead to just archive/rotate our feeds periodically š
There really isnāt much point in having a feed in reverse chronological order, except (maybe?) so a human read view the new twts at the top of the file?! š¤£
Proposal: Change the order of twts in the feeds
https://git.mills.io/yarnsocial/twtxt.dev/issues/26
I drop the bomb and leave! š£ šāā”ļø
#twtxt
@bender@twtxt.net I use it. Itās not the feature I use the most in the fediverse, but I communicate this way with several friends. For example, itās the main way I talk to the original creator of the twtxt-el repository, the way people greet me for the first time or the way they notify me of some bugs in the software I maintain. I can even tell you that itās the main way I talk to some maintainers of the Emacs community. If there are any of you reading my words, speak up!
Why not have the same? There are things I want to say to @prologic@twtxt.net in private, why should I have to send him an email or private IRC? Or an public twt.
Of course, hereās a topic weāve already talked about: what is twtxt for you? For me it will always be a social network, in microblogging format, but an asynchronous way of communicating. And having a tool to control visibility is basic š
I look forward to hearing from you @eapl.me@eapl.me !
See:
<textarea id="text" name="text" placeholder="Hi! š Don't forget to post a Twt today!" rows="4" maxlength="576" required="true" aria-required="true"></textarea>
So, 576?
Hmmm thereās a bug somewhere in the way Iām ingesting archived feeds š¤
sqlite> select * from twts where content like 'The web is such garbage these days%';
hash = 37sjhla
feed_url = https://twtxt.net/user/prologic/twtxt.txt/1
content = The web is such garbage these days š Or is it the garbage search engines? š¤
created = 2024-11-14T01:53:46Z
created_dt = 2024-11-14 01:53:46
subject = #37sjhla
mentions = []
tags = []
links = []
sqlite>
Btw @andros@twtxt.andros.dev ; The automated feed you put together for Hacker News⦠Does it at any point rewrite parts of the feed as it goes along? š¤ Iāve had to unfollow it because Iāve found in practise it makes a twt, then seems to modify that same twt (observed by content manually) at least twice. This ends up becoming effectively an āEditā and essentially duplicate (looking) posts š¢
AS136907 HWCLOUDS-AS-AP HUAWEI CLOUDS
@prologic@twtxt.net This shi_ is as fun as it is frustrating! š the bot is poking at me from a different ASN now, Alibabaās.
- Short term solution: Iāve geo-locked my Timeline instance since Iām the only one using it (and I only do so for reading twts when Iām away from terminal).
- Long term: I took a look at your Caddy WAF but couldnāt figure things out on my own; until then, Iāll be poking at Caddy-Defender, maybe throw in a Crowdsec for lols⦠#FUN
Some A hole has been trying to pull every single Twtxt feed that existed/still exists since forever. How do I know? Welpā Theyāve been querying my Timeline⢠instance for all of it, every single twtxt file and twt Hash they can find. šš¤¦ It must have been going on for days and I have just noticed⦠+ itās all coming from the same ASN AS136907 HWCLOUDS-AS-AP HUAWEI CLOUDS
Thank you Huawei for the DDos you sons of Glitches!!!
@kat@yarn.girlonthemoon.xyz Itās more like a cache, it stores things like ātimestamp of the most recent twt weāve seen per feedā or ālast modification dateā (to be used with HTTPās if-modified-since header). You can nuke these files at any time, it might just result in more traffic (e.g., always getting a full response instead of just āHTTP 304 nope, didnāt changeā).
@quark@ferengi.one Yes, I often write a couple of twts, donāt publish them, then sometimes notice a mistake and want to edit it. Youāre right, as soon as stuff is published, threads are going to break/fork by edits.
@quark@ferengi.one No editing old Twts that are the root of a thread with replies in the ecosystem. Just results in a fork. Unless the client has an implementation that does not store Twts keyed by Hash.
jenny really isnāt well equipped to handle edits of my own twts.
For example, in 2021, this change got introduced:
https://www.uninformativ.de/git/jenny/commit/6b5b25a542c2dd46c002ec5a422137275febc5a1.html
This means that jenny will always ignore my own edits unless I also manually edit its internal ājson databaseā. Annoying.
That change was requested by a user who had the habit of deleting twts or moving them to another mailbox or something. I think that person is long gone and I might revert that change. š¤
Ha! I stand corrected, didnāt scrolled long enough. Indeed, it should be added (you will need an account on Millsā Gitea), noted.
si4er3q. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00 or -00:00 must be replaced by Z.
@eaplme@eapl.me you wrote:
āThat PHP snippet could be merged into https://twtxt.dev/exts/twt-hash.htmlā
Why, though? AFAIK @andros@twtxt.andros.devās client is on Emacs, @lyse@lyse.isobeef.orgās is on Python (and Golang, for tt2), @movq@www.uninformativ.deās is on Python, and @prologic@twtxt.netās is on Golang. All the client creator needs to know is in the documentation already, coding language agnostic.
si4er3q. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00 or -00:00 must be replaced by Z.
just a note that we are doing that on PHP: https://github.com/eapl-gemugami/twtxt-php/blob/master/docs/03-hash-extension.md#php-72
That PHP snippet could be merged into https://twtxt.dev/exts/twt-hash.html
@david@collantes.us @andros@twtxt.andros.dev The correct hash would be si4er3q. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00 or -00:00 must be replaced by Z.
(That said, thereās a bug in jenny as well. It only replaces +00:00, not -00:00. š¤”)
dm-only.txt feeds. š
@bender@twtxt.net For example:
If you can see this twt in any feedā¦
xxxx-xx-xxTxx:xx:xxZ !<bender https://twtxt.net/user/bender/twtxt.txt> U2FsdGVkX1+QmwBNmk9Yu9jvazVRFPS2TGJRGle/BDDzFult6zCtxNhJrV0g+sx0EIKbjL2a9QpCT5C0Z2qWvw==
It is for you. Any other possibility must be ignore (hidden in your timeline).
If your client doesnāt have the posibility to decrypt the twt, hide all direct message. It is all :)
@andros@twtxt.andros.dev Curious where this root twt is?! 𤣠Apparently my pod doesnāt have it and I canāt find it anywhere. Itās suppose to be ā
dm-only.txt feeds. š
@bender@twtxt.net @aelaraji@aelaraji.com The client should ignore twts if itās not compatible or not addressed to me. itās a simple regex to add! Itās similar to Twt Hash Extension, should they be in another file? They are child messages, not flat twt. Not of course!
@xuu@txt.sour.is Seems to be fine here?
$ bat https://twtxt.net/twt/yfv5kfq | jq '.text'
"!<dm-echo https://dm-echo.andros.dev/twtxt.txt> U2FsdGVkX1+QmwBNmk9Yu9jvazVRFPS2TGJRGle/BDDzFult6zCtxNhJrV0g+sx0EIKbjL2a9QpCT5C0Z2qWvw=="
@bender@twtxt.net Sadly my earlier Twt back in ~2020 is now gone from at least this podās cache 𤣠ā It might still exist in other pods though? š¤ It does! https://txt.sour.is/twt/o6dsrga
Happy 1st Twtxt~iversary to me ⦠I guess. It feels like it was 5 years since my first twt š
Iām also thinking that some kind of tag might be needed to automatically hide twts from unknown extensions. For example our client doesnāt support DMs and always shows the !<nick url><encrypted_message> syntax which is meaningless.
@bender@twtxt.net Yes! I deleted those repeated twts because it was poor execution by my client. They are currently not present in my feed.
Maybe it would be interesting to check if any twt has disappeared?
Oops, I think this pod (twtxt.net) just sync ~1k missing root twts with god only knows which peers š¤¦āāļø I forgot a couple of important key things:
- Only coverage with a subset of peers
- Only converge with trusted peers
Fuck me 𤣠Ooops. Sorry!
@andros@twtxt.andros.dev can you see the screenshot on my first twtxt? Here: https://twtxt.net/twt/mrccg4q
Good quote: «Corrects in private and congratulates in public».
Orā¦: Ā«Corrects in direct message and congratulates in twtĀ» š
I was trying to optimize the SQL query used for the Compact FrontPage (anonymous view for Discovery when the Admin/Operator chooses āone twt per feedā).
@thecanine@twtxt.net Did you see my revelation earlier today? š¤
Hmm, Yarnd is duplicating the rendering of /twt/5jlfuua. Thatās quite odd.
Anyway. this was a good use for search btw. I couldnāt find my Twt, so I just quickly searched for it, snap, bingo I found it in a snap! š«°
@prologic@twtxt.net Iām not sure if thatās an intended behaviour but twtxt.netās home page doesnāt load more than 13 twts, no more pagination/infinite scrollingā¦
Page 1/1 of 13 Twts
Doesnāt look like it Hmmm
sqlite> select * from twts where content LIKE '%Linux installation%';
hash = znf6csa
feed_url = https://www.uninformativ.de/twtxt.txt
content = I wonder if my current Linux installation will actually make it to 20 years:
$ head -n 1 /var/log/pacman.log
[2011-07-07 11:19] installed filesystem (2011.04-1)
Itās not toooo far into the future.
It would be crazy ⦠20 years without reinstalling once ⦠phew. š„“
created = 2025-04-07T19:59:51Z
subject = (#znf6csa)
mentions = []
tags = []
links = []
@movq@www.uninformativ.de Apparently you wrote it :D The hash doesnāt lie? 𤣠https://twtxt.net/twt/znf6csa
@prologic@twtxt.net What happened here ā did I edit my twt or is this hash wrong? š„“
guys help how do i unmute a twt i accidentally hit the wrong button
Is it just me or is there a display bug for āYarnā(s) that are duplicating the root twt? š¤
I need to get Peering working again on this branch! That will drag in many Twts Twts I now no longer have š
i can see your twts here: https://watcher.sour.is/?uri=https://eapl.me/tw.txt
@david@collantes.us.. i see this one but it says its dead. https://watcher.sour.is/?uri=https://ferengi.one/twtxt.txt
@andros@twtxt.andros.dev sha256 hash of twt in json. Look at converter script
thanks for sharing @xuu@txt.sour.is!
Checking for example https://watcher.sour.is/api/plain/twt or https://registry.twtxt.org/api/plain/tweets, I donāt know whether this syntax is being used by clients or by people. Is it integrated on Yarn in any way? Genuinely asking to know more about it.
If I might throw a quick thought to those working on the registries, it would be nice to have an endpoint with a valid twtxt output (perhaps cached or dumped to a static file) which a client could point to, helping to discover itās content in a way which is compatible with the twtxt spec.
Taking the first twt I found in https://watcher.sour.is/api/plain/twt as an example:
reddit_world_news https://feeds.twtxt.net/Reddit_World_News/twtxt.txt 2025-03-28T00:29:25Z **China bans US logs. 3 billion dollar[...])
it would be something like
TIME <@NICK URL> TWT
2025-03-28T00:29:25Z <@reddit_world_news https://feeds.twtxt.net/Reddit_World_News/twtxt.txt> **China bans US logs. 3 billion dollar[...])
That way you could watch the latest twts with your client, something similar to what we find on Mastodon: https://mastodon.online/public/local
Some support from the clients to separate these ādiscoveryā content, from your following timeline might be required. š¤
@eapl.me@eapl.me I am currently working on Implementing a registry that is also a crawler. It finds any feeds that are mentioned or in the follows header.
https://watcher.sour.is/api/plain/twt
https://watcher.sour.is/api/plain/users
I think @prologic@twtxt.net is also working on one.
somehow I forgot that existed.
Perhaps it was its mention of being a demo implementation here:
https://twtxt.readthedocs.io/en/latest/user/registry.html#registry
So I though it wasnāt really active.
Anyway, I think thatās a good idea.
Is there something similar available on Yarn? Sorry for for asking if that was mentioned recently.
I think that the clients may help you to submit your URL to these directories, and also to get a view of the twts in them.
@eapl.me@eapl.me this ādirectoryā is actually named registry. You can see users at https://registry.twtxt.org/api/plain/users and his twts at https://registry.twtxt.org/api/plain/tweets
thanks andros!
instead of adding the new twt at the end of the feed, do it at the beginning
The PHP client did that originally, although I didnāt see a real benefit if you use⦠a client.
It could help if you read the .txt file through a browser or something. Also, not many clients are prepared to cut the request, and you canāt rely on the file being organized that way, so finally we dropped that feature.
@bender@twtxt.net I taught the whole ecosystem š
@prologic@twtxt.net @eapl.me@eapl.me The question I was asked the most was: How do I discover people?
Someone came up with a fantastic idea, instead of adding the new twt at the end of the feed, do it at the beginning. So you can paginate by cutting the request every few lines.
tt reimplementation that I already followed with the old Python tt. Previously, I just had a few feeds for testing purposes in my new config. While transfering, I "dropped" heaps of feeds that appeared to be inactive.
neat! my watcher is currently sitting at about 75 MB following over 1500 feeds. only about 200 are currently somewhat active.
-rw-r--r--. 1 xuu xuu 69M Mar 25 20:46 twt.db
-rw-r--r--. 1 xuu xuu 32K Mar 25 21:34 twt.db-shm
-rw-r--r--. 1 xuu xuu 5.6M Mar 25 21:34 twt.db-wal
sqlite> select state, count(*) n from feeds group by 1;
hot|7
warm|8
cold|183
frozen|743
permanantly-dead|857
I have applied your comments, and I tried to add you as an editor but couldnāt find your email address. Please request editing access if you wish.
Also, could you elaborate on how you envision migrating with a script? You mean that the client of the file owner could massively update URLs in old twts ?
@prologic@twtxt.net We canāt agree on this idea because that makes things even more complicated than it already is today. The beauty of twtxt is, you put one file on your server, done. One. Not five million. Granted, there might be archive feeds, so it might be already a bit more, but still faaaaaaar less than one file per message.
Also, you would need to host not your own hash files, but everybody elseās as well you follow. Otherwise, what is that supposed to achieve? If people are already following my feed, they know what hashes I have, so this is to no use of them (unless they want to look up a message from an archive feed and donāt process them). But the far more common scenario is that an unknown hash originates from a feed that they have not subscribed to.
Additionally, yarndās URL schema would then also break, because https://twtxt.net/twt/<hash> now becomes https://twtxt.net/user/prologic/<hash>, https://twtxt.net/user/bender/<hash> and so on. To me, that looks like you would only get hashes if they belonged to this particular user. Of course, you could define rules that if there is a /user/ part in the path, then use a different URL, but this complicates things even more.
Sorry, I donāt like that idea.
One of the biggest gripes of the community with the way the threading model currently works with Twtxt v1.2 (https://twtxt.dev) is this notion of:
What is this hash?
What does it refer to?
Idea: Why canāt we all agree to implement a simple URI scheme where we host our Twtxt feeds?
That is, if you host your feed at https://example.com/twtxt.txt ā Why canāt or could you not also host various JSON files (letās agree on the spec of course) at https://example.com/twt/<hash> ? š¤
That way we solve this problem in a truly decentralised way, rather than every relying on yarnd pods alone.
