@prologic@twtxt.net I only buy stuff like that, for example games on GOG.COM. Or simply CDs or DVDs. (Rarely I ābuyā a movie on some popular streaming service, fully aware that this is just ārenting itā.)
But yeah, I sadly have to agree with @bender@twtxt.net. š¢
@prologic@twtxt.net Fully agreed. Iām far more likely to buy such mediums when DRM-free. I never go near Amazon eBooks etc because of their lock-in, and I have a Kobo eReader which needs to have the books side loaded unless directly from the Kobo store. I prefer DRM-free files every time.
@thecanine@twtxt.net I found it! This looks like colored easter eggs when squinting.
@kat@yarn.girlonthemoon.xyz They all just wanted to be friends with a cool gal like you. ;-) Itās sad that putting things openly on the internet just waits to be raided by script kiddies, bots or spammers eventually.
@movq@www.uninformativ.de Yeah, like nearly all of them. There is the so called Bannwald, where it typically is not allowed to log, but thereās only one in my entire county and I havenāt even visted it. I should change that. https://de.wikipedia.org/wiki/Bannwald
Tom Waits in 2025 looks and sounds exactly like youād expect. š„“
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. š¤
hmm i need to start storing feed preambles so i can capture metadata like that
greek myth is crazy bc thereās the misogny but also yeah she IS getting that man pregnant. penelope and odysseus obviously (he literally WAS the one that carried telemachus) and ofc andromeda and perseus & hektor and andromache but also like. you cannot tell me helen didnāt get menelaos pregnant bffr
Twtxt was made for nerds, by nerds.
Iād like to change that. Itās by nerds/hackers, for nerds/hackers and friends of these. It doesnāt have to be hacky all the time, as you donāt need to be a nerd to have a blog.
But, for that to happen, someone has to build the tools to improve UX.by design there really is no way to easily discovers others
Yeah, I agree, and although there are directories of email addresses, usually you donāt want that, unless you are a āpublic figureā.
I couldnāt say that a microblogging is a āsocial networkā by default, as a blog is not either. At the same time, people would expect to find new people and conversations, as youād do in a forum.
I think of two features on top of the current spec:
- Clients showing a few posts of what your following are watching but you donāt, so perhaps you find something interesting to follow next. Or that feature of āYour āfollowingsā are following these accounts/peopleā. (Hard to explain in english, but I hope you get the idea)
- Sharing your .txt into some directory, saying āHey, I have this twtxt URL, I want to be discoveredā. Iām thinking of something like the Federated tab on Mastodon.
@xuu@txt.sour.is like feeds+bridgy.fed? Will be happy anyway
@doesnm@doesnm.p.psf.lt haha its not coming back. he talked of a stand alone thing like feeds. but not in yarnd
Guilty pleasure, blasphemy, shitty audio, ⦠something like that. Seven Nation Army on double bass. 𤪠https://movq.de/v/e3a4dcff2e/sad-nation-army.ogg
@eapl.me@eapl.me Interesting! Two points stood right out to me:
Why the hell are e-mail newsletters considered a valid option in the first place? Just offer an Atom feed and be done with it! Especially for a blog of this very type. This doesnāt even involve a third party service. Although, in addition he also links to Feedburner, what the fuck!? No e-mail address or the like is needed and subject to being disclosed.
When these spam mailers want to prevent resubscribing, then for fuckās sake, why donāt they use a hash of the e-mail address (I saw that in yarnd) for that purpose? Storing the e-mail address in clear text after unsubscribing is illegal in my book.
@prologic@twtxt.net In all seriousness: Donāt worry, Iām not going to host some Fediverse thingy at the moment, probably never will. š
But I do use it quite a lot. Although, I donāt really use it as a social network (as in: following people). I follow some tags like #retrocomputing, which fills my timeline with interesting content. If there was a traditional web forum or mailing list or even a usenet group that covered this topic, Iād use that instead. But thatās all (mostly) dead by now. ā¹ļø
Thank you @python_valencia@twtxt.python-valencia.es for letting me show you the secrets of a decentralised plain text social network like twtxt.
I hope you enjoyed the talk! ā¤ļøš
#python #twtxt
The Mastodon admins say that itās probably because of the size of my account (~600 MB), so the export process times out. And I understand that. Here on twtxt, I always use auto-expiring links when I post images or videos. It just gets too much data otherwise. I think Iāll just set my Mastodon account to auto-delete posts after ~180 days or something like that. Nobody cares about old posts anyway.
š
Is it working now?
Iād say again that perhaps the DMs could be stored in another .txt, but anyway Iād like to try it.
@kat@yarn.girlonthemoon.xyz Pointers can be a bit tricky. I know it took me also quite some time to wrap my head around them. Let my try to explain. Itās a pretty simple, yet very powerful concept with many facets to it.
A pointer is an indirection. At a lower level, when you have some chunk of memory, you can have some actual values sitting in there, ready for direct use. A pointer, on the other hand, points to some other location where to look for the values oneās actually after. Following that pointer is also called dereferencing the pointer.
I canāt come up with a good real-world example, so this poor comparison has to do. Itās a bit like you have a book (the real value that is being pointed to) and an ISBN referencing that book (the pointer). So, instead of sending you all these many pages from that book, I could give you just a small tag containing the ISBN. With that small piece of information, youāre able to locate the book. Probably a copy of that book and thatās where this analogy falls apart.
In contrast to that flawed comparision, itās actually the other way around. Many different pointers can point to the same value. But there are many books (values) and just one ISBN (pointer).
The pointerās target might actually be another pointer. You typically then would follow both of them. There are no limits on how long your pointer chains can become.
One important property of pointers is that they can also point into nothingness, signalling a dead end. This is typically called a null pointer. Following such a null pointer calls for big trouble, it typically crashes your program. Hence, you must never follow any null pointer.
Pointers are important for example in linked lists, trees or graphs. Letās look at a doubly linked list. One entry could be a triple consisting of (actual value, pointer to next entry, pointer to previous entry).
_______________________
/ ________\_______________
ā ā | \
+---+---+---+ +---+---+-|-+ +---+---+-|-+
| 7 | n | x | | 23| n | p | | 42| x | p |
+---+-|-+---+ +---+-|-+---+ +---+---+---+
| ā | ā
\_______/ \_______/
The āxā indicates a null pointer. So, the first element of the doubly linked list with value 7 does not have any reference to a previous element. The same is true for the next element pointer in the last element with value 42.
In the middle element with value 23, both pointers to the next (labeled ānā) and previous (labeled āpā) elements are pointing to the respective elements.
You can also see that the middle element is pointed to by two pointers. By the ānextā pointer in the first element and the āpreviousā pointer in the last element.
Thatās it for now. There are heaps ;-) more things to tell about pointers. But it might help you a tiny bit.
Hahaha, a bird is singing really load and it sounds almost exactly like a car alarm. Well, itās probably the other way around, the car alarm was modeled after the birdcall. :-)
@lyse@lyse.isobeef.org I guess the thing is that usernames are no longer needed for many popular things, like WhatsApp. āJust install the appā, done. When I ran my Matrix server for our family, this was the first thing that people were bummed out about: āOh, this needs a username and a password? Why doesnāt it just work? Thatās annoying.ā
People are less and less exposed to ālow-levelā details like this. There was also this story in 2021 about the concept of a āfileā: https://www.theverge.com/22684730/students-file-folder-directory-structure-education-gen-z
Itās extremely surprising to me that younger non-technical people just type in their full name (properly cased first and last name with a space in between) for a technical username in account registration or login forms. Iāve seen that happening several times in the past few years. The field name is āBenutzernameā in German, literally āusernameā. Even adding a placeholder text to signal that they could simply use their nickname in lowercase did not change anything at all. Well, one person used at least an e-mail address.
This wasnāt the case six, seven years ago, everybody had some ārealā username. Even non-techies. It looks like some ācommon knowledgeā is getting lost. Strange. Very weird. It trips me every time I see it.
Have you experienced something similar?
Ctrl+Left
to jump a word left, I get 1;5D
in my tt2 message text. My TERM
is set to rxvt-unicode-256color
. In tt
, it works just fine. When I change to TERM=xterm-256color
, it also works in tt2
. I have to read up on that. Maybe even try to capture these sequences and rewrite them.
@lyse@lyse.isobeef.org Thereās a reason itās called ā(n)cursesā. š The only advice I can give is to never fiddle with reassigning control sequences and $TERM
variables. Leave $TERM
at whatever value the terminal itself sets and use an appropriate terminfo file for it. If there are programs misbehaving, they probably blindly assume XTerm and should be fixed (or have XTerm as a hard requirement). If you try to fix this on your end, itāll likely just break other programs. š„“
Ctrl+Left
to jump a word left, I get 1;5D
in my tt2 message text. My TERM
is set to rxvt-unicode-256color
. In tt
, it works just fine. When I change to TERM=xterm-256color
, it also works in tt2
. I have to read up on that. Maybe even try to capture these sequences and rewrite them.
Well, some time ago I put this in my ~/.Xdefaults:
URxvt.keysym.Control-Up: \033[1;5A⨠URxvt.keysym.Control-Down: \033[1;5B
URxvt.keysym.Control-Left: \033[1;5D⨠URxvt.keysym.Control-Right: \033[1;5C
Probably to behave more like XTerm and fix a few other issues I had with other programs. But, it turns out, tcell expects the original sequence: https://github.com/gdamore/tcell/blob/main/terminfo/r/rxvt/term.go#L487
Hmm.
i really wanna learn golang it looks fun and capable and i can read it kind of but every time i try it iām immediately stuck on basic concepts like āwhat the fuck is a pointerā (this has been explained to me and i still donāt get it). i did have types explained to me as like notes on code which makes sense a bit but iām mostly lost on basic code concepts
I always find the āAdven of codeā challenges difficult to follow.
i18n-puzzles.com has been a blast, but I donāt like having to think about puzzles on weekends. Like with exercise, doing it every day without rest doesnāt sound healthy.
Iād rater have a weekly challenge, at most three.
@kat@yarn.girlonthemoon.xyz Using full-blown Cloud services is good for old people like me who donāt want to do on-call duty when a disk fails. š I like sleep! š
Jokes aside, I like IaaS as a middle ground. There are IaaS hosters who allow you to spin up VMs as you wish and connect them in a network as you wish. You get direct access to all those Linux boxes and to a layer 2 network, so you can do all the fun networking stuff like BGP, VRRP, IPSec/Wireguard, whatever. And you never have to worry about failing disks, server racks getting full, cable management, all that. š
Iām confident that we will always need people who do bare-bones or ālow-levelā stuff instead of just click some Cloud service. I guess that smaller companies donāt use Cloud services very often (because itās way too expensive for them).
@kat@yarn.girlonthemoon.xyz think iāll wait and see if the caddy module proposal gets anywhere bc that sounds like itād make my life easier lol
anyway. do u like pretty covers of pretty songs. well check out this pretty cover of coldplay viva la vida by a k-pop girl whoās got PIPES i love her so much https://www.youtube.com/watch?v=nmk0-dXSYPI
well, I assume by syntax you mean Gemtext (which I like a lot, my personal blog is built on top of it), so I think it might work for twtxt clientsā¦
I knew of twtxt in Gemini Antenna, so at least the 2017 spec might work on that protocol. I think the main issue with extensions is that they werenāt designed with many URLs and protocols in mind.
Also I have to admit that the Gemini community significantly reduced in the last few years. I donāt know how worth it is to add support for Gemini now.
@kat@yarn.girlonthemoon.xyz iām just winging it with fail2ban and robots.txt tbh itās a miracle the poor server hasnāt fallen over yet from the scrapers lol. like i run this whole thing off a macbook iām not even joking https://superlove.sayitditto.net/
Thatās a great idea. I am running GoToSocial in a local server (like Raspberry Pi) and itās working fine.
@kat@yarn.girlonthemoon.xyz Oh, yes, itās probably going to be something like gotosocial or snac. Itās got to be as lightweight as possible. (I call this whole thing āMastodonā, but youāre right, thatās not quite correct. š )
@movq@www.uninformativ.de mastodon is probably the worst fedi software to self host tbh, you might wanna check out gotosocial? not to like pull you in another direction but idk masto is just suuuuper heavy lol
ah crap. chapters 2, 4 and 5 are being cropped by yarn on upload. they should be more like 2-3 hours long
Like
2025-01 Fri [ ] Take out Trash @weekly
For a task that starts the first Friday of January and repeats weekly.
This guy doing a dub techno mix and his GF in the background does yoga ⦠which ⦠sometimes ⦠looks a bit like thereās just a dead body on the floor. š
wahhh i wanna work towards my dream of offering pay as you can web hosting (static & dynamic) but i donāt know how!!!!! i keep drifting towards hosting panels but i donāt exactly have fresh linux servers for those nor do i like the level of access they require. so iām like ok i can do the static site part with SFTP chroot jails and a front-end like filebrowser or somethingā¦. but then what about the dynamic sites!!!!!!! UGH
granted i doubt iād get much interest in dynamic sites but iād like to do this old school where i can offer people isolated mySQL databases or something for some project (iām thinking PHP based fanlistings), which means i could do it the old school way of⦠people ask me to run it and i do it for them. but i kind of want to let people have access to be able to do it themselves just short of giving them SSH access which isnāt happening
it seems like yarn still points my nick to both my older URL (404 now) along with the current one.
Iād like to know more about what andros and prologic are talking about, I feel lost.
āThis will be managed by Registries.ā Are we talking about these registries?
https://twtxt.readthedocs.io/en/latest/user/registry.html
SQL scares me i tweaked a bash script that pulled from a DB and the bash part was easy even if i was just going off of the code in there that i didnāt write (like i understood it at least) but the SQL parts had me suffering
ah! those german calendars. Somehow I was thinking of something like mine, with spaces to write inside each day.
I worked for a german company and they gave away these calendars to our clients and team every year, but the model you can hang on the wall. Memory unlocked!
@lyse@lyse.isobeef.org Ah, yes, a calendar that shows the past $x
months is great! I have this as a widget in my bar:
Before that I also used something like cal
. It works, but itās a bit cumbersome.
@eapl.me@eapl.me @bender@twtxt.net @prologic@twtxt.net Not including a photo was a stupid move, sorry. There you go:
This particular one is 95mm wide and 185mm high. Fairly compact.
I can only use it figure out distances to other dates and to do some basic calendar math. Iām not able to actually schedule anything. But I grew up with a month calendar like you have there where all appointments of the entire family was recorded.
By far most of my paper use is drawing random stuff on scratch paper during meetings. :-D
@prologic@twtxt.net @lyse@lyse.isobeef.org I like to listen to you.
I got a small desk calendar as advertising gift. It shows three months at once. Iām using this thing since the beginning of this year and I have to say that it turned out to be super useful. Iām happily surprised.
It sits on my desk next to my rightmost monitor. Iāve set it up so that I can see the last, current and next months. Each morning, I advance the ātoday windowā or whatever its proper name is. This gives me a sense of what date we have today and which I will have forgotten half a minute later already. At most. However, itās easily at hand by turning my head just a few degrees.
With the last month still showing, I had several occasions so far where a date in the past popped up in a meeting. I could easily tell when something happened, how long ago that was. Or how many days or weeks are left until we have to deliver something, etc.
In hindsight, this is absolutely no surprise at all. But I still find it fascinating. Iām now actually wondering why I never had something like that before. How could I live without that thing? Sure, I pulled up a calendar on my computer, ncal -w3
or so. But I always hated the inverted ncal
output, necessary for showing week numbers, though. Having a paper calander right next to my screen at all times is sooooo much more handy.
So, do yourself a favor and think about whether such a desk calendar might be useful to you.
The only annoying thing is that the ātoday windowā moves too easily. It slips down by its own. I reckon it wants me to regularly interact with it, so that I memorize the current date.
well (insert stubborn emoji here) š, word blog
comes from weblog, and microblogging could derivate from āsmaller weblogā. https://www.wikiwand.com/en/articles/Microblogging
Iād differentiate it from sharing status updates as it was done with āfingerā or even a BBS. For example, being able to reply; create new threads and sharing them on a URL is something we could expect from āTwitterā, the most popular microbloging model (citation needed)
I like to discuss it, since conversations usually are improved if we sync on what we understand for the same words.
pls elaborate on a āp2p databaseā, āall storyā and āRegistriesā.
My first thought takes me to something like secure-scuttlebutt
which itās painful to sync data using clients, and too slow compared to downloading a text file.
Also Iād like for twtxt to avoid becoming an ActivityPub. Works well but itās uses too many resources IMO.
https://kingant.net/2025/02/mastodon-the-cost-of-running-my-own-server/
Iām defending being able to self-host your Web client (like youād do with a Wordpress, twtxt is a micrologging, at the end), instead of federated instances, so in a first thought Iād say Registries have many disadvantages being the first one that someone has to maintain them active.
Iād need to think about it deeply, but at a first sight, nanoblogging
would be a simple text (like the original twtxt spec, aimed for TUIs), and microblogging
(like Twitter was a few years ago), would be about sharing texts, images, videos, GIFs, links, and perhaps Markdown styling.
Why? You have shorter messages than in a blog, but you may add almost anything you could do in a blog.
Buuut⦠who knows?
Iāve never liked the behavior of OpenBSDās shell where it just scrolls horizontally:
https://movq.de/v/1371f7efbc/vid-1741714971.mp4
But now Iām this close to implementing the same thing in my own shell ā because itās probably much, much easier than multiline stuff. š
@aelaraji@aelaraji.com Thatās how twtxt started: As microblogging. Yarn shifted up some gears and now itās more like social media ā more powerful, but a bit different. š
twtxt is a decentralised, minimalist microblogging service for hackers.
The keyword here is microblogging
. But it doesnāt feel like weāve been (relatively speaking) doing much of that lately⦠maybe I go the concept of microblogging
wrong.
@prologic@twtxt.net huh interesting! yeah i was stumped for a bit i was like WHAT config.json file are these logs talking aboutā¦. but then it worked after i moved the old meta.json file lol!
@kat@yarn.girlonthemoon.xyz it was likeā¦. meta.json was corrupt or well it was empty actually whatever idk. ended up moving that elsewhere temporarily, rebuilding the binary, restarting server⦠and it worked?!?!? shit was confusing
@prologic@twtxt.net oops, Iām sorry to see disagreement leading to draining emotions.
It remind me a bit of the Conclave movie where every part wanted to defend their vision and there is only a winner. If one wins the other loses. Like the political side of many leaders and volunteers representing a broad community. I donāt think thatās the case here. Most of us (in not all) should āwinā.
I can only add that isnāt nice to listen that āmy idea and effortā is not what the rest of the people expect. I personally have a kind of issue with public rejection, but I also like to argue, discuss and even fight a bit. āA gem cannot be polished without friction, nor a man perfected without trials,ā they say.
This exercise and belonging to this community also brings me good feelings of smart people trying to solve a human and technical problem, which is insanely difficult to get ārightā.
I genuinely hope we can understand each other, and even with our different and respectful thoughts on the same thing, we might reach an agreement on whatās the best for most people.
Good vibes to everyone!
Why not just use registry? It can be personal or hosted by someone like registry.twtxt.org. Just need to be adapt to support hashes
If we donāt keep insisting on simplify and āThe beauty of twtxt is, you put one file on your server, done. One.ā, then people should just use ActivityPub-based software like Mastodon, PixelFed, etc. which are getting a lot of attention and uses migrating to the fediverse from meta/x here in Denmark over the last couple of months.
@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.
Thanks, @xuu@txt.sour.is, great explanation. In another project Iāve structured it exactly like you wrote. The mock storage over there extends the SQLite storage and provides mechanism to return errors and such for testing purposes:
- storage/ defines the interface
- sqlite/ implements the storage interface
- mock/ extends the SQLite implementation by some mocking capabilities and assertions
- sqlite/ implements the storage interface
Here, however, there are no storage subpackages. Itās just storage
, thatās it. Everything is in there. The only implementation so far is an SQLite backend that resides in storage
. My RAM storage is exactly that SQLite storage, but with :memory:
instead a backing file on disk. I do not have a mock storage (yet).
I have to think about it a bit more, but I probably have to do exactly that in my tt
rewrite, too. Sigh. I just have the feeling that in storage/sqlite/sqlite_test.go I cannot import storage/mock for the helper because storage/mock/mock.go imports and embeds the type from storage/sqlite. But Iām too tired right now to think clearly.
@lyse@lyse.isobeef.org OK. So how I have worked things like this out is to have the interface in the root package from the implementations. The interface doesnāt need to be tested since itās just a contract. The implementations donāt need to import storage.Storage
- storage/ defines the
Storage
interface (no tests!)
- storage/sqlite for the sqlite implementation tests for sqlite directly
- storage/ram for the ram implementation and tests for RAM directly
- storage/sqlite for the sqlite implementation tests for sqlite directly
- controller/ can now import both storage and the implementation as needed.
So now I am guessing you wanted the RAM test for testing queries against sqlite and have it return some query response?
For that I usually would register a driver for SQL that emulates sqlite. Then itās just a matter of passing the connection string to open the registered driver on setup.
https://github.com/glebarez/go-sqlite?tab=readme-ov-file#connection-string-examples
@xuu@txt.sour.is My layout looks like this:
- storage/
- storage.go: defines a
Storage
interface
- sqlite.go: implements the
Storage
interface
- sqlite_test.go: originally had a function to set up a test storage to test the SQLite storage implementation itself:
newRAMStorage(testing.T, $initialData) *Storage
- storage.go: defines a
- controller/
- feeds.go: uses a
Storage
- feeds_test.go: here I wanted to reuse the
newRAMStorage(ā¦)
function
- feeds.go: uses a
I then tried to relocate the newRAMStorage(ā¦)
into a
- teststorage/
- storage.go: moved here as
NewRAMStorage(ā¦)
- storage.go: moved here as
so that I could just reuse it from both
- storage/
- sqlite_test.go: uses
testutils.NewRAMStorage(ā¦)
- sqlite_test.go: uses
- controller/
- feeds_test.go: uses
testutils.NewRamStorage(ā¦)
- feeds_test.go: uses
But that results into an import cycle, because the teststorage
package imports storage
for storage.Storage
and the storage
package imports testutils
for testutils.NewRAMStorage(ā¦)
in its test. Iām just screwed. For now, I duplicated it as newRAMStorage(ā¦)
in controller/feeds_test.go.
I could put NewRAMStorage(ā¦)
in storage/testutils.go, which could be guarded with //go:build testutils
. With go test -tags testutils ā¦
, in storage/sqlite_test.go could just use NewRAMStorage(ā¦)
directly and similarly in controller/feeds_test.go I could call storage.NewRamStorage(ā¦)
. But I donāt know if I would consider this really elegant.
The more I think about it, the more appealing it sounds. Because I could then also use other test-related stuff across packages without introducing other dedicated test packages. Build some assertions, converters, types etc. directly into the same package, maybe even make them methods of types.
If I went that route, I might do the opposite with the build tag and make it something like !prod
instead of testing. Only when building the final binary, I would have to specify the tag to exclude all the non-prod stuff. Hmmm.
Dang it! I ran into import cycles with shared test utilities again. :-( Either I have to copy this function to set up an in-memory test storage across packages or I have to put it in the storage package itself and guard it with a build tag that is only used in tests (otherwise I end up with this function in my production binary as well). I donāt like any of the alternatives. :-(
@eapl.me@eapl.me Sounds like a great idea! š
a few async ideas for later
The editing process needs a lot of consideration and compromises.
From one side, editing and deleting itās necessary IMO. People will do it anyway, and personally I like to edit my texts, so Iād put some effort on make it work.
Should we keep a history of edits? Should we hash every edit to avoid abuse? Should we mark internally a twt as deleted, but keeping the replies?
I think thatās part of a more complete āthreadā extension, although Iād say itās worth to agree on something reflecting the real usage in the wild, along with what people usually do on other platforms.
looks good to me!
About aliceās hash, using SHA256, I get 96473b4f
or 96473B4F
for the last 8 characters. Iāll add it as an implementation example.
The idea of including it besides the follow URL is to avoid calculating it every time we load the file (assuming the client did that correctly), and helps to track replies across the file with a simple search.
Also, watching your example Iām thinking now that instead of {url=96473B4F,id=1}
which is ambiguous of which URL we are referring to, it could be something like:
{reply_to=[URL_HASH]_[TWT_ID]}
/ {reply_to=96473B4F_1}
That way, the āfull twt IDā could be 96473B4F_1
.
@eapl.me@eapl.me There are several points that I like, but I want to highlight number 7. https://text.eapl.mx/a-few-ideas-for-a-next-twtxt-version #twtxt
I really like the proposal and your ideas. I have been reading your articles and several points seem very interesting to me.
I like this syntax, you have my vote, although Iād change it a bit like
#<Alice https://example.com/twtxt.com#2024-12-18T14:18:26+01:00>
Hashes are not a problem on PHP, I dont know why itās slow to calculate them from your side, but I agree with your points.
BTW, did you have the chance to read my proposal on twtxt 2.0? I shared a few ideas about possible improvements to discuss:
https://text.eapl.mx/a-few-ideas-for-a-next-twtxt-version
https://text.eapl.mx/reply-to-lyse-about-twtxt
@lyse@lyse.isobeef.org Looks like a nice day. š I tried to go on a quick walk, but it was really cold. And everythingās wet at the moment. Bah.
Clothespins in the woods, who would have thunk? š„“
We went up our backyard mountain again right after lunch. The sun peaked through the clouds sometimes. The 6°C felt much, much cooler with the northeast wind. We got lucky, though, it was dead calm at the summit. At least on the southwestern side, which is a few meters lower than the very top to the east. That was shielded absolutely perfectly from the wind (we were extremely surprised), so we sat down on a bench and could really enjoy the sun heating us up. Apart from the haze, the view was really nice.
There were even patches of snow left up top, that was unexpected. Also, somebody created a cool rock art piece on a tree stump. That one rock absolutely looked like a face. Crazy!
@thecanine@twtxt.net I like the clipboard function of HeliBoard very much.
@movq@www.uninformativ.de I donāt know. It seems a bit like whatever we do or donāt do, weāre gonna lose. :-( Unless the ban is successful.
I have the same feeling at my job. Every time I return to old projects, itās like my first time.
Amd of course, TDD! I tried that, but it doesnāt work all that great for me in its strict form. I have the feeling that coming up with a single new failing test, making it pass, maybe some refactoring, rinse and repeat wastes significantly more time than doing it in ā what they call ā the ābundleā approach. Coming up with several tests in advance and then writing the code or vise versa is usually much quicker. I do find that more enjoyable, it also helps me to reduce smaller context switches. I can focus on either the tests or the production code.
As for the potentially reduced code coverage with a non-TDD approach, I can easily see which parts are lacking tests and hand them in later. So, thatās largely a specious argument. Granted, I can forget to check the coverage or simply ignore it.
I agree with John, TDD results in less elegant code or requires more refactoring to tidy it up. Sometimes, itās also not entirely clear at the beginning how the API should really look like. It doesnāt happen often, but it does happen. Especially when experimenting or trying out different approaches. With TDD, I then also have to refactor the tests which is not only annoying, but also involves the danger of accidentally breaking them.
TDD only works really well, if you have super tiny functions. But we already established that I typically donāt like tiny methods just for the purpose of them being extremely short.
When fixing a bug, I usually come up with a failing test case first to verify that my repaired code later actually resolves the problem. For new code, it depends, sometimes tests first, sometimes the productive code first. Starting off with the tests requires the API to be well defined beforehand.
@thecanine@twtxt.net Thatās one of my favorite dogs. Very cute. I like its headband and bandana with the bones.
@movq@www.uninformativ.de You are right. Like I said in my (german only post) to the election results: āIt saddens me and makes me think.ā ā¦
@bender@twtxt.net @prologic@twtxt.net The outcome was to be expected but itās still pretty catastrophic. Hereās an overview:
East Germany is dominated by AfD. Bavaria is dominated by CSU (itās always been that way, but this is still a conservative/right party). Black is CDU, the other conservative/right party.
The guy whoās probably going to be chancellor recently insulted the millions of people who did demonstrations for peace/anti-right. āIdiotsā, ātheyāre nutsā, stuff like that. This was before the election. He already earned the nickname āMini Trumpā.
Both the right and the left got more votes this time, but the left only gained 3.87 percentage points while the right (CDU/CSU + AfD) gained 14.72:
The Green party lost, SPD (āmid-leftā) lost massively (worst result in their history). FDP also lost. These three were the previous government.
This isnāt looking good at all, especially when you think about whatās going to happen in the next 4 years. What will CDU (the winner) do? Will they be able to āturn the ship aroundā? Highly unlikely. They are responsible for the current situation (in large parts). They will continue to do business as usual. They will do anything but help poor/ordinary people. This means that AfD will only get stronger over the next 4 years.
Our only hope would be to ban AfD altogether. So far, nobody but non-profit organizations is willing to do that (for unknown reasons).
I donāt even know if banning the AfD would help (but itās probably our best/only option). AfD politicians are nothing but spiteful, hateful, angry, similar to Trump/MAGA. If youāve seen these people talk and still vote for them, then you must be absolutely filled with rage and hatred. Very concerning.
Correct me if Iām wrong, @lyse@lyse.isobeef.org, @arne@uplegger.eu, @johanbove@johanbove.info.
@andros@twtxt.andros.dev I believe you have just reproduced the bug⦠it looks like youāve replayed to a twt but the hash is wrong. I can see the hash here from Jenny, but it doesnāt look like it corresponds to any{twt,thing}. if you check it out on any yarn instance it wonāt look like a replay.
It was mostly cloudy, but every now and then the sun peaked through. With very little wind, the 12°C felt quite nice. Especially for a hike. With the sun completely hidden and more wind, the lunch break at the summit was a bit chilly, though.
Thereās a bad looking crack in the climbing rock in 10. When you have eagle eyes, you might be able to see the hooks in the cliff for the climbing ropes. I havenāt seen this one before. Also, it looked like several cubic meters of earth, grass and rock fell off the top.
On the way home, it got much more sunny. I found yet another skyrocket stick. That was pretty neat. And we saw the first field of snowdrops. With some bees checking them out. In total we walked a bit over 15km.
More pics: https://lyse.isobeef.org/waldspaziergang-2025-02-23/
I do like this new laptop
I suspect the problem is that the content is updated. It looks like a design problem.
@prologic@twtxt.net Agreed! But clients can hallucinate and generate wrong hashes
aka Lies
𤣠Also, If you chheck your own twt on twtxt.net, it looks like a root twt instead of a replay.
@bender@twtxt.net Donāt panic. Iāve just been testing my implementation. The great advantage of Twtxt is itās openness, I think. So DM spamming would contradict to this feature I like. ā¤
@prologic@twtxt.net Iāll have you know it took me minutes of time to get the mouse suspended like that by that rats nest!
I really like the concept of ātwtā. Itās the perfect blend of txt and twtxt. An abbreviated form. Even though itās the name given to posts, I personally find it very nice.
#twtxt
Nice photo. The fire looks like magic.
@off_grid_living@twtxt.net You could try starting it in the terminal in order to spot errors. Just open the GNOME Terminal or something like that and then type in ākolourpaintā and hit Enter.
@arne@uplegger.eu Hi! I love that youāre implementing it! Maybe, when weāre both done, we could test the clients by communicating both.
I donāt think Iām going to be able to help you much, my knowledge of OpenSSL and PHP is not as high as Iād like it to be.
Maybe the OpenSSL version uses SHA-1 by default in PHP. Or that the IV is derived together with the key (not generated separately). But Iām not able to answer your questions, sorry.
Iām invoking the commands directly, without any libraries in between. Maybe that would help you?
But that is not how it should work. š
@falsifian@www.falsifian.org Oh, thatās neat! Interesting how āobviouslyā isnāt all that obvious at all, even to the contrary. I reckon I have to read up on that subject on the weekend. :-)
I like how Ianās and your photo complement each other, winter and summer join forces for something special. :-)
4, but I like the idea of @eapl_en@eapl.me
Iām surprised, here you canāt find dial controls anymore. How old are your ovens? The last one my parents had was from the 90s.
I was amazed experimenting with different combinations, for instance instead of 100, using 60 for a minute, 90 for 1:30, and stupid stuff like heating with 11, 22, 55 seconds and so, to make it quicker to type any time.
among these options, 3
Although I like it more ātwtā, without the dot and with a t at the end
What would you like the new twtxt logo to be?
Comments: https://git.mills.io/yarnsocial/twtxt.dev/issues/9#issuecomment-18960
@falsifian@www.falsifian.org
it look like your markdown image tags are missing the protocol part (https://
) so they donāt render at least on my server: https://darch.dk/timeline/conv/3vtnszq
well, Gemini clients like Lagrange allow to show inline images when you click on an image link. Text based clients, like Amfora, usually allow to watch the image in another āwindowā.
For example here: gemini://text.eapl.mx/en-making-a-tic-tac-toe-variant and there https://text.eapl.mx/en-making-a-tic-tac-toe-variant
I agree that some topics require images to make it easier to explain.
What a cool feature! Looks like the project is coming along nicely
@prologic@twtxt.net It seems like the typical problem of an unneutered cat š
@prologic@twtxt.net That boycott didnāt last very long, eh!?
Yeah, sounds like another hype train arriving at the station.
@eapl.me@eapl.me I like this idea. Another option would be to show a limited number of posts, with an option to see the omitted ones by user. Either way, I wonder how well that works with threading.