# 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 7056
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=6052
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=6152
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=5952
@xuu Hahaha, this is great! :'-D
@bender Oh dear!
@bender Oh dear!
@falsifian That's cool, dedicated parking for snow. :-) There are also some rather large icicles. Thanks for sharing this photo! <3
@falsifian That's cool, dedicated parking for snow. :-) There are also some rather large icicles. Thanks for sharing this photo! <3
@prologic Not too shabby.
@prologic Not too shabby.
Very sunny 16°C, heaps of people outside. As soon as we were a bit further into the forest, we had it completely for us. From the foot we thought that the view might be rather good, but up at the summit, it turned out to be very hazy. Oh well. Surprisingly, I found four skyrocket sticks in premium quality. More than after New Year! Also, we came across two deer. It was a very nice two hours walk. No photos, though, sorry.
Very sunny 16°C, heaps of people outside. As soon as we were a bit further into the forest, we had it completely for us. From the foot we thought that the view might be rather good, but up at the summit, it turned out to be very hazy. Oh well. Surprisingly, I found four skyrocket sticks in premium quality. More than after New Year! Also, we came across two deer. It was a very nice two hours walk. No photos, though, sorry.
I'm happy to note that tomorrow is already Friday. However, looking back on the week, I can't think of anything terribly useful I've accomplished. Hard to distinguish it from a plain zero. Again. Hmm. Anyway, looking forward to the weekend.
I'm happy to note that tomorrow is already Friday. However, looking back on the week, I can't think of anything terribly useful I've accomplished. Hard to distinguish it from a plain zero. Again. Hmm. Anyway, looking forward to the weekend.
I hope not, @bender! I haven't checked, but I'd reckon it to be at most a single digit MiB number. How wrong am I?
I hope not, @bender! I haven't checked, but I'd reckon it to be at most a single digit MiB number. How wrong am I?
@nff Nice! Yeah, it's all about having fun. :-) The simplicity got me hooked. Happy hacking!
@nff Nice! Yeah, it's all about having fun. :-) The simplicity got me hooked. Happy hacking!
@off_grid_living No right click thing, but in the terminal:

convert -strip -quality 70 -resize 300x original.jpg resized.jpg

"original.jpg" being the filename of the input file and "resized.jpg" the filename of the output. You can play around with the width, "300x" means 300 pixels wide and the height is determined automatically to still remain in the same ratio. The quality is how much to compress it. The closer to 0 the value gets, the worse the result, but also smaller in file size. More towards 100 and the quality improves together with a larger file size.

You have to install the package "imagemagick" for this to work, I believe.
@off_grid_living No right click thing, but in the terminal:

convert -strip -quality 70 -resize 300x original.jpg resized.jpg

"original.jpg" being the filename of the input file and "resized.jpg" the filename of the output. You can play around with the width, "300x" means 300 pixels wide and the height is determined automatically to still remain in the same ratio. The quality is how much to compress it. The closer to 0 the value gets, the worse the result, but also smaller in file size. More towards 100 and the quality improves together with a larger file size.

You have to install the package "imagemagick" for this to work, I believe.
@off_grid_living Oh, I'm ready for my retirement, too. :-D Still have some decades to go, unfortunately.
@off_grid_living Oh, I'm ready for my retirement, too. :-D Still have some decades to go, unfortunately.
@off_grid_living 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.
@off_grid_living 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.
@bender Lol! :-D
@bender Lol! :-D
@nff I do! :-) Btw. line 65 in your feed is broken.
@nff I do! :-) Btw. line 65 in your feed is broken.
Thanks, @falsifian! I'll definitely start with the latter one then. Let's see how far I make it. :-)
Thanks, @falsifian! I'll definitely start with the latter one then. Let's see how far I make it. :-)
@falsifian Phew, okay. So, it took a few months to grow that big. I feared that it could have been just a week or so. Yeah, insulation always is a good idea.
@falsifian Phew, okay. So, it took a few months to grow that big. I feared that it could have been just a week or so. Yeah, insulation always is a good idea.
@falsifian Hahaha, that's sick, I love it! :-D I envy you a bit. On the other hand, I have to admit I'm glad that I don't have to chisel down giant blocks of ice from the house.
@falsifian Hahaha, that's sick, I love it! :-D I envy you a bit. On the other hand, I have to admit I'm glad that I don't have to chisel down giant blocks of ice from the house.
@falsifian Mate, what an amazing video, holy cow! :-D We only get complete jokes of icicles compared to what you had there ealier today. It's a giant wall. For how many days did that grow on your roof?
@falsifian Mate, what an amazing video, holy cow! :-D We only get complete jokes of icicles compared to what you had there ealier today. It's a giant wall. For how many days did that grow on your roof?
@falsifian 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. :-)
@falsifian 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. :-)
@falsifian Wooooaaaahhh! That is BY FAR the biggest icicle I've ever seen. Really cool! :-) How long did it take to melt in your sink? The video download is still dripping in, looking forward to that.
@falsifian Wooooaaaahhh! That is BY FAR the biggest icicle I've ever seen. Really cool! :-) How long did it take to melt in your sink? The video download is still dripping in, looking forward to that.
@eapl.me I couldn't care less about ActivityPub, but twtxt is the thing for hackers by design. That's the appealing part for me, personally. I actually do enjoy that not everybody and their dogs are here. :-)

@thecanine I agree!
@eapl.me I couldn't care less about ActivityPub, but twtxt is the thing for hackers by design. That's the appealing part for me, personally. I actually do enjoy that not everybody and their dogs are here. :-)

@thecanine I agree!
@movq @prologic I don't know, I don't see this happening all that often. Very rarely. The problem I encounter much more often is that tech folks are blindly adopting every new hype without thinking the slightest bit what the consequences might be.

But maybe that also means I'm one of these "told you so" guys. Not sure.
@movq @prologic I don't know, I don't see this happening all that often. Very rarely. The problem I encounter much more often is that tech folks are blindly adopting every new hype without thinking the slightest bit what the consequences might be.

But maybe that also means I'm one of these "told you so" guys. Not sure.
@prologic That boycott didn't last very long, eh!?

Yeah, sounds like another hype train arriving at the station.
@prologic That boycott didn't last very long, eh!?

Yeah, sounds like another hype train arriving at the station.
@doesnm I'll let you know once it reaches a point where it might be barely usable by someone else than myself. There are long ways to go, though. Right now, you don't wanna even look at it. :-)
@doesnm I'll let you know once it reaches a point where it might be barely usable by someone else than myself. There are long ways to go, though. Right now, you don't wanna even look at it. :-)
I'm continuing my tt rewrite in Go and quickly implemented a stack widget for tview. The builtin Pages is similar but way too complicated for my use case. I would have to specify a mandatory name and some additional options for each page. Also, it allows me to randomly jump around between pages using names, but only gives me direct access the first, however, not the last page. Weird. I don't wanna remember names. All I really need is a classic stack. You open a new fullscreen dialog and maybe another one on top of that. Closing the upper most brings you back to the previous one and so on.

The very first dialog I added is viewing the raw message text. Unlike in @arne's TwtxtReader, I'm not able to include the original timestamp, though. I don't have it in its original form in the database. :-/

Next up is a URL view.
I'm continuing my tt rewrite in Go and quickly implemented a stack widget for tview. The builtin Pages is similar but way too complicated for my use case. I would have to specify a mandatory name and some additional options for each page. Also, it allows me to randomly jump around between pages using names, but only gives me direct access the first, however, not the last page. Weird. I don't wanna remember names. All I really need is a classic stack. You open a new fullscreen dialog and maybe another one on top of that. Closing the upper most brings you back to the previous one and so on.

The very first dialog I added is viewing the raw message text. Unlike in @arne's TwtxtReader, I'm not able to include the original timestamp, though. I don't have it in its original form in the database. :-/

Next up is a URL view.
@movq That's what I immediately thought as well. :-D @eapl.me Unfortunately, no fancy buttons. What does your model do?
@movq That's what I immediately thought as well. :-D @eapl.me Unfortunately, no fancy buttons. What does your model do?
When washing the dishes at the scouts I cut my hand open on the ladle. That piece of shit has a terrible burr.
When washing the dishes at the scouts I cut my hand open on the ladle. That piece of shit has a terrible burr.
@prologic Of course you don't notice it when yarnd only shows at most the last n messages of a feed. As an example, check out mckinley's message from 2023-01-09T22:42:37Z. It has "[Scheduled][Scheduled][Scheduled]"… in it. This text in square brackets is repeated numerous times. If you search his feed for closing square bracket followed by an opening square bracket (][) you will find a bunch more of these. It goes without question he never typed that in his feed. My client saves each twt hash I've explicitly marked read. A few days ago, I got plenty of apparently years old, yet suddenly unread messages. Each and every single one of them containing this repeated bracketed text thing. The only conclusion is that something messed up the feed again.
@prologic Of course you don't notice it when yarnd only shows at most the last n messages of a feed. As an example, check out mckinley's message from 2023-01-09T22:42:37Z. It has "[Scheduled][Scheduled][Scheduled]"… in it. This text in square brackets is repeated numerous times. If you search his feed for closing square bracket followed by an opening square bracket (][) you will find a bunch more of these. It goes without question he never typed that in his feed. My client saves each twt hash I've explicitly marked read. A few days ago, I got plenty of apparently years old, yet suddenly unread messages. Each and every single one of them containing this repeated bracketed text thing. The only conclusion is that something messed up the feed again.
@prologic Of course you don't notice it when yarnd only shows at most the last n messages of a feed. As an example, check out mckinley's message from 2023-01-09T22:42:37Z. It has "\n\n\n"… in it. This text in square brackets is repeated numerous times. If you search his feed for closing square bracket followed by an opening square bracket (][) you will find a bunch more of these. It goes without question he never typed that in his feed. My client saves each twt hash I've explicitly marked read. A few days ago, I got plenty of apparently years old, yet suddenly unread messages. Each and every single one of them containing this repeated bracketed text thing. The only conclusion is that something messed up the feed again.
@movq Ja, völlig behämmert. Schade, vertane Chance für einen „Doch“-Knopf.
@movq Ja, völlig behämmert. Schade, vertane Chance für einen „Doch“-Knopf.
Boah, jetzt mal ernsthaft, was ist denn das für ein Dialog bittesehr!?



Wer hat sich zu dieser Meldung diese Knopfauswahl überlegt und dann auch noch die Icons dazu ausgedacht? Und warum hat's das Zertifikat überhaupt schon wieder zerlegt? Und wieso kommt der Dialog direkt wieder in ner Endlosschleife hoch, wenn ich abbreche? Komplettversagen nach Strich und Faden an allen Enden. Allen. Grrr, so viel Hass! Ich schalt besser die Büchse aus.
Boah, jetzt mal ernsthaft, was ist denn das für ein Dialog bittesehr!?



Wer hat sich zu dieser Meldung diese Knopfauswahl überlegt und dann auch noch die Icons dazu ausgedacht? Und warum hat's das Zertifikat überhaupt schon wieder zerlegt? Und wieso kommt der Dialog direkt wieder in ner Endlosschleife hoch, wenn ich abbreche? Komplettversagen nach Strich und Faden an allen Enden. Allen. Grrr, so viel Hass! Ich schalt besser die Büchse aus.
@prologic Tolerant yes, but in the right places. This is just encouraging people to not properly care. The extreme end is HTML where parsers basically accept any input. I'm not a fan of that. Whatever.
@prologic Tolerant yes, but in the right places. This is just encouraging people to not properly care. The extreme end is HTML where parsers basically accept any input. I'm not a fan of that. Whatever.
@prologic The issue is that all bracketed text in the entire feed has been duplicated again two days ago. The bug is not fixed. Or it's a new one.
@prologic The issue is that all bracketed text in the entire feed has been duplicated again two days ago. The bug is not fixed. Or it's a new one.
@movq I can relate to that. :-/
@movq I can relate to that. :-/
@andros I suggest to not touch it and work on a different project instead. :-D

No, in all seriousness, that's a tough one. Try to figure out the requirements and write tests to cover them. In my experience, if there is no good documention, tests might also be lacking. It goes without saying that you have to understand the code segments first before you can begin to refactor them. Commit even earlier and more often than usual, this will help you bisecting potentially introduced bugs later on. Basically baby steps.

But it also depends on the amount of refactoring required. Maybe just scrap it entirely and start from scratch. This might not be feasible due to e.g. the overall project size, though.
@andros I suggest to not touch it and work on a different project instead. :-D

No, in all seriousness, that's a tough one. Try to figure out the requirements and write tests to cover them. In my experience, if there is no good documention, tests might also be lacking. It goes without saying that you have to understand the code segments first before you can begin to refactor them. Commit even earlier and more often than usual, this will help you bisecting potentially introduced bugs later on. Basically baby steps.

But it also depends on the amount of refactoring required. Maybe just scrap it entirely and start from scratch. This might not be feasible due to e.g. the overall project size, though.
@andros I'm all for elegant solutions. I prefer when the computer helps me to really achieve my goal and solve it completely, not where I still have to manually filter a list by hand. Anyway. :-)
@andros I'm all for elegant solutions. I prefer when the computer helps me to really achieve my goal and solve it completely, not where I still have to manually filter a list by hand. Anyway. :-)
@eapl.me Yeah, you need some kind of storage for that. But chances are that there's already a cache in place. Ideally, the client remembers etags or last modified timestamps in order to reduce unnecessary network traffic when fetching feeds over HTTP(S).

A newsreader without read flags would be totally useless to me. But I also do not subscribe to fire hose feeds, so maybe that's a different story with these. I don't know.

To me, filtering read messages out and only showing new messages is the obvious solution. No need for notifications in my opinion.

There are different approaches with read flags. Personally, I like to explicitly mark messages read or unread. This way, I can think about something and easily come back later to reply. Of course, marking messages read could also happen automatically. All decent mail clients I've used in my life offered even more advanced features, like delayed automatic marking.

All I can say is that I'm super happy with that for years. It works absolutely great for me. The only downside is that I see heaps of new, despite years old messages when a bug causes a feed to be incorrectly updated (https://twtxt.net/twt/tnsuifa). ;-)
@eapl.me Yeah, you need some kind of storage for that. But chances are that there's already a cache in place. Ideally, the client remembers etags or last modified timestamps in order to reduce unnecessary network traffic when fetching feeds over HTTP(S).

A newsreader without read flags would be totally useless to me. But I also do not subscribe to fire hose feeds, so maybe that's a different story with these. I don't know.

To me, filtering read messages out and only showing new messages is the obvious solution. No need for notifications in my opinion.

There are different approaches with read flags. Personally, I like to explicitly mark messages read or unread. This way, I can think about something and easily come back later to reply. Of course, marking messages read could also happen automatically. All decent mail clients I've used in my life offered even more advanced features, like delayed automatic marking.

All I can say is that I'm super happy with that for years. It works absolutely great for me. The only downside is that I see heaps of new, despite years old messages when a bug causes a feed to be incorrectly updated (https://twtxt.net/twt/tnsuifa). ;-)
Hahahaha, this is brilliant! :'-D https://denmarkification.com/
Hahahaha, this is brilliant! :'-D https://denmarkification.com/
Exactly, @bender, just like yours and prologic's, too. :-( Subsequent Brackets Considered Harmful™.
Exactly, @bender, just like yours and prologic's, too. :-( Subsequent Brackets Considered Harmful™.
@eapl.me Read flags are so simple, yet powerful in my opinion. I really don't understand why this is not a thing in most twtxt clients. It's completely natural in e-mail programs and feed readers, but it hasn't made the jump over to this domain.
@eapl.me Read flags are so simple, yet powerful in my opinion. I really don't understand why this is not a thing in most twtxt clients. It's completely natural in e-mail programs and feed readers, but it hasn't made the jump over to this domain.
@mckinley Yeah, all this JS and HTMX garbage messes up a lot of things which used to work better in the earlier days.
@mckinley Yeah, all this JS and HTMX garbage messes up a lot of things which used to work better in the earlier days.
@prologic @xuu There: Screenshot where text in square brackets is duplicated once again

Just search for ][ in https://twtxt.net/user/mckinley/twtxt.txt and you'll see.
@prologic @xuu There: Screenshot where text in square brackets is duplicated once again

Just search for ][ in https://twtxt.net/user/mckinley/twtxt.txt and you'll see.
@movq @prologic @bmallred @andros Thank you all! I don't have emacs installed, so I'll try lagrange and see. According to my shell history, I must have played around with amfora ages ago.
@movq @prologic @bmallred @andros Thank you all! I don't have emacs installed, so I'll try lagrange and see. According to my shell history, I must have played around with amfora ages ago.
@xuu People should just fix their feeds. :-)
@xuu People should just fix their feeds. :-)
@movq Yeah, maybe. What browsers are you using again for these two?
@movq Yeah, maybe. What browsers are you using again for these two?
I should really fix my calender rendering. A two day event only pops up in the first day, but not in the second. When extended to three days, it correctly shows up in all three days. Meh.
I should really fix my calender rendering. A two day event only pops up in the first day, but not in the second. When extended to three days, it correctly shows up in all three days. Meh.
@mckinley And there is the bracketed text duplication bug again… Actually with lots of twts. Did you edit a twt? Do you remember? /cc @prologic
@mckinley And there is the bracketed text duplication bug again… Actually with lots of twts. Did you edit a twt? Do you remember? /cc @prologic
@mckinley b
@mckinley b
@bmallred Surprisingly, my

User-agent: *
Disallow: /

seems to work. Or maybe those bastards change their user agent and claim to be someone nice. In any case, I just added a bunch of

location = /robots.txt {
add_header Content-Type text/plain;
return 200 "User-agent: *\\nDisallow: /\\n";
}

in my nginx config. No need for any bot to visit, crawl and index most of my sites.=
@bmallred Surprisingly, my

User-agent: *
Disallow: /

seems to work. Or maybe those bastards change their user agent and claim to be someone nice. In any case, I just added a bunch of

location = /robots.txt {
add_header Content-Type text/plain;
return 200 "User-agent: *\nDisallow: /\n";
}

in my nginx config. No need for any bot to visit, crawl and index most of my sites.=
@bmallred Surprisingly, my

User-agent: *
Disallow: /

seems to work. Or maybe those bastards change their user agent and claim to be someone nice. In any case, I just added a bunch of

location = /robots.txt {
add_header Content-Type text/plain;
return 200 "User-agent: *\nDisallow: /\n";
}

in my nginx config. No need for any bot to visit, crawl and index most of my sites.=
@movq Photographic memory, eh?
@movq Photographic memory, eh?
@movq I also thought that I have a new Linux friend the other day. But it was just a fake KDE look from Redmond. :-(
@movq I also thought that I have a new Linux friend the other day. But it was just a fake KDE look from Redmond. :-(
@jost Yeah, this AI crap is a big reason not to blog.