# 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 195087
# self = https://watcher.sour.is?offset=195087
# prev = https://watcher.sour.is?offset=194987
Day 19 was a really nice puzzle. 😊
Scavenger's reign is child play next to this.... https://mastodon.social/@adhd_coffee/115235689271906711
@lyse That looks like an older bug report. Which groff version is that (groff --version)?
@lyse Very cool! 😎
Phlog is a blog for gopher. Web Log - Blog, Gopher log - Phlog.
Speaking of groff: I’ve been following their mailing list for a while now and this G. Branden Robinson person invests an *insane* amount of energy into that project. 🤯
Okay, now that I knew what to look for, I found existing bug reports:

- https://lists.gnu.org/archive/html/groff/2023-04/msg00400.html
- https://savannah.gnu.org/bugs/?63960

Most importantly:

> This is resolved in the groff trunk.

🥳
@prologic No, this is a Linux manpage from the man-pages project: https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man/man7/ascii.7

I do have an idea what’s going on. Could be an unfortunate interaction between the table preprocessor `tbl` and the `man` macro package. 🤔
@movq Is this for your own OS? 🤔
Task for this weekend:

https://movq.de/v/b05a7ce782/vid-1758959332.mp4

When you call man ascii, you get this nice table, but there’s a weird vertical line at the bottom. That line is supposed to be a vertical rule and is supposed to go from the bottom of the table all the way to the top.

Let’s see if I can debug this. (Not getting my hopes up at this point, but I’ll try.)
Salve @elmoneto@elmoneto !

Acho que quero fazer algo parecido com isso aqui, mas a minha incompetência / inexperiência me derruba...

Tenho um geodataframe com praças e parques, e um com massa de vegetação significativa (que peguei no geosampa), queria saber calcular em uma coluna o quanto cada praça está coberta de vegetação significativa...

https://gis.stackexchange.com/questions/421888/getting-the-percentage-of-how-much-areas-intersects-with-another-using-geopandas

Eu soube fazer um overlay de instersecção, filtrar as com área menor que 100m2 e usar o .explore() pra colorir as massas por área, já fiquei feliz, mas queria mais rsrsrs.

#python #geopandas #geoPython #GIS
Salve @elmoneto@elmoneto !

Acho que quero fazer algo parecido com isso aqui, mas a minha incompetência / inexperiência me derruba...

Tenho um geodataframe com praças e parques, e um com massa de vegetação significativa (que peguei no geosampa), queria saber calcular o quanto de cada praça está coberto de vegetação significativa...

https://gis.stackexchange.com/questions/421888/getting-the-percentage-of-how-much-areas-intersects-with-another-using-geopandas

Eu soube fazer um overlay de instersecção, filtrar as com área menor que 100m2 e usar o .explore() pra colorir as massas por área, já fiquei feliz, mas queria mais rsrsrs.

#python #geopandas #geoPython #GIS
🧮 USERS:1 FEEDS:2 TWTS:1476 ARCHIVED:90118 CACHE:2724 FOLLOWERS:22 FOLLOWING:14
Demos uma atividade de macramê, jogo rápido, para fazer um chaveiro. Meu colega Danilo fez um diagrama massa do nó base. Se fizer sempre pro mesmo lado ele torce todo, se alternar os lados fica reto o resultado (ambas as opções são legais). Diagrama do nó de macramê
What does phlog mean?
@lyse Not bad. 🤔 So this started out as a flat sheet and then you cut and folded it, like paper (more or less)?
@lyse very nice! What's the intended usage?
Quelqu'un a-t-il déjà compilé UnNethack sur #openbsd?
@bender Shh yes 🤣 this is the problem with politics 😆 by that definition; I'm not conservative 🤣
@prologic well, multiculturalism, immigration, and race (to mention a few, there is more) are key points on conservative's agendas. That's why I asked what you thought of it. You haven't replied yet. Of course, no answer is an answer, right?
@bender Yes but I guess what I'm saying is; "so what about it?" Aren't most places in the world these days "multicultural" to some degree or another? 🤔
@prologic growing up in a multicultural country has nothing to do with what you think about it, does it?
@bender Well see that's just what the freak'n tests say about me haha 🤣

> immigration and multiculturalism

What about it? I grew up in a multicultural country.
@lyse I give up. Just doesn’t give me a 360° video. 🥴 Maybe I’m just having bad luck with YouTube’s randomized stuff (maybe I’m getting “experiments”, who knows) …
@prologic this is 90 degrees fork. Now that you mention being conservative socialist (first I heard of the term, had to read some to grasp what's all about), what do think about immigration and multiculturalism?
@movq I'm glad it make sense for you 😅 I will never understand it. All I know is that I'm a conservative socialist and there's a lot of "stupid shit"™ happening in the world (_including my own country_). I still blame extreme Capitalism.
Okay @bender I _think_ I've made enough improvements now...

https://zsblog.mills.io/

🤞
@prologic Hm, I don’t know. Over here, we have parties that we would call “left” or “right”, one of them even calls themselves “The Left”. No idea about your political landscape, but it still makes sense for us. 🤔 For me, at least.
@bender 🤣
@prologic how dare you! (read it with Greta emphasis, and accent)
repo-bisect RIP 🪦
I hope no-one here is a "nutter" 🤣
@movq See here's the thing... I just don't fucking gt this whole "left" vs. "right" shit™ anymore. None of it makes any sense whatsoever. When my wife tries to explain it to me it's completely the opposite to what you just said just now 😱 -- So from here on, I'm just going to keep things simple" nutters" and "normal" 🤣
@bender I feel you buddy 🤗 At one point we have quite a vibrant community. Phil was great, jlj too and Adi was well just Ado 😅
I meant, "jlj". He used to be at https://twt.nfld.uk/, long gone now too. I wonder...
@prologic Germany was listed as “opposing” on https://fightchatcontrol.eu/ for a while, now it’s back to “undecided”. According to netzpolitik.org, it’s still debated. Also according to that page, there could be an important vote on the EU level on October 13/14.

The green party and the (far) left are opposing this (at least in Germany). Sadly, Germany is leaning more right with every year … As for young people: The (far) left is the strongest party among young people, with the (far) right being the second strongest one. (https://www.tagesschau.de/wahl/archiv/2025-02-23-BT-DE/umfrage-alter.shtml) Is there cause for hope? I don’t know.
@prologic you doing this reminded me of mkws, and Adi. Good times, we have seeing so many people come and go. It is kind of sad, when I think about "jjl", and Phil, and the many others...

I am feeling "mushy" today. Ugh, ageing sucks.
@bender Yup! Fixing that now! 👌 Also the Tags page and the size of the trags is intentional, as more posts are tagged with the same tag, those will result in larger size rendered tags in a kind of "tag cloud" -- At this this is the intention.
@prologic yup, that's what I meant. The lack of it on the URL is fine, but on the post itself it is always a good idea. Time frames matter.
Test.

@bender Ahh yes I see what you mean. no indicate of when the post was made right? That should be ideally displayed on the page somewhere? Would you expect it in the url as well, because not having /posts/yyyy/mm/dd/.... was _actually_ intentional. But yeah I should figure out where to put some additional metadata on the page.
@bender hopeful of the same 🤞
@prologic I can't upload a screenshot (tried, but Yarnd simple "ate" my reply). See https://zsblog.mills.io/posts/hello-zs-blog.html. Is has no date/time on it.
I will try to improve the CSS 🙏
> the single posts have no date (intended?)

What do you mean by this? 🤔
@movq LOL. I wish and hope they keep proposing it until the proposers die of natural causes, and then it vanishes. Hopeful thinking, I know...
@movq Kill it with fire 🔥
@prologic need to work on the CSS. For example, the tags are too big, the code blocks (and the inline ones) are too small, the single posts have no date (intended?), and so on. It's an alpha start!
@prologic They have not rolled it out (yet), they are “just” discussing it (for the n-th time).
https://zsblog.mills.io/ for anyone interested. I _think_ I still have some small tweaking to do befor eI use this for realz.
@alexonit Yeah I think we're overstating the UNIX principles a bit here 🤣 I get what you're trying to say though @zvava 😅 If I could go back in time and do it all over again, I would have gotten the Hash length correct and I _would_ have used SHA-256 instead. But someone way smarter than me designed the Twt Hash spec, we adopted it and well here we are today, it works™ 😅
@alexonit Yes well I'm pretty big on self-hosting. I've even tried to start a small business/company around it (_but that's another story for another day!_) -- Meanwhile I would encourage you to have a look at the work we've done in Salty.im 👌
@alexonit Well we have to really use the same spec or threading doesn't really work in a truly decentralized manner 😉
I once worked with a guy
That wrote a cool script
But since, he left github
Deleted all his repos with it.

Now the cool script is gone
remaining this poem I wrote instead
Doesn't rhyme, isn't cool, sounds bad.
That's what I'm using right now, while my own client is still in the making.

A simple bash script to write a post in a mktemp file then clean it with regex.
I don't even bother to hash the replies, I just open https://twtxt.net and copy the hash by hand since I'm checking the new posts from there anyway (temporarily, as I might end up DoS-ing everyone's feed in my client right now).
@prologic Don't worry about it!

I also getting angry thinking how this Chat Control crap will escalate to.

I'm already thinking of countermeasures and self-hosted alternatives, while searching lists of affected apps and services to replace/drop in the worst scenario (and probably devices).
@zvava Amazing! I would love to see all the specs described this way. 🤩
@prologic Well, personally I would, as I already do for user feeds in my client.

That's why part of my proposal was to allow custom strings and be free from a specific format that need periodical upgrades, but it's not much of a problem in the end.

I'll adapt to what we can get out of this.
@zvava I axtually latest did and I wasn't the only one 🤣
@zvava That's what I'm leaning towards yeah🤞
A análise do PCP* está um bocadinho melhor articulada que a minha:

* https://www.pcp.pt/insistencia-do-governo-em-medidas-fiscais-agrava-injusticas-promove-precariedade-na-habitacao

"Até agora, a redução da taxa para 10% estava condicionada à celebração de contratos com a duração mínima de dez anos, com esta alteração, passa a ser aplicada a taxa de 10% mesmo a contratos de apenas um ano (com rendas até 2300 euros). Na verdade, o Governo incentiva a conversão de contratos de longa duração em contratos de curta duração, desprotegendo os inquilinos e contribuindo para uma nova espiral de aumento das rendas."

"quer o alargamento das deduções com as despesas de arrendamento por parte dos inquilinos em sede de IRS – medida que deixa de fora mais de 40% dos inquilinos, pois não pagam IRS – , quer em particular a descida do IVA na construção para imóveis até 648 mil euros inserem-se numa orientação que privilegia e favorece um tipo de construção cujos valores não respondem às necessidades de quem procura arrendar ou comprar habitação"

"O País precisa [...] da regulação do mercado de arrendamento que coloque limites ao valor das rendas e force a sua descida. Precisa da promoção da estabilidade dos contratos de arrendamento assumindo os dez anos como referência."
plus, if hashv2 was implemented in combination with text fragments the way you proposed that would solve both scripting and human readability woes!!

...though, the presence of the text fragments then makes reversing the replied-to twt (and therefore its hash) trivial, which could allow clients to tolerate the omission of the hash — and while it would be 'non-standard' this would be the best of both worlds; potential to *tolerate* (or pave a glacial path toward? :o) human writable twts whilst keeping a unique id for twts that is universal across all pods
plus, if hashv2 was implemented in combination with text fragments the way you proposed that would solve both scripting and human readability woes!!

...though, the presence of the text fragments then makes reversing the replied-to twt (and therefore its hash) trivial, which could allow clients to tolerate the omission of the hash — and while it would be 'non-standard' this would be the best of both worlds; potential to *tolerate* (or pave a glacial path toward? :o) human writable replies whilst keeping a unique id for twts that is universal across all pods
@prologic to clarify the i meant the ability to parse feeds using unix command line utilities, as a prinicpal of twtxtv1's design. im not sure how feasible it is to build a simple feed reader out of common scripting utilities when hashing is in play, and;

i concede, it does make a lot of sense to fix up the hashing spec rather than completely supplant it at this point, just thinking about what the rewrite would be like is dreadful in and of itself x.x
@prologic to clarify: i meant the ability to parse feeds using unix command line utilities, as a principal of twtxtv1's design. im not sure how feasible it is to build a simple feed reader out of common scripting utilities when hashing is in play, and;

i concede, it does make a lot of sense to fix up the hashing spec rather than completely supplant it at this point, just thinking about what the rewrite would be like is dreadful in and of itself x.x
@zvava Haha 🤣
Please don't hate me today; I'm a bit grumpy and have too many reasons to be upset:

- 2 counts of pushing and trying to get the simplest things done at work (_that for some reason are made more difficult than they should be_)
- This whole Chat Control bullshit
- And some other person things going on that have been ongoing for 72 days and counting 🤬
And I need to make something absolutely clear as well here. Twtxt was completely and utterly dead back in {Aug 2020](https://yarn.social/about.html) when I came across the spec and its simplicity and realised the lost opportunity. Since then we've continued to grow a small but thriving community. The extensions we've built over time have stood and lasted the test of time for the past ~5 years. We need not break things too badly, because what we have today and was designed years ago _actually_ works quite well™ (_despite some flaws_).~
Put another way, what you are proposing/pushing for requires hundreds of lines of code to change across a half dozen or so clients and lots of breaking changes, not to mention unknowns.

What I want us to do is make only a few half dozen or so lines of code changes to our clients and minimize the breaking changes and unknowns.
@zvava Going to have to hard disagree here I'm sorry. a) no-one reads the raw/plain twtxt.txt files, the only time you do is to debug something, or have a stick beak at the comments which most clients will strip out and ignore and b) I'm sorry you've completely lost me! I'm old enough to pre-date before Linux became popular, so I'm not sure what UNIX principles you think are being broken or violated by having a Twt Subject (Subject) whose contents is a cryptographic content-addressable hash of the "thing"™ you're replying to and forming a chain of other replies (a thread).

I'm sorry, but the simplest thing to do is to make the smallest number of changes to the Spec as possible and all agree on a "Magic Date" for which our clients use the modified function(s).
@prologic the simplest thing to do is to completely forgo hashing anything because we are communicating using plain text files right now :3
@prologic the simplest thing to do is to completely forgo hashing anything because we are communicating using plain text files right now :3 while i agree hashes are incredibly helpful in the backend im not sure it has a place outside of it, it basically eliminates two core design principals of twtxt (human readability and integrating well with unix command line utilities) and makes new clients more difficult to build than it should be
@bender Well honestly, this is just it. My strong position on this is quite simple:

> Do the simplest thing that could work.

It's one of the age old UNIX philosphies.

Therefore, the simplest thing™ to do here is to just increase the hash length, mark a magic™ date/time as @lyse has indicated and call it a day. We'll then be fine for a few hundred years, at which point there'll be no-one left alive to give a shit™ anyway 🤣
edbrowse is like a Swiss Army Knife-it can do http, gopher, irc, email, and JS. The issue is it's slower with JS enabled.
@prologic considering other alternatives we have seeing (of which I have lost track already), yes. Why don’t you guys (client makers) take a step at a time and, for now, increase the hash length to deal with the collisions. Then location-based addressing can be added… or not, you know. 😅
🧮 USERS:1 FEEDS:2 TWTS:1475 ARCHIVED:90066 CACHE:2689 FOLLOWERS:22 FOLLOWING:14
@alexonit My problem is I don't see a world where we don't employ some form of cryptography to use as keys for threads in databases and other such things honestly. I'm not going to use url#timestamp as keys.
Oh man, if the EU _actually_ rolled out this horribd idea called ChatControl that _actually_ threatens the security and privacy of secure e2e encrypted messaging like Signal™, fuck me, I'm out 🤦‍♂️ I'll just rage quit the IT industry and become a luddite. I'm out.
A "explicação"* do Governo às "rendas moderadas" de 2.300€ dava um tratado.

* https://eco.sapo.pt/2025/09/25/rendas-de-2-300-euros-sao-moderadas-a-explicacao-do-governo/

Veja-se só:

"para poderem precisamente fixar-se e poderem constituir os recursos humanos que a nossa administração pública e as nossas empresas precisam para serem competitivas"

"uma família com dois ou três filhos em Lisboa e no Porto, muitas vezes não consegue ter uma habitação a um preço inferior a este"

"os 2.300 euros, nomeadamente nas zonas de maior pressão, apontam para um rendimento do agregado familiar na casa dos 5.000 euros para um agregado familiar de um pai, de uma mãe, dois filhos"

"também estão lá os funcionários públicos em início de carreira com 1.248 euros"

E a realidade em Portugal?

* salários mais baixos na Função Pública são 878,41 euros brutos mensais (2025)

* rendimento bruto médio de agregado familiar em Portugal era 3352€/mês (2022)

* casal de FPs a receber cada 1.248 euros/mês não ganha o suficiente para pagar uma renda mensal de 2300

Mas pronto, são rendas moderadas, os salários é que são baixos... ainda bem que o Governo vai subir o salário mínimo nacional para os 1200€... Ai não vai? É só 1100€ e para 2029? Ah, mas dá antes descontos aos senhorios, pode ser que seja mais ou menos a mesma coisa...

#ptpol #rendas*
@prologic I think a counter in the client is not a good choice given the decentralized nature of twtxt, especially if someone use multiple cients together.

After thinking about it for a while I got to two solutions:

Proposal 1: Thread syntax (using subject)

Each post have an implicit and an *optional* explicit root reference:

- Implicit (no action needed, all data required are already there)
- URL + timestamp

- Explicit (subject required)
- Identity (client generated)
- External reference
- Random value

We then add include a "root" subject in each post for generating explicit theads:
1. [ROOT_ID] (REPLY_ID): simpler with no need of prefixes
2. (root:ROOT_ID) (reply:REPLY_ID): more complex but could allow expansions
- (rt:ROOT_ID) (re:REPLY_ID): same but with a compact version
- ($ROOT_ID) (>REPLY_ID): same but with a single characters

Each post can have both references, like the current hash approach the reference can be treated as a simple string and don't have a real meaning.

Using a custom reference this way allows a client to decide how to generate them:
- Identity: can be a content hash or signature or anything else, without enforcing how it is generated we can upgrade the algorithm/length freely
- External references: can be provided from another system (Eg. 7e073bd345, *yarnsocial/yarn* latest commit)
- Random value: like a UUID (Eg. 9a0c34ed-d11e-447e-9257-0a0f57ef6e07)

Proposal 2: Threaded mentions (featuring zvava)

Inspired by @zvava's solution it could be simplified into: #<nick url#timestamp> or #<url#timestamp>

It can be shown like a mentions or hidden like a subject.

If we're using thinking of using a counter in the client, I think there's no point in avoiding the timestamp anymore.*
@bender Yes I did about a week or so ago. It took me a lot of effort to get the content even rendered in the first place. LOL I had to basically export my blog as HTML (_can you believe that?!_) -- The Hugo export just didn't work at all 🤣
Looking forward to see how it evolves! And happy to see you leaving behind micro. Good riddance! LOL.
@prologic While it might work if you want to keep both, I think the point was to be able to use one or the other, if we still have to generate the hash anyway it might be pointless to use this format.
@prologic I admit that I was a bit confused about the meaning of the message, at least I understood it was a "yes" from the last sentence. 😅
I just created a zs blogging template which I'm going to use for https://prologic.blog and I _might_ starting writing long-form again soon™ 🔜 So far the "blogging" template/engine (_if you weill_) is quite simple. It comprises essentially of an index.md a prehook and a few utilities:


$ git ls-files
.gitignore
.zs/config.yml
.zs/editthispage
.zs/include
.zs/layout.html
.zs/list
.zs/months
.zs/now
.zs/onthispage
.zs/posthook
.zs/postsbymonth
.zs/prehook
.zs/scripts
.zs/styles
.zs/tagcloud
.zs/taglist
.zs/years
archives/.empty
assets/css/site.css
assets/js/main.js
index.md
posts/hello-zs-blog.md
posts/on-tagging.md
posts/second-post.md
tags/.empty
@movq Yes it's kind of terrible 😞 -- Let's not do this 🤣
@bender Really? 🤔
@bender Well, you guessed correctly! 😁

Would be nice to have a fixed fee for that, a car is a car anywhere in the world...
@prologic That’s a completely flat threading model (you can’t reply to replies). Is that intentional?
@prologic that's not too bad! 👏🏻👏🏻👏🏻
This is possibly the only other threading model I can come up with for Twtxt that I think I can get behind.
Example:

Alice starts thread #42:


2025-09-25T12:00:00Z (tno:42) Launching storage design review.


Bob replies:


2025-09-25T12:05:00Z (tno:42) (ofeed:https://alice.example/twtxt.txt
) I think compaction stalls under load.


Carol replies to Bob:


2025-09-25T12:08:00Z (tno:42) (ofeed:https://alice.example/twtxt.txt
) Token bucket sounds good.
TNO Threading (draft):
Each origin feed numbers new threads (tno:N). Replies carry both (tno:N) and (ofeed:<origin-url>). Thread identity = (ofeed, tno).

- Roots: (tno:N) (implicit ofeed=self).
- Replies: (tno:N) (ofeed:<url>).
- Clients: increment tno locally for new threads, copy tags on reply.
- Subjects optional, not required.

...=
@itsericwoodward I'm glad to hear it 🤣
Of course we still have to fix the hashing algorithm and length.
I would personally rather see something like this:


2025-09-25T22:41:19+10:00	Hello World
2025-09-25T22:41:19+10:00	(#kexv5vq https://example.com/twtxt.html#:~:text=2025-09-25T22:41:19%2B10:00) Hey!


Preserving both content-based addressing as well as location-based addressing and text fragment linking.
Monica Rizzolli has edited a new smashing magazine that covers some cool historic and contemporary #CreativeCoding in Brazil (disclosure / bias warning: I'm on it). Published in Portuguese with an English translation of the text.
500 unique generative covers, art by Rod Junqueira and title variations by André Burnier.

https://www.indiegogo.com/projects/variavel-magazine
I was trying to say (_badly_):

> That's kind of my position on this. If we are going to make significant changes in the threading model, let’s keep content based addressing, but also improve the user experience. Answering your question, yes I think we can do some combination of both.
@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 ⌨️