@lyse@lyse.isobeef.org Thanks! You had one of the strangest guesses so far, first one I had to look up. š It is a reference to a (human) cop/detective, from a 2019 videogame. Since thereās no spoilers tag on Twtxt, the name of the file on my site, includes the correct answer.
I complain about this a lot:
https://movq.de/v/e7cb49eefb/hiccupfx
But to be honest, my blog did the same thing ā to some degree.
This is fixed now. The trick is to add width and height to all <img> tags. That way, modern browsers know how much space to reserve for the image. Without this, they just reserve zero space, so when the image finally loads, you get jumpy layout.
This effect is even worse when you use <img loading="lazy"> ā which I can finally use, now that the jumpy layout has been fixed. š„³
@lyse@lyse.isobeef.org Ich zitiere von woanders und bin zu faul zum Ćbersetzen:
Ich gucke schon den ganzen Tag dem Storm Tracking zu und alle Gewitter in der NƤhe haben sich kurz vor meinem Standort ausgeregnet oder sind abgedreht. šš„µ
@movq@www.uninformativ.de Yes. The author tries hard not to break existing code, but apparently he did this time. In his defense, itās not an official release, I just updated to master. Which is exactly what I always did in the past as there are no real versions (I even think that in one ticket he wrote years ago that master is always stable). That has finally changed a year ago, though: https://github.com/rivo/tview/releases/tag/v0.42.0
@movq@www.uninformativ.de Itās the āLyse types the entire HTML by handā generator. Yes, no kidding. I write articles so rarely, that I can do that once in a while. Itās fun to some degree, but also not.
After some time, I finally recorded some Vim macros to insert <b>ā¦</b>, <var>ā¦</var>, <span class=s>ā¦</span> etc. around the tokens. This helped a little bit. But I was still questioning my mental state doing it like that. I also had to fix a bunch of the end tags by hand, because the word movement wasnāt enough or the end movement went too far. Quite the annoying process for sure.
But I think the HTML looks a wee bit nicer and is maybe even semantically a little bit better than having only <span>s everywhere. I find the <span class="whatever"> just soo awfully long. Of course, I never look at the code again, but knowing, that e.g. there is a <b> and it saves so many bytes in comparison, makes me happy. It is a more elegant solution in my opinion. Not by much, but better nonetheless. Itās a matter of simplicity. Admittedly, even I canāt avoid the <span>s alltogether. Oh well. On the other hand, Iām sure that this does not make any difference whatsoever. I bet, nobody and nothing, like a screenreader, analyzes the HTML for that, where this would be truly useful.
Oh! Maybe text browsers, though. It just occurred to me while composing this reply. :-) Haha, I lost my bet quickly. w3m picks up at least the <b> for keywords and builtin types, <u> for filenames and <i> for comments. Yey. No different styles for <var> and <mark>, unfortunately. elinks only renders the bold. Itās cool that I had the right intuition right from the beginning, despite being unable to pinpoint it. :-)
All the <span> hell with common syntax highlighters is a downer for me that keeps me from looking more into them. If I wrote more articles, I might rig something up with Pygments. At least thatās somehow positively connotated in my brain. Not sure if it actually deserves it, but I dealt with that in some loose form (canāt even remember) years and years ago. Apparently, it wasnāt too terrible.
To prepare the table of contents, I used grep and sed with some manual intervention in the end. The entire process can be improved. Absolutely.
You wrote your own site generator, didnāt you?
Ā”Muchas gracias @bender@twtxt.net! I was also thinking about categorizing them a few years ago. But itās so much work. I would have to tag every photo on its own. My use case goes more towards āgive me all albums with squirrelsā, though. Letās see. I would need some tooling for easy tagging first. And then, the question is, which categories do I want to have to begin with?
@lyse@lyse.isobeef.org Thanks for letting me know. HTML checkers seem happy now. Iām not sure what to do about the images not loading. The photos have three sizes (thumbnail, photo page, and original if you click the img tag on the photo page); can you at least see the smaller two sizes? Maybe I will do some experimental fetches and/or start measuring things on my web server.
@movq@www.uninformativ.de oh god, make it stop!
Recently the guy maintaining chardet changed its GPL license to MIT because āit is a complete re-writeā (by AI, of course). It was called out by the original author. Changing the license is something the current maintainer wanted to do for long time, getting nos, and nos then. That didnāt stop him 12 years later.
@prologic@twtxt.net beats me, Iām currently stuck to the latest tag and it doesnāt even appear in mobile
@prologic@twtxt.net as per #kzirx3a I managed to avoid having to use it (thereās also a thing or two wrong about its creator as well, which is more on a personal level than technical here)
oops typo tagging @sxb@tilde.club
š„³ Just released Gatherly v0.3.0 š¤ ā My instance is available at: https://gatherly.mills.io (free for anyone to use)
@lyse@lyse.isobeef.org Yeah, those are my bad.
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!
Pretty happy with my zs-blog-template starter kit for creating and maintaining your own blog using zs š Demo of what the starter kit looks like here ā Basic features include:
- Clean layout & typography
- Chroma code highlighting (aligned to your site palette)
- Accessible copy-code button
- āOn this pageā collapsible TOC
- RSS, sitemap, robots
- Archives, tags, tag cloud
- Draft support (hidden from lists/feeds)
- Open Graph (OG) & Twitter card meta (default image + per-post overrides)
- Ready-to-use 404 page
As well as custom routes (redirects, rewrites, etc) to support canonical URLs or redirecting old URLs as well as new zs external command capability itself that now lets you do things like:
$ zs newpost
to help kick-start the creation of a new post with all the right āstuffā⢠ready to go and then pop open your $EEDITOR š¤
@bender@twtxt.net 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@twtxt.net 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!
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
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)(implicitofeed=self).
- Replies:
(tno:N) (ofeed:<url>).
- Clients: increment
tnolocally for new threads, copy tags on reply.
- Subjects optional, not required.
ā¦
@kat@yarn.girlonthemoon.xyz hey, hey, good afternoon, happy Friday! Fandom site tag pages count. Word!
good afternoon yarnverse i have done nothing productive so far. except edit my fandom site a little bit (i added tag pages!). does that count lol
The image needs to be an absolute URL, and some tags are missing. Almost there!
@lyse@lyse.isobeef.org a content warning is kind of like a forum spoiler cut, or like the <details> tag in HTML; it lets you write a sentence or so that someone can then click to expand to see the actual post. itās called a CW because most people use it to warn for potentially triggering/harmful subjects, but you can really use it for anything, like spoilers in a TV show or even for joke punchlines
beginnings of remote feed parsing..! the fact hashing just sort of works with the minuscule libraries i found for base32 and blake2b still amazes me (mentions are being eaten as html tags)

Coca Cola Liquid Death Tag ?~L~X https://thenewleafjournal.com/b/81w
My website has 0 depreciated tags now and all identical IDs, were merged into a single class. This also improves, how the text on top of the page, is aligned on mobile.

We finally got a caliper donated for this yearās scout flea market. We didnāt sell it, but kept it ourselves. It will come in very handy every now and then in our material store. For example, I missed having a caliper in the past when sorting our random assortment of screws or measuring the depth of a hole. Itās a wee bit banged up (probably happened during transport) and didnāt come with a box, but the latter is now solved.
The lid and bottom came from a wardrobe back panel I got from a mate, the sides were rocket sticks in their former lives. I found some scrap of felt in our material store and some hinges laying around in the drawers of my own workshop.
Unfortunately, the table saw teared up the plywood veneer fibres badly, even though I put tape around to prevent that. This is the first time it didnāt work. At. All. To cover that up, I painted the box with some decades old tinting paint (price tag says Deutsche Mark, not Euro!) from my paint cabinet. Itās awesome, works absolutely perfectly and doesnāt smell the slightest bit. I reckon, this caliper box is plenty good enough for occasional use at our scout material store.

@abucci@anthony.buc.ci two things. Conduwuit, a Matrix server written in Rust, is no longer going to be developed. The other is, I didnāt mean to tag you, but because Yarnd was broken it happened. Apologies.
Hmmm thereās a bug somewhere in the way Iām ingesting archived feeds š¤
sqlite> select * from twts where content like 'The web is such garbage these days%';
hash = 37sjhla
feed_url = https://twtxt.net/user/prologic/twtxt.txt/1
content = The web is such garbage these days š Or is it the garbage search engines? š¤
created = 2024-11-14T01:53:46Z
created_dt = 2024-11-14 01:53:46
subject = #37sjhla
mentions = []
tags = []
links = []
sqlite>
Iām also thinking that some kind of tag might be needed to automatically hide twts from unknown extensions. For example our client doesnāt support DMs and always shows the !<nick url><encrypted_message> syntax which is meaningless.
Doesnāt look like it Hmmm
sqlite> select * from twts where content LIKE '%Linux installation%';
hash = znf6csa
feed_url = https://www.uninformativ.de/twtxt.txt
content = I wonder if my current Linux installation will actually make it to 20 years:
$ head -n 1 /var/log/pacman.log
[2011-07-07 11:19] installed filesystem (2011.04-1)
Itās not toooo far into the future.
It would be crazy ⦠20 years without reinstalling once ⦠phew. š„“
created = 2025-04-07T19:59:51Z
subject = (#znf6csa)
mentions = []
tags = []
links = []
@thecanine@twtxt.net My apologies, mate! :-( As @david@collantes.us pointed out, this was definitely not my intent at all.
For the easter egg hunt, I first looked for a hidden image map link on the pixel dog in the right lower corner itself. Maybe one giant pixel just links to somewhere else, I figured. But I couldnāt find any and then quickly moved on. Hence, I naturally viewed the HTML source. Because where else would be a good hiding place for easter eggs, right?
Next, I noticed the <font> tags. I thought I had read quite some time ago that they are not an HTML5 thing, but wasnāt entirely sure about it. So, I asked the W3C HTML validator. Sure enough. I thought I let you know about the violations. If somebody had found a mistake on my site, Iād love to hear about it, so I could fix it. Iām sorry that my chosen form of report didnāt resonate with you all that well. I reckoned youāll also find it a bit funny, but I was clearly very wrong on that.
I actually followed the dog cow link to the video, so I ended up on the easter egg. However, I didnāt recognize it as such. ĀÆ_(ć)_/ĀÆ Oh well.
Regarding my message about the browser quirks: I read your answer that you were arguing against the HTML validator findings. Of course, everybody can do with their sites whatever they likes.
@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. ā¹ļø
@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.
@xuu@txt.sour.is My layout looks like this:
- storage/
- storage.go: defines a
Storageinterface
- sqlite.go: implements the
Storageinterface
- 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. :-(
For point 1 and others using the metadata tags. we have implemented them in yarnd as [lang=en][meta=data]
oh dang.. i thought i had parsing for !tag from back when someone was using it for his wiki pages.
i guess i left it out. though shouldnt be to hard to add it back in
@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
@bender@twtxt.net @prologic@twtxt.net the markdown list in #jr6ywrq is a ālooseā list, e.g. https://github.com/erusev/parsedown/issues/474#issuecomment-280874843
My markdown parser (parsedown PHP) renders the list with p-tags also.
Now I just have to remember to tag people in replays ā
@<url>. Submitting this writes @<domain url> instead of @<nick url> in the feed.
hmm interesting work here.. ill give it a look.. @lyse@lyse.isobeef.org do you know if it is even storing the url into the AST object? afair the code to parse tags url should be the same as the mention url.
@lyse@lyse.isobeef.org āSommer ist der schƶnste Tag im Nordenā. :D
@arne@uplegger.eu Hahaha, vor Dekaden hab ich auch mal einen āXMLā-āParserā selbst gebaut. Der wollte dann pro Zeile entweder einen ƶffnenden oder einen schlieĆenden Tag oder aber einen Wert haben. :-O Ganz übel, aber für den damaligen Anwendungsfall hatās gelangt. War halt bloĆ kein XML. :-D
Was konkret war dann das Problem von dem zu sauberen XML in Deinem Fall? Und schƶn zu hƶren, dass Du das GerƤt vor dem vorzeitigen Elektroschrotttod bewahrt bekommen hast. :-)
Zum Abschluss noch ne ganz doofe Frage, ganz offensichtlich hab ich von Radios keinen blassen Schimmer. Wieso muss denn das Ding überhaupt mit XML rumfuhrwerken? O_o
@sorenpeter@darch.dk Yes it works, thx: https://doesnm.cc/mentions.txt . Iām deleted html tags because my client do not support html rendering
Komischer Tag heute. Hier in Greifswald hat sich der Lindner eine Schaumtorte gefangen und in der Tagesschau wird über ein Telefonat zwischen Elon Musk und Alice Weidel berichtet. Ein Zirkus das alles.
@doesnmppsflt@doesnm.p.psf.lt Not sure which bug youāre referring to. š¤ (Did I forget?)
Those long IDs like (#113797927355322708) are simply part of that feed. Looks like the author just dumps ActivityPub IDs into twtxt. I think this used to work in the past, but the corresponding spec (https://twtxt.dev/exts/hash-tag.html) has been deprecated and jenny doesnāt support ā actually, jenny never supported that.
jenny can only group threads by exactly one criterium (because it writes a Message-ID into the mail file) and thatās the regular twt hash. So, anything else, like people doing ā#CoolTopicā, isnāt possible.
"twtxtfeevalidator/0.0.1" UA about? I thought I could ask before throwing a 1000GB file at it šŖ¤ could it be the same 'xt' thing @lyse was talking about the other day?
@aelaraji@aelaraji.com Thank you very much, glad you like it. :-) I always try to make web pages use as much semantic tags as possible and keep the HTML very simple, so that they also have a chance to look decent in terminal browsers. The logo took me a few hours to draw in all its three sizes.
@bender@twtxt.net Dud! you should see the updated version! š I have just discovered the scratch #container image and decided I wanted to play with it⦠Iām probably going to end up rebuilding a LOT of images.
~/htwtxt Ā» podman image list htwtxt
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/htwtxt 1.0.7-scratch 2d5c6fb7862f About a minute ago 12 MB
localhost/htwtxt 1.0.5-alpine 13610a37e347 4 weeks ago 20.1 MB
localhost/htwtxt 1.0.7-alpine 2a5c560ee6b7 4 weeks ago 20.1 MB
docker.io/buckket/htwtxt latest c0e33b2913c6 8 years ago 778 MB
What was it suppose to look like? a <detail><summary>-tag maybe?