# 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 6513
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=3234
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=3334
# prev = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=3134
@prologic Uuuuhhhhh, how adorable! :-) I got an instant lizard flashback from the weekend. It's sooo much of a better photo than what I managed to take. Super crisp. Awesome!
@thecanine Bwahahaha, brilliant story! :-D Sorry to hear you turning into an ice cube. :-(
@movq I once saw a movie where everything was simulated for one person. Can't remember neither the details nor even the title. I reckon the movie was from the 70ies, 80ies or maybe 90ies.
We went on the same tour on Saturday and discovered a few new paths. This time only 36 photos. I was not able to get a good shot of the wine grapes. Looks like I have to visit my mate again.
Colorful leaves
Just encountered two lizards. Well, the ones we did actually see. Plenty more rustling of course.
Autumn finally hit! Visited a mate and enjoyed the colorful season with the best weather. We encountered 50-70 lizards on our Friday stroll. Yes, that's more than in my entire life together. Unfortunately, my camera battery flattened before we reached the loop trail around the fortress full of lizards. Fucking cool experience, though. :-)
Lizard enjoying the autumn sun on warm a sandstone wall
Sorry for the huge photo gallery on that day. I had a very hard time to throw away files.
@prologic @justamoment @movq Thank you mates! Oh, that is really lovely, justamoment! A few years back there were birds nesting in the hedge, but they never returned. Probably too unsafe. That was lucky indeed, movq. The other two photos were rubbish. ;-) Right after this shot it flew away.
I grabbed a yoghurt and just noticed that I actually forgot to eat it. That probably means I'm ready for bed. Further picture sorting will have to wait for tomorrow.
@prologic Exactly, the last entry is the only correct one.
@eaplmx I forgot to mention that I like the HTTP status codes idea! I need to think about it a bit more, but that sounds very appealing. We just need to watch out that we don't tie it too much to HTTP. I have no clue about Gopher or Gemini.
@prologic I'm happy to see a fix in yarnd. ;-) The thing is, though, there are still old broken data out there. You can't fix them. At least not without breaking all sorts of conversations then. And I assume lots of people just don't care about their old contents all that much as to bother fixing mention URLs.
@mckinley The idea is not to have a single source of truth. It's definitely designed to have multiple databases operated by different people. That's why all this synchronization exists. Granted, I haven't put much thought into that so far.
@eaplmx The idea is to only provide mappings for wrong URLs and mark dead ones. So a single database for multiple protocols should do. No need to spin up a dedicated one for a different protocol. If a feed is available over multiple protocols or locations, there's no need to insert any of them, if they work. Unless one wants to rewrite some URLs to some other canonical forms.
@eaplmx So I have two personal main goals with this:
1. In the long run fix producing broken mentions in yarnd. I reckon the yarnd client is the main source of all those broken mentions I've encountered so far. There might be others, too, but to me it looks like that's the main bad guy. :-)
2. Reduce 404 in my HTTP error logs. Yes, I could configure my web server to exclude some paths, but where's the fun in that?
There are at least three specific reasons why a twtxt feed URL is wrong at some point in time. And there are probably much more.
1. It never existed in the first place, because somebody screwed up the feed URL a mention, some other feed URL should have been used.
2. The feed URL was valid before but it is now gone, the feed author decided to quit.
3. The feed URL was valid before but the feed author decided to move the feed to somewhere else.
I'm not entirely sure what you mean with "two URLs have changes". But the idea would be if URL A becomes wrong for any reason and a mapping to B is added and then later B points to C, A would also be updated to point to C directly.
The main consumers of such a database are search engines/crawlers and clients. Search engines could lookup a twtxt feed URL in this database and follow the mapping instead. Clients could use that DB to check before posting whether a mention should be corrected or use these mappings to fix broken mentions when displaying a twt.
@eaplmx @mckinley @prologic Thank you very much, mates! I will be gone over the weekend, so keep the feedback coming, I'll catch up eventually. However, so far it looks like this idea is a busted flush.
I just spent a few hours thinking about the Twtxt Feed URL Normalization Database, that I suggested a few times already in the past weeks. It then occurred to me that a simple text file managed in a version control system would be enough to start out. No need to build a dedicated (web) interface just yet. So ignore all the reviewer, synchronization and REST API stuff for now. Any thoughts? Any feedback is very much appreciated.
@mckinley I think I counted just five levels, when scrolling over it. Zoomed out as far as my terminal allowed:
Conversation in tt
@prologic Oh! Thanks for pointing out the "POLITE", @justamoment. I obviously misread it as "POLICE". I was wondering why I didn't see any emergency lights, but thought maybe it's an unmarked police vehicle. And congrats for winning! ;-)
@prologic You mean the motorcycle cop(s)? Is it rare in Australia?
@tkanos Scouting is really great, yes! My best school mate introduced me to it some time at the end of school or beginning of uni, can't remember. I was invited to the last two days of the scout group camp he had organized. All the folks welcomed me open-heartedly and after just an hour I felt like I was with mates I knew for several years. In fact, I just met them that day for the first time. It took me about another two years to finally hand in my registration. There was just too much else going on. Since I joined very late, I couldn't be a rover (last youth section, age 16-21 here) anymore. I became a volunteer since I didn't want to start right off as a leader without even knowing the basics. And then I just stuck with it ever since. :-)
I have to add, this conference was just for our leaders round table — that is leaders, volunteers and a bunch of rovers. No kids this time. But the week before we had the annual scout meeting on Saturday afternoon with the whole group, followed by a scout church service (scouting is affiliated to the church rather than the military in I suppose most of Europe). After that we had a bbq in the church yard for everybody to attend for free. I helped setting it up while most of us were in church. On Sunday we played games with all the kids, grilled stick bread on the fire and then older kids were "levelled up" to the next youth sections and got their new colored scarfs of their new troops.
German report of that weekend: https://dpsg-salach.de/2022/bericht-vom-stammeswochenende/
@tkanos Oh, this ASCII art preview is looking nice! :-)
@prologic @tkanos I'm a volunteer not a leader, so I don't have a group of kids, but I help out at most events. Our yearly conference was good fun. We went through a few topics, scheduled most events for next year and assigned organizers. Later, we went on an excursion to nearby Schloss Weißenstein where we got a guided tour through the palace and saw super amazing microscopic shots of all sorts of things. The tour guide's dad was a pioneer on microscopic photography. The absolute highlight at the end was watching some kind of glue crystalizing live. Highly entertaining science art. I'll be back some day, that's for sure.
In order to get to the Kreuzberghütte that we rented for the weekend, we split up into two groups and went for a scavenger hunt. It took both teams a bit longer than we anticipated, but they all made it. On the way back we discovered that one group solved one quizz completely and utterly wrong, but still managed to find the final solution with the next coordinates. They parked a few meters ahead than what we had planned and found something completely different, that still perfectly matched the vaguge description on their note.
For dinner on Friday we cooked Linsen mit Spätzle at the hut. When we wanted to roast onions a gas smell suddenly was in the air. So we quickly shut down the gas stove and checked for leaks, but couldn't find any. Next attempt and the gas smell was back again. We knew the group before us broke one of the two pit toilets, reported the hand water pump in the kitchen to be broken (worked flawless after priming, though), didn't turn off the main gas tap, left a filthy baking tray behind, didn't close a window shutter, so we figured maybe that's also why the stove was cactus. Hence we decided to get our own gas cooking equipment from our material store. Luckily, we stayed regionally, so about one and a half hours to two later we were back in business. When finally dressing the salad we noticed, that the olive oil with truffle was the cause for the gas smell. Never use this kind of oil for browing onion, kids! Unless you wanna have a good story to tell (and delay your meal).
@movq Only a few things I really looked at in more detail. I decided to keep a few pages. CS even in total without glimpsing over. But most of the stuff I just checked for recycling as scratch paper. No real gems, though. There are a lot of centimeters in height to cover in the future.
@tkanos The uploader blocked this video in Germany.
A few hours later I got rid of 27 cm double-sided printed or written DIN A4 paper and have a 10 cm stack of scratch paper for the rest of my life. To be continued.
School was such a waste of paper
I'm weeding out my old school stuff. What a giant paper mess.
Sorry, I was out with the scouts.
@stigatle This looks super beautiful! Great subject, perspective and colors.
@movq Haha, I can barly read it. But just because I know what it's supposed to say. :-D
@mckinley Sounds good to me, go for it. Interesting mention analysis btw.
Very nice, @tkanos! 1. Indeed. :-) 4. Ah, now I see. Didn't think of follow metadata. Ten seconds is really awesome. :-)
@prologic @darch @mckinley Yes, I just meant to remove the line, when there are no naviation links. But it's fine. Thank you, darch!
I noticed some unnecessary horizontal rules being rendered at the bottom of twts in the conversation view lately with yarnd's new design change. They can be seen at least when not being logged in. Not sure if it is the same experience with an active user session. I reckon there will be fork buttons then, so in that case they would be fine, indeed.
Unnecessarly rendered horizontal rules at bottom of twts
In fact, these lines are implemented as border-top
CSS properties of twt-nav
-classed <nav>
containers. But the <nav>
s are empty, so I would expect them not being there in the first place. Empty navigation doesn't make much sense to me.
In any case, keep up the good work! :-)
@tkanos Cool! I like your disclaimer in the readme. :-D A few things caught my eye while scrolling through the code, the ones I remember:
1. The protocol switch in lines 141ff could make use of else if
.
2. There's a superfluous space in the progress bar in line 155.
3. The User-Agent
header contains a {
which I reckon is a typo. Also, I reckon the URL and nick should be swapped, in case you wanted to stick to this discoverability format.
4. The feed discovery regex assumes that filenames always are twtxt.txt
which will miss a few feeds, such as @anth's and @hxii's. Parsing mentions would be more accurate. And then also parse all mentions from a twt, not just the first one.
5. If you're still bored, adding support for archived feeds would be a thing. :-)
Anyways, nice work!
We checked out the routes for our scavenger hunt on Friday evening and man, did we enjoy a sunset. Bloody amazing.
Terrific sunset
@movq Hahahaha, this is great! :-D Thank you!
@mckinley My client parses the mention and just shows the URL. Since I don't follow that feed, it is rendered white on red just like any other feed I don't follow. My markdown support is very limited, inline code is unknown to tt, so the mentions put in code blocks are just treated as regular mentions. And then you can see, that you mentioned me incorrectly. :-P
Mentions in tt
@movq True hackers know how to diguise their break-ins as innocent dir
output.
@movq Haha, great! :-) Actually my first time listening to them.
@movq Absolutely impossible!
Boy, it was fricking cold with the wind today. Can't believe that just three weeks ago I was sweating like a pig. But the rain clouds were pretty nice. Only my camera struggled very much with these lighing conditions. Basically half of the images totally blurred.
Cloudy sky in the evening
The common kestrel on the nature reserve sign didn't see me coming, so I managed to sneak in up to about ten meters before it took off quickly.
A German without bread is like an American without a gun.
@tkanos :-D Sadly, so much truth in that, though.
@mckinley Oh, very interesting, thank you! Hahaha, great finding about comments. It never occurred to me either. Same with empty lines I reckon. I reckon a comment extension should be documented next. ;-)
@tkanos Thanks for the clarification. Haha, it's always the same with quickly cobbled together code. ;-)
@mckinley I got your point and I'm also under the impression that \t
is allowed in the message. Can you elaborate on why you think it is not?
@mckinley I got your point and I'm also under the impression that \\t
is allowed in the message. Can you elaborate on why you think it is not?
@darch Titles and subjects are two different things in my opinion. A title is a caption, brief summary or some description of a longer content that follows. A subject is a – in this case human readable – reference in a reply to some topic in order to group several twts to a conversation. Forks aside, the first twt starting a discussion typically doesn't have a subject. But some article would have a title in most cases. You are right in that the subject mechanism could be abused for a crude title implementation. I wouldn't do it, though.
@prologic I reckon there is a some kind of frame or hook tool for these loom bands.
@mckinley Even though I miss a title for general purposes, I'm not sold of cramming it into twtxt. It's just not made for it. To only announce new articles, that format would work, though. It's basically what some people already do, except a space rather than a tab is used between the title and link.
@movq Ta, in my ~/.Xmodmap I just set my multi key to Caps Lock, which I had deactivated anyways. Now I can insert a non-breaking space with Caps Lock+Space+Space. Nice.~
@prologic I fear that calls for even more trouble. But you can try.
Not sure which conversation you mean, @eaplmx (it's already quite late here), but here's my take: I think twtxt it's not heavy enough. For a real feed format I would like to have a clear separation between titles and content. And more options for the content. Plaintext and HTML at least. Twtxt is plaintext, but lots of folks (me included) actually use markdown in their yarns. However, the actual format being used is not advertised anywhere. To make things worse, I actually prefer reStructuredText over markdown. For podcasts some enclosure-like thing would be nice as well. Twtxt being line based also really limits structuring of longer content by hand. Just can't produce a nice source file.
On the other hand, RSS and Atom being XML are way too heavy for my taste. And then there's JSON feed. It's been a while since I skimmed over it, can't remember the details, but I wasn't sold on this one either. I also never encountered any JSON feed in the wild. So I'm still on my quest to find an optimal feed format.
@tkanos So basically it counts the mentions? We definitely need some feed normalization database, too many broken mentions out there. :-)
@mckinley Same with me, just learned about them now. :-D
@movq In hand written HTML I use them in between numbers and units. As
, though, because I haven't figured out which keys to press on my keyboard for that. I know, I know, there's even a smaller space for this purpose.
@prologic Whoops, I must have missed the error
return value! That sounds good to me. When there are just fatal errors that abort the program execution, a main function returning an error is definitely enough.
Hmm, if you don't want to report errors to stderr, where do you write them to? Hopefully not stdout. A log file? It obviously depends on the program and such, but generally I do not want to dig up errors from a log file. Usually, I find it much more convenient to see them directly. Properly dealing with stdout and stderr basically provides the capabilities for free to be pipeline-ready. And of course, -q
or something along those lines is also a good choice. When talking about more serious programs, that is. Not just some quickly cobbled together helper.
@mckinley Very clever date formatting, indeed! It also makes up for the largest code section, which I found quite funny.
@prologic I'm bad with terminology, sorry. But I think, we're basically on the same page. The only thing I wanted to say is, that I fully agree with @brasshopper's theory here and tried to elaborate a bit.
Even if you have a very deep knowledge of one language, you typically won't know about all the styles, patterns, spirits, etc. when starting to pick up a new one. Some ideomatics are just different. So when tackling something, you naturally do it like you've been doing it before in other language(s). In the beginning it just doesn't occur to you, that something might be done (entirely) differently in this new language. It takes time to pick up and sometimes even more to wrap your head around it. Open-mindedness certainly also helps, I found. The more you've really worked with different languages, the more your little knowledge base grows. Hence, you know that things can be solved in lots of different ways. And that will basically bring you awareness, that you might want to look out for the specific procedures of doing something in that other language you're using.
@tkanos I have the same question as @mckinley. What is influence? If I'm third place, I should probably slow down. :-D
@prologic Logging is different, I meant regular errors messages. E.g. you invoke the program with an invalid argument or something else goes wrong. That should then be reported on stderr and not stdout. When striving for a good coverage rate, error cases should not be forgotten in my opinion. Ideally, error messages are tested, too. I've seen a bunch of cases in the past, where something was broken, because there weren't any tests. But to be fair, I neglect them most of time, too. :-( Just checked, go-cmdtest
merges both stdout and -err, that's a no-go in my books.
@prologic @brasshopper @tkanos Exactly, you just know what you know. You simply can't follow a pattern which you haven't heard of, so you just stick to what you've been doing in the past. From my own experience and what I've seen from others, it's getting much better with more experience.
@prologic Please let me know how it turns out in the longer run. :-)
@off_grid_living Reminds me of my grandma's carrot garden back in the days. Super yummy.
Autumn is here, 17°C tops, in the night even 4°C. In fact, 0°C this morning. It chilling. Went up our backyard mountain again and had a great view. The rain in the beginning of the week helped to clear the air. We had a bloody awesome sunset today. Incredibly red light everywhere, unbelievable. Photos don't do justice.
40km away Stuttgart TV Tower after sunset
That's quite a complicated hello world, @prologic :-D
My main()
s often also just do os.Exit(run())
. Passing the command line arguments run run(…)
seems like another obvious thing to do. Even though, I should have done this more consistently, I reckon. I feel very stupid now, because for whatever reason, it never occurred to me to simply pass an io.Writer
for stdout. I really like that. Although, I'm wondering why there's nothing for stderr. Errors should definitely not mix with other output in my opinion. Anyways. When testing, I always captured stdout with a much more complicated code segment so far. Store the original output and error streams, set the new ones, execute the test, convert things to strings and finally reset to the original streams. I will definitely adopt these io.Writer
arguments. Thanks, mate! :-)
This cmdtest test execution also captures the coverage? It looks kinda more complicated than it should be, otherwise. Just a program with the test definition file would be enough in my opinion.
I don't know if I like the concept of providing a single test definition file or not. It's a bit intriguing, but I fear that's not flexible enough. Just a gut feeling, might be wrong.
@thecanine Interesting! Hahaha, I didn't even know that this breed only exists in comics. :-D
@prologic Uh, that looks kinda cool. Usually, I open the HTML report in the browser.
@mckinley Crazy! My feed preview extension kicked in and rendered the feed as it is supposed to do. Hence, I had to open it in porn mode to enjoy your black magic. I'm very surprised that the XSLT is this short. And that I could easily understand it. It's been at least six years since my former employer forced me to use XSLT. Just the $
prefixes surprised me, didn't remember them at all.
@thecanine Ta! It shows two views of my client. The upper one is the conversation view with the second message being focused. Down below is the URLs view where also the second link is selected. In reality, I cannot see both at the same time, hence, this screenshot was edited together. 16 colors are truly enough, I'm not decadent!
@thecanine Good point, for animations of blinking eyes, larger eyes are probably better. So there are real dogs out there who have blue eyes? I once heard that most animals only come with brown eyes. Not sure if that's true or not. Also back in the days our biology teacher told us that blue eyes are basically a gene defect. ;-) I like blue eyes on humans.
@eaplmx Have a look at the three recommendations over there: https://yarn.social/#manually Jenny would be probably my choice if I had not written my own one, which is still unusable for everybody else. I didn't lay my hand on it ever since. Polishing and bug fixing desperatly needed.
@movq @prologic Same with me, I often get mentioned as either https://lyse.isobeef.org
(filename missing entirely) or even http://lyse.isobeef.org
(HTTP rather than HTTPS as an added bonus on top).
Also for some reason user agents "yarns/master@19127bf (search.twtxt.net Support: https://search.twtxt.net/support)" and "master@19127bf (+https://search.twtxt.net)" are requesting /user/lyse/twtxt.txt
on my server every hour. This path of course results in a 404. I reckon way in the past someone mentioned me wrongly and the search engine now has my broken URL in its database forever.
I have zero knowledge of this mention completion system in yarnd. I should probably take a look at it. For the search engine some manually maintained normalization rules (or alias rules or whatever you want to call it) are required to fix this. In the simplest case a blacklist would suffice. But some rewriting would have the benefit to be more user-friendly with future features, such as mention search etc.
@thecanine Very nice. I indeed like the new one better because of the smaller eye. It appears still a tad too large, but I obviously have no clue when it comes to dogs. :-) Its mouth makes it also much more friendly. Crazy, what just two pixels can do.
@prologic No you don't. :-)
Not mentioned correctly
@abucci Ah, Mrs. Lovelace, cool. :-)
@abucci Did you name her after the programming language?
@thecanine I'd love to have only one percent of your discipline. I can't help myself but I found those optimizers always a bit suspicious. Luckily, I have zero need for them.
@tkanos Without batting an eye I'd obviously go with Linux.
Again. My two milk bottles overflowed. Made quite a bit of mess. :-/ Better bring a third one next time.
Does anyone have a recommendation for a (semi-)professional food processor or mixing machine? I basically just want to knead doughs of different consistencies. No cutting required. Currently, the standard Bosch MUM4 or some predecessor died on me. I gotta disect it, but some mechanics broke.
@stigatle Very lovely! Gray soup over here, rain is very welcomed.
@prologic Oh boy, this is interesting, it works indeed! Thanks mate! Now I just have to read up on why that is the case.