# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 196141
# self = https://watcher.sour.is?offset=194885
# next = https://watcher.sour.is?offset=194985
# prev = https://watcher.sour.is?offset=194785
@alexonit Holy fuck! 🤣 I just realized how bad my typing was in my reply before 🤣 🤦‍♂️ So sorry about that haha 😆 I blame the stupid iPhone on-screen keyboard ⌨️
****
A ver, yo ya lo siento si no ando por aquí, pero la semana de vacaciones me lo impide 😎😎 ⌘ Read more****
@alexonit Maybe I misunderstood, but you have to keep the timezone offsets in mind. Simple alphabetical sorting of the timestamp strings does not yield a truly chronological order. It might be close enough for you, though.
@alexonit that sounds pretty much like Italy! LOL. We pay $48 on renewal in Florida, US, but that fee isn't Federal, so other states may pay more, or less.
[47°09′21″S, 126°43′48″W] 4543 days without news from Herve
@prologic That is really great to hear!

If there are opposing opinions we either build a bridge or provide a new parallel road.

Also, I wouldn't call my opinion a "stance", I just wish for a better twtxt thanks to everyone's effort.

The last thing we need to do is decide a proper format for the location-based version.

My proposal is to keep the "Subject extension" unchanged and include the reference to the mention like this:


// Current hash format: starts with a '#'
(#hash) here's text
(#hash) @<nick url> here's text

// New location format: valid URL-like + '#' + TIMESTAMP (verbatim format of feed source)
(url#timestamp) here's text
(url#timestamp) @<nick url> here's text


I think the timestamp should be referenced verbatim to prevent broken references with multiple variations (especially with the many timezones out there) which would also make it even easier to implement for everyone.

I'm sure we can get @zvava, @lyse and everyone else to help on this one.

I personally think we should also consider allowing a generic format to build on custom references, this would allow for creating threads using any custom source (manual, computed or external generated), maybe using a new "Topic extension", here's some examples.


// New format for custom references: starts with a '!' maybe?
(!custom) here's text
(!custom) @<nick url> here's text

// A possible "Topic" parse as a thread root:
[!custom] start here
[custom] simpler format


This one is just an idea of mine, but I feel it can unleash new ways of using twtxt.
Em 2007 "dungeon synth" não era propriamente um estilo musical que eu reconhecesse, e no entanto, sem saber, era não só influenciado pelo género como até participava dele. Agora, em retrospectiva, classifico muito do que fiz com o meu projecto musical a solo #Merankorii como sendo #DungeonSynth - e um dos temas que se enquadra bem nisso é o "The Alchemist", que encerra o album "Sanguine", e que aqui relembro nesta #musiquinta porque, com o tema "me define", como poderia eu não escolher uma música que não só me define, como é um auto-retrato?

https://merankorii.bandcamp.com/track/the-alchemist
Em 2007 "dungeon synth" não era propriamente um estilo musical que eu reconhecesse, e no entanto, sem saber, era não só influenciado pelo género como até participava dele. Agora, em retrospectiva, classifico muito do que fiz com o meu projecto musical a solo #Merankorii como sendo #DungeonSynth - e um dos temas que se enquadra bem nisso é o "The Alchemist", que encerra o album "Sanguine", e que aqui relembro nesta #musiquinta porque, com o tema "me define", como poderia eu não escolher uma música que não só me define, como é um auto-retrato?

https://merankorii.bandcamp.com/track/the-alchemist
Em 2007 "dungeon synth" não era propriamente um estilo musical que eu reconhecesse, e no entanto, sem saber, era não só influenciado pelo género como até participava dele. Agora, em retrospectiva, classifico muito do que fiz com o meu projecto musical a solo #Merankorii como sendo #DungeonSynth - e um dos temas que se enquadra bem nisso é o "The Alchemist", que encerra o album "Sanguine", e que aqui relembro nesta #musiquinta porque, com o tema "me define", como poderia eu não escolher uma música que não só me define, como é um auto-retrato?

https://merankorii.bandcamp.com/track/the-alchemist
@itsericwoodward I used the dates as is for indexing them as string, the ISO format allows for free auto sorting.
@bender What?! In my country you have to pay 100€ every 10 years of which about 75% are just taxes...
So I just put on a zipper jacket over my hoodie because it's 18 °C here in my office right now, and I refuse to turn on the heating!
[47°09′27″S, 126°43′22″W] Transfer 25% complete...
[47°09′49″S, 126°43′56″W] Raw reading: 0x68D4CC51, offset +/-1
Hotel. Rue Barbes. Parking in the street, if you take the one way road in the wrong direction.
Hotel Montmartre 1
I _finally_ resolved my issues with hashing twts... with REGEX!

Dates in JavaScript are truly strange creatures.
#DireStraits Documentary

https://nebula.tv/videos/maryspender-the-dire-straits-story-full-documentary
Mary Spender on #DireStraits & Sultans of Swing

https://www.youtube.com/live/_g00S-a_0lo
🧮 USERS:1 FEEDS:2 TWTS:1474 ARCHIVED:90050 CACHE:2682 FOLLOWERS:22 FOLLOWING:14
boop
bwop
@movq I've got this magic spell in my config: -f bestvideo[height<=?1080]+bestaudio/best
[47°09′19″S, 126°43′46″W] --white noise--
@itsericwoodward pretty cool! Started following you, not to miss any progress. Thanks for the exhaustive reply!
@lyse that's pretty cool! The first video I see on YouTube of that kind. Thanks!
****
Uno de los motivos por los que me siendo cómoda en Mastodon es que siento que los hombres aquí no son tan ultramachistas como en otros sitios.

Se nota especialmente la diferencia en los jóvenes.

Que hablar con hombres jóvenes en el mundo exterior es algo brutalmente estresante. No sabes cuanto van a tardar en defender al tecnobro de turno. ⌘ Read more****
****
Pues un estudio apostó por la IA para hacer películas hace un año. Han perdido un año.

https://petapixel.com/2025/09/23/movie-studio-lionsgate-is-struggling-to-make-ai-generated-films-with-runway/Read more****
@lyse Hm, I couldn’t trick yt-dlp into downloading the correct format. Works in the browser, though. 😅
@lyse Hm, I couldn’t trick yt-dlp into downloading the correct format. Works in the browser, though. 😅
[47°09′27″S, 126°43′32″W] Waiting for carrier
@bender @movq I had automatically yt-dlped https://www.youtube.com/watch?v=OZTSIYkuMlU. It's only worth for an experiment, no recommendation to watch.
I have fully restored my script that posts from CLI to Mastodon, twtxt, and my ichi.city web page.
I have fully restored my script that posts from CLI to Mastodon, twtxt, and my ichi.city web page.
@melyanna Exit! Exit!@1! https://movq.de/v/c51aa76926/exit-exit-exit.jpg
@melyanna Exit! Exit!@1! https://movq.de/v/c51aa76926/exit-exit-exit.jpg
@lyse I can’t remember the last time I came across a 360° video. 🤔
@lyse I can’t remember the last time I came across a 360° video. 🤔
@bender A renewed vision test might be a good idea for some people. 😅 I mean, it is kind of curious that you get this license as a young person and then it lasts a lifetime, without any further tests. As long as you don’t screw up really bad, it remains valid …
@bender A renewed vision test might be a good idea for some people. 😅 I mean, it is kind of curious that you get this license as a young person and then it lasts a lifetime, without any further tests. As long as you don’t screw up really bad, it remains valid …
****
Empieza el otoño y con ella la temporada de resfriados.

Ya he pillado las mascarillas, miel, limón, jengibre. Chocolate, sopas.

Paracetamoles, propolis, jarabe para la tos, caramelos de sauco, vipvaporús y regaliz. ⌘ Read more****
[47°09′12″S, 126°43′59″W] Sample analyzing complete -- starting transfer
Tnanks God for Gopher://
https://maurice-renck.de/en/notes/2025/wir-befinden-uns-im-permanenten-krieg-mit-der-natur-die
This week I wrote about #mastodon lists on the Sociabli blog. Besides some basics, I show you how you can create custom timelines without seeing those posts on your home timeline:https://sociab.li/blog/2025/mastodon-lists/
[47°09′26″S, 126°43′20″W] Analyzing samples
Ah ben voilà, j'ai trouvé la plateforme VOD de la bonne auberge. Je préfère m'y abonner que de supporter les pubs du podcast et c'est un meilleur moyen de les soutenir que patreon à mon avis : https://www.studio17.video/home
[47°09′19″S, 126°43′25″W] Re-taking samples
O que vocês recomendam para adesivos personalizados?
Printi, 360imprimir, Rei do Sticker?
(no Brasil) captura de tela do Reclame Aqui do Rei do Sticker
Conseguir trabajo, ya es mucho trabajo, pasan los días y sigo intentando
@movq I tried making an ascii scribble of penguin waving back at you but I gave up halfway through my first try xD ... HI! 👋
Thanks @bender it's been a long time indeed but, I was here the whole time. Just silent. I just didn't have much meaningful/worth twting about ... /ME flips a bird to life
@bender Thanks for asking!

So, I've been working on 2 main twtxt-related projects.

The first is small Node / express application that serves up a twtxt file while allowing its owner to add twts to it (or edit it outright), and I've been testing it on my site since the night I made that post. It's still very much an MVP, and I've been intermittently adding features, improving security, and streamlining the code, with an eye to release it after I get an MVP done of project #2 (the reader).

But that's where I've been struggling. The idea _seems_ simple enough - another Node / express app (this one with a Vite-powered front-end) that reads a public twtxt file, parses the "follow" list, grabs (and parses) _those_ twtxt files, and then creates a river of twts out of the result. The pieces work fine in seclusion (and with dummy data), but I keep running into weird issues when reading real-live twtxt files, so some twts come through, while others get lost in the ether. I'll figure it out eventually, but for now, I've been spending far more time than I anticipated just trying to get it to work end-to-end.

On top of it, the 2 projects wound up turning into 4 (so far), as I've been spinning out little libraries to use across both apps (like https://jsr.io/@itsericwoodward/fluent-dom-esm, and a forthcoming twtxt helper library).

In the end, I'm hoping to have project 1 (the editor) into beta by the end of October, and project 2 (the reader) into beta sometime after that, but we'll see.

I hope this has satisfied your curiosity, but if you'd like to know more, please reach out!
«The Hudson River is flowing through the heart of Times Square this month.
Press play to hear from Marina Zurkow & James Schmitz [@hx2A@mastodon.art] the artists behind ‘The River is a Circle (Times Square Edition)’ - September’s #MidnightMoment, a visual “combination of live data and a matrix of researched information about the Hudson River ecology,” says Zurkow.»

https://www.instagram.com/reel/DO6jbXrEdBG

#CreativeCoding #Processing #Python #py5 #TimesSquare #NYC
«The Hudson River is flowing through the heart of Times Square this month.
Press play to hear from Marina Zurkow & James Schmitz [@hx2A@mastodon.art] the artists behind ‘The River is a Circle (Times Square Edition)’ - September’s #MidnightMoment, a visual “combination of live data and a matrix of researched information about the Hudson River ecology,” says Zurkow.»

https://www.instagram.com/reel/DO6jbXrEdBG

#CreativeCoding #py5 #TimesSquare #NYC
🧮 USERS:1 FEEDS:2 TWTS:1473 ARCHIVED:90042 CACHE:2678 FOLLOWERS:22 FOLLOWING:14
#MaradoWeekly #WeeklyPlant Week 38 The single plum that my plum tree gave us in 2025.
#MaradoWeekly #WeeklyPlant Week 38 The single plum that my plum tree gave us in 2025.
#MaradoWeekly #WeeklyPlant Week 38 The single plum that my plum tree gave us in 2025.
[47°09′46″S, 126°43′09″W] Taking samples
@movq better than in the US. Our lasts only 10 years, and you need to go through the vision test, and, of course, pay). Recently they added a little gold star denoting “real ID” compliance, and we had to pay $10 to get the old one replaced—out of the regular renew “schedule”.

In here it is all about control, and money.
@lyse is it a 360 degree video online, or a local one?
Whooooaaaah, I just accidentally found out that VLC can play 360° videos and I am able to pan around! Crazy shit. I actually scrolled in order to adjust the volume like it usually works, but it zoomed in and out instead. Then I saw the title hinting at the 360° stuff. Even though this is not my cup of tea, it's nice that VLC supports it.
I am back to my bash scripting! This is in fact a test.
I am back to my bash scripting! This is in fact a test.
exit
exit
I would absolutely recommend Mint to anyone, not just my geeky friends.
I would absolutely recommend Mint to anyone, not just my geeky friends.
[47°09′55″S, 126°43′20″W] Raw reading: 0x68D2C401, offset +/-1
@aelaraji 👋
@aelaraji 👋
The driver’s license documents in Germany now have an expiration date. You have to renew them every 15 years. (Not the license itself, just the documents.)

I just got my renewed documents. Their expiration date says something like 01.09.40. Huh? That looks super weird to me, like an error. But no, it’s 2040 … Just 15 years away.
The driver’s license documents in Germany now have an expiration date. You have to renew them every 15 years. (Not the license itself, just the documents.)

I just got my renewed documents. Their expiration date says something like 01.09.40. Huh? That looks super weird to me, like an error. But no, it’s 2040 … Just 15 years away.
#NoiteDeProcessing #hackerspace #GaroaHackerClube Páginas da revista sobre a Noite de Processing no Garoa Hacker Clube
Gente, esta notícia é quente, vai sair o primeiro número da Variável. Tem uma entrevista comigo, estou até meio emocionado (não tenho nem roupa pra estar junto com algumas das figurinhas que aparecem na revista).

https://www.catarse.me/variavel (para o Brasil)

https://www.indiegogo.com/projects/variavel-magazine (para outros países)

#ProgramaçãoCriativa #CreativeCoding Reprodução de páginas da revista onde aparecem alguns dos meus desenhos e o começo da entrevista.
[47°09′34″S, 126°43′19″W] Dosimeter fixed
The new iTerm icon is confusing me; for a second I always wonder what that app is when the Dock comes into view.
@alexonit Yhays kind of love you!! Stance and position on this. If we are going to make chicken changes in the threading model, let's keep content based addressing, but also improve the use of experience. So in fact, in order to answer your question, I think yes, we can do some kind of combination of both.
What does it do to us if we can no longer trust any information? What if your mail app changes the content of your mail without you knowing?https://maurice-renck.de/en/blog/2025/trust-issues
[47°09′36″S, 126°43′20″W] Dosimeter still failing
@lyse @prologic Can't we find a middle ground and support both?

The thread is defined by two parts:

1. The hash
2. The subject

The client/pod generate the *hash* and index it in it's database/cache, then it simply query the subject of other posts to find the related posts, right?

In my own client current implementation (using hashes), the only calculation is in the hash generation, the rest is a verbatim copy of the subject (minus the # character), if this is the common implemented approach then adding the location based one is somewhat simple.

s
function setPostIndex(post) {
    // Current hash approach
    const hash = createHash(post.url, post.timestamp, post.content);

    // New location approach
    const location = post.url + '#' + post.timestamp;

    // Unchanged (probably)
    const subject = post.subject;

    // Index them all
    addToIndex(hash, post);
    addToIndex(location, post);
    addToIndex(subject, post);
}

// Both should work if the index contains both versions
getThreadBySubject('#abcdef') => [post1, post2, post3]; // Hash
getThreadBySubject('https://example.com#2025-01-01T12:00:00') => [post1, post2, post3]; // Location


As I said before, the mention is already location based @<example https://example.com/twtxt.txt>, so I think we should keep that in consideration.

Of course this will lead to a bit of fragmentation (without merging the two) but I think this can make everyone happy.

Otherwise, the only other solution I can think of is a different approach where the value doesn't matter, allowing to use anything as a reference (hash, location, git commit) for greater flexibility and freedom of implementation (this probably need the use of a fixed "header" for each post, but it can be seen as a separate extension).
[47°09′29″S, 126°43′41″W] Dosimeter malfunction
@lyse I don't think there's any point in continuing the discussion of Location vs. Content based addressing.

I want us to preserve Content based addressing.

Let's improve the user experience and fix the hash commission problems.
@aelaraji welcome back dude! Long time no see!
the winter its coming #BCN
🧮 USERS:1 FEEDS:2 TWTS:1472 ARCHIVED:90032 CACHE:2678 FOLLOWERS:22 FOLLOWING:14
@04866 what?? I don't know how to get myself around edbrowse, I almost hate it
Cool cette police : https://b.agaric.net/page/agave
Yey! _I Think_ we're back on track. All I was missing was #twtxt2html and a couple of symlincs into ~/bin~
[47°09′16″S, 126°43′54″W] Reading: 1.29 Sv
@movq Yeah, it took quite some time to load. But then it was briefly back. Now it's 503ing immediately all the time.
@lyse https://www.celestrak.com (where the TLE files are downloaded from) seems to be down. :/
@lyse https://www.celestrak.com (where the TLE files are downloaded from) seems to be down. :/
Nothing serious! just a sanity check Twt x) ...
Removing the empty cache file and it works again. No idea about the PATH glitch, though. Very strange.
@lyse 🍿🍿🍿😅
@movq Woah, cool!

(WTF, asciiworld-sat-track somehow broke, but I have not changed any of the scripts at all. O_o It doesn't find the asciiworld-sat-calc anymore. How in the world!? When I use an absolute path, the .tle is empty and I get a parsing error. Gotta debug this.)
@prologic I know we won't ever convince each other of the other's favorite addressing scheme. :-D But I wanna address (haha) your concerns:

1. I don't see any difference between the two schemes regarding link rot and migration. If the URL changes, both approaches are equally terrible as the feed URL is part of the hashed value and reference of some sort in the location-based scheme. It doesn't matter.

2. The same is true for duplication and forks. Even today, the "cannonical URL" has to be chosen to build the hash. That's exactly the same with location-based addressing. Why would a mirror only duplicate stuff with location- but not content-based addressing? I really fail to see that. Also, who is using mirrors or relays anyway? I don't know of any such software to be honest.

3. If there is a spam feed, I just unfollow it. Done. Not a concern for me at all. Not the slightest bit. And the byte verification is THE source of all broken threads when the conversation start is edited. Yes, this can be viewed as a feature, but how many times was it actually a feature and not more behaving as an anti-feature in terms of user experience?

4. I don't get your argument. If the feed in question is offline, one can simply look in local caches and see if there is a message at that particular time, just like looking up a hash. Where's the difference? Except that the lookup key is longer or compound or whatever depending on the cache format.

5. Even a new hashing algorithm requires work on clients etc. It's not that you get some backwards-compatibility for free. It just cannot be backwards-compatible in my opinion, no matter which approach we take. That's why I believe some magic time for the switch causes the least amount of trouble. You leave the old world untouched and working.

If these are general concerns, I'm completely with you. But I don't think that they only apply to location-based addressing. That's how I interpreted your message. I could be wrong. Happy to read your explanations. :-)
[47°09′25″S, 126°43′48″W] Transfer aborted