Pues en Italia ya se han planteado una huelga general por lo de la flotilla ⌘ Read more****
mentioning http://darch.dk/testing-syndication-via-rss-to-social-media-via-bufffer
(IP: 34.96.45.23)
mentioning http://darch.dk/testing-syndication-via-rss-to-social-media-via-bufffer
(IP: 34.96.45.23)
I think it's finally shaping a bit better now, but... ☝️
As I'm trying to put all the parts together, I decided to build multiple parallel UIs, to ensure I don't accidentally create a structure that is more rigid than planned.
I already decided on a UI that I would want to use for myself, it would be inspired by moshidon, misskey and some other "social feeds" mock-ups I found on dribbble.
I also plan on building a raw HTML version (for anyone wanting to do a full DIY client).
I would love to get any suggestions of what you would like to see (and possibly use) as a client, by sharing a link, app/website name or even a sketch made by you on paper.
I think I'll pick a third and maybe a fourth design to build together with the two already mentioned.
For reference, the screens I think of providing are (some might be optional or conditionally/manually hidable):
- Global / personal timeline screen
- Profile screen (with timeline)
- Thread screen
- Notifications screen or popup (both valid)
- DM list & chat screens (still planning, might come later)
- Settings screen (it'll probably be a hard coded form, but better mention it)
- Publish / edit post screen or popup (still analysing some use cases, as some "engines" might not have direct publishing support)
I also plan on adding two optional metadata fields:
-
display_name: To show a human readable alternative for a nick, it fallback to nick if not defined-
banner: Using the same format as avatar but the image expected is wider, inspired by other socials aroundI also plan on supporting any metadata provided, including a dynamically parsable regex rule format for those extra fields, this should allow anyone to build new clients that don't limit themselves to just the social aspect of twtxt, hoping to see unique ways of using twtxt! 🤞
The client must reference both properly or it would miss posts, including both this way is a bit pointless if you can't use the hash or url separately.
Being a highly likely a breaking change anyway I think @zvava proposal looks much better.
https://movq.de/v/f48c7cda09/IMG_20251001_200317.jpg.jpg
https://movq.de/v/f48c7cda09/IMG_20251001_202438.jpg.jpg
#<https://example.com/tw.txt#yyyy-mm-ddThh:mm:ssZ> is foolproof)
@<...> being mentions
Lizard or shark or something
>
(#abcdefghijkl https://example.com/tw.txt#:~:text=2025-10-01T10:28:00Z), because it can be simply hacked in to clients currently on hashv1 and provides an off-ramp to location-based addressingI like that property (an off-ramp to location-based addressing), so I think I could live with that approach. ✅
(I’m not sure why we’re using text fragments, though. Wouldn’t that link to the first occurence of
2025-10-01T10:28:00Z? That’s not necessarily correct. And, to be proper URLs that Firefox and Chromium understand, it would also need to be written as 2025%2D10%2D01T10:28:00Z. The dash carries meaning, sadly. I think all this just creates needless complication. How about we just go with https://example.com/tw.txt#2025-10-01T10:28:00Z?)
18:16 <aelaraji> quark 🙏 much appreciated but it won't be necessary, since there isn't much to miss out on in most of where I hang out, so I could just disconnect and spare everyone else the noise
18:17 *** aelaraji (aelaraji@776014f5a3edd32f1ed19658b7b85c8c655945b0feacaedd92fe60e61a3c0ae2) has quit (/ME goes "yeeeeet..!")
18:18 <quark> No noise for me.
18:18 <quark> It’s all good.
18:18 <quark> What would IRC be without on/offs?
18:19 <quark> Preeeety boring!
18:19 <quark> Ah, he was gone.
18:19 <quark> Well, I will twtxt this to him. LOL.
url field it finds. If there is none, it uses the URL that I’m using for fetching the feed.No validation, no logging.
In practice, I’ve not seen issues with people messing with this field. (What I do see, of course, is broken threads when people do legitimate edits that change the hash.)
I don’t see a way how anyone can impersonate anybody else this way. 🤔 Sure, you could use my URL in your
url field, but then what? You will still show up as zvava in my client or, if you also change your nick field, as movq (zvava).
url to be used for hashing. No matter if it points to a different feed or whatever. Just unsubscribe from malicious feeds and you're done.Since the first
url is used for hashing, it must never change. Otherwise, it will break threading, as you already noticed. If your feed moves and you wanna keep the old messages in the same new feed, you still have to point to the old url location and keep that forever. But you can add more urls. As I said several times in the past, in hindsight, using the first url was a big mistake. It would have been much better, if the last encountered url were used for hashing onwards. This way, feed moves would be relatively straightforward. However, that ship has sailed. Luckily, feeds typically don't relocate.
Sois la leche, os gusta más la idea de mi madre haciendo de castañera que hayamos conseguido una relatoria de la ONU ⌘ Read more****
En Star Trek, cuando viajan a nuestra era no usan Google como navegador sino DuckDuckGo.
Star Trek New Horizon. T2E3 ⌘ Read more****
Mira, me ha llamado mi madre contándome una buena historia.
Le han llamado del colegio del pueblo para que se disfrace de castañera y vaya a contarles historias a les niñes.
Les ha dicho que sí, pero que hablará de bellotas, que no hay castañas en la zona.
Está ilusionada, haciendo el mandil, buscando los cucuruchos y las trébedes.
Es muy ilusionante, porque este año iba a cerrar el colegio por falta de niñes. Y gracias a dos familias migrantes se ha mantenido abierto. ⌘ Read more****
(#abcdefghijkl https://example.com/tw.txt#:~:text=2025-10-01T10:28:00Z), because it can be simply hacked in to clients currently on hashv1 and provides an off-ramp to location-based addressing (though i still think the format should be changed to smth like #<abc... http://example.com/...> so it's cleaner once we finally drop hashes)
Handling it via the pod might work but I think it's not the best approach, external feeds and clients don't usually use a pod api but their own implementation, so any workaround won't work there.
That's why my proposals addressed those issues:
- the idea of using a "key" instead of the
url (with the url as a fallback), the key could even be a public key so it can be used verifieable in crypto functions- using the timestamp to prevent content changes to break threads (plus being simpler to implement)
- using an explicit thread reference with an alternative subject format (like
[#THREAD_ID] Hello world and replies with (#REPLY_ID) Ahoy) so the content can change without affecting the thread reference, and anyone can use their own schemes freely
The eye candy is always good to have.
cors-anywhere via docker in a minute and it would work the same.Still, I could write one with just a dozen lines of Go or Node.js, I might consider writing one after the client is working decently.
Há 33 anos atrás, ainda era a Internet Portuguesa uma criança, nasceu o primeiro #Talker Português, uma comunidade virtual que, 33 anos depois, continua activa.
Parabéns, #SelvaVirtual !
https://selva.grogue.org
Há 33 anos atrás, ainda era a Internet Portuguesa uma criança, nasceu o primeiro #Talker Português, uma comunidade virtual que, 33 anos depois, continua activa.
Parabéns, #SelvaVirtual !
https://selva.grogue.org
Há 33 anos atrás, ainda era a Internet Portuguesa uma criança, nasceu o primeiro #Talker Português, uma comunidade virtual que, 33 anos depois, continua activa.
Parabéns, #SelvaVirtual !
https://selva.grogue.org
url metadata field unequivocally treated as the canon feed url when calculating hashes, or are they ignored if they're not *at least* proper urls? do you just tolerate it if they're impersonating someone else's feed, or pointing to something that isn't even a feed at all?and if the first
url metadata field changes, should it be logged with a time so we can still calculate hashes for old posts? or should it never be updated? (in the case of a pod, where the end user has no choice in how such events are treated) or do we redirect all the old hashes to the new ones (probably this, since it would be helpful for edits too)
Como os comentaba el otro día, hemos participado como @tunubesecamirio en una relatoría de la ONU que habla del impacto en derechos humanos de los Centros de Datos, por su impacto en energía y agua
Es decir, un informe detallado donde explora como afecta este sector al derecho al agua y energía, y otros derechos humanos.
Podéis leerlo por aquí:
[https://tunubesecamirio.com/2025/09/30/el-relator-de-la-onu-muestra-el-impacto-en-los-derechos-humanos-al-agua-de-los-centro ... ⌘ [Read more](https://mastodon.social/@CorioPsicologia/115297635064585049)****
Hoy tengo la preocupación por la flotilla por las nubes.
https://globalsumudflotilla.org/tracker/ ⌘ Read more****
Using a copper wire or a similarly malleable material, pass it through a drilled hole, hammer it on one end until flat, then do the same on the other side.
It does the same job of a rivet but it's flatter and look nicer on both sides, it's of course weaker but still strong enough for small objects.
It's sometimes used to reduce risk of deformities due to heat in hand-crafted jewelry and to reduce costs of small tools.
Giving the user multiple choices to do the same things is what is great about protocols in general.
I too had the same issue being a browser-based request, so the only solution is using a proxy.
For testing (and real personal use) I rely on this one https://corsproxy.io/.
In my client, I first check if the source allows me to fetch it without issues first and fallback to prefixing with a proxy if it gives an error.
For security reasons the client don't give you a readable error for CORS, so you must use a catch-all for that, if it fails again with the proxy you can deal with any other errors it throws as you normally would (preferably outside of the fetch function).
After the fetching responded, I store the
response.url value to fetch it again for updates without having to do extra calls (you can store it verbatim or as a flag to be able to change the proxy later).Here an extract of my code:
t
export async function fetchWithProxy(url, proxy=null) {
return await fetch(url).catch(err => {
if (!proxy) throw err;
return fetch(`${proxy}${encodeURIComponent(url)}`);
});
}
// Using it with
const res = await fetchWithProxy('https://twtxt.net/user/zvava/twtxt.txt', 'https://corsproxy.io/?');
// Get the working url (direct or through proxy)
const fetchingURL = res.url;
// Get the twtxt feed content (or handle errors)
const text = await res.text();
I also plan to allow the user to define a custom proxy field, I like the solution used by Delta.chat in their android app, where you can define the URL format with a variable
https://my-proxy?$TWTXT_URL since it allows you to define with more freedom any proxy without a prefix format.If the idea of using a third-party proxy is not to the user liking they can use a self-hosted solution like
cors-anywhere or build their own (with twtxt it should just be a GET).
Qué bien que por fin se tipifíque como delito la violencia vicaria como violencia de género. ⌘ Read more****
Collection of purple poppy seeds and two of the pods they came from. The seeds are in a labeled packet with the date, useful for when we decide to plant them
Collection of purple poppy seeds and two of the pods they came from. The seeds are in a labeled packet with the date, useful for when we decide to plant them
Collection of purple poppy seeds and two of the pods they came from. The seeds are in a labeled packet with the date, useful for when we decide to plant them
He visto gorros por la calle...
#felizOtoño #felizMartes ⌘ Read more****
¡Mastdodón! ⌘ Read more****
A couple of weeks ago, I added CORS support, which is the source of the OPTIONS call. What I _didn't_ do was store the result so it stops trying to make further attempts. I'll get that in tomorrow.
As for the "If-Modified-Since" header, the server-based component of TwtStrm should be sending that (along with its user-agent tag and my user info). I wasn't sure if that could be sent with CORS requests, so I'll need to look into that a bit more.
Thanks, I appreciate the feedback!
#OpenStreetMap #FreeMaps #MapCarta
A ver, que se me ha olvidado lo de la ONU.
Este año hemos participado en una relatoria de la ONU, que hicieron especial sobre Agua y Energía sobre Derechos Humanos. Tenía un apartado especial sobre el tema del agua y los #centrosdedatos donde colaboramos como @tunubesecamirio
El informe había salido, y se me había pasado.
Mañana publicamos el tema. ⌘ Read more****
Ostrás, se me olvidó lo de la ONU 🫣 ⌘ Read more****
Access-Control-Allow-Origin header, so i just jumped into building a backend instead. did you find away around this limitation? :o
Em outubro vou dar este curso quintas à tarde com 4 encontros:
https://www.sescsp.org.br/programacao/ilustracoes-vetoriais-para-grandes-formatos-com-programacao/
#SescSP #TecnologiasEArtes
Captura de tela da página do curso no site do Sesc
Put up lots of thermometers and hygrometers in the apartment, have them report their readings wireless to a database.
I suspect that I’ll have to “build” these myself, because ready-to-use kits most like require some sort of cloud service. Dunno, haven’t checked yet.
Financial Times ha sacado esta pieza donde analiza la desaparición de los trabajos de iniciación al mercado laboral.
Uno de los elementos que analiza es la irrupción de la IA.
Como anécdota personal, puedo contar que el 30% de las tareas que realizaba en mis primeros 5 años de trabajo ahora las hacen IA, y me contrataron precisamente por esas tareas.
https://www.youtube.com/watch?v=IeTFpsuCor8
#JobApocalipsis [ ... ⌘ [Read more](https://mastodon.social/@CorioPsicologia/115288689770963537)****
El final de temporada, y serie? de Andor se está volviendo súper emocionante!
#andor2 ⌘ Read more****