# 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 6525
# self = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=34
# next = https://watcher.sour.is?uri=https://lyse.isobeef.org/twtxt.txt&offset=134
@thewismit Oh yeah, this is bloody awesome! \\o/ Need to remember this channel.
@thewismit Oh yeah, this is bloody awesome! \o/ Need to remember this channel.
On the way to the woods I came across a kestrel (?) today. Moving twigs in the wind and full zoom don't make for the highest quality photos. Everything had melted days ago, but we got snow overnight again, some forest glades were covered in 15-20 cm snow. https://lyse.isobeef.org/schnee-im-wald-2021-01-25/
@off_grid_living I suspect this is not enough to move that amount of air. But I don't have any data nor have I even tried this. Just some gut feeling.
@vain Cool! I like the twt hash test suite. ;-) You could extend the feed fetch with ETag
or If-Modified-Since
headers.
@niplav I first thought my client had a bug.
@jlj Excellent! ;-) Yep, just let Nginx terminate the HTTPS session and pass everything over HTTP to twtd.
@jlj Your redirect on twtxt.net is missing the /twtxt.txt
. :-) Don't you want to add TLS support, now that you're moving? Since people move around lately, I need to add a "mark all twts read" option to my client, because all the hashes are now different and show up again as unread.
@off_grid_living Green looking good, mate. Doing something the first time always takes much longer than anticipated and you also encounter plenty of surprises. Even the second time you learn something new. At least that's my experience.
@vain Ah nice reference! I was already wondering when I saw jenny appearing in my access log. :-)
@prologic @xuu Cool, lextwt to the rescue! With retwt it looks like this: https://lyse.isobeef.org/retwt-broken-code-rendering.png My own twtxt parser handles subjects too freely and treats the first parentheses – no matter where in the twt the appear – as subjects which happens to be my example subject hash tag in markdown inline code. Since I hide the subject to save space, the code block is empty.
@adi @thewismit @vain @prologic Yes, so do I. I don't feel any overhead, even for the most basic stuff. But I also have a single repository for all my super tiny stuff of various sorts.
@birb It's about time! Welcome back mylord.
@thewismit @prologic For a start we could teach twtd to show all its cached external feeds, too, not just the internal ones.
Since I lately see technically invalid twt subject hash tags for machine-parsable conversation grouping every now and then, I just taught the twtxt parser of my client to recover these (#1234567)
subjects. Now they are grouped back into the proper conversations and do not form new root/single twts. Note, that the offending clients did not expand the hash tag in the subject to a proper (#<hash url>)
form prior to publishing the twts. (Let's see whether my first markdown code will be expanded by twtd to a linked hash tag or not.)
@thewismit Well, English is not my mother tongue, I just made "diffability" up as it sounded good and seemed likely to exist. Though, turns out, its meaning is a bit different. What I meant to say is the "possibility to create a diff". Glad that be both learned something new today. :-D
@thewismit I don't think this is possible right now. In fact this doesn't work for any external feeds and is not just limited to other twtd instances. That's what I experienced as an anonymous twtxt.net visitor. But I use twtd hardly at all, just to fool around locally, so take this with a grain of salt.
@adi @thewismit Sure, you don't need to have one, but does it really hurt you? Even for small stuff it's an easy way have distributed backups. I also wouldn't want to miss the quick and easy diffability, which comes in very handy if I accidentally hit the wrong keys in vim without immediately noticing. The particular hosting is debatable, no question, but I certainly wouldn't want to loose the version control aspect in general.
@prologic I thought, that vain was a made up nickname and not a real word.
@vain @prologic Up until now I didn't know that this is even an English adjective. What future nick are you thinking about?
@anth What window manager are you using and what did your daughter teach you? :-)
@vain Absolutely! When reading through the back log prior to this invention, it was horrible.
@deadguy Any success with the coding otter yet? ;-)
@vain Yeah, over the time it feels like there's less time to do useful stuff. It's even worse since I started twtxting. :-D
@prologic @xuu Yeah, documenting them would be great. Maybe we don't even need a separate meta data file and can handle everything using special comments.
What the fuck, it took systemd up to release 240 to implement append:/my/stdout.log
for StandardOutput
and -Error
! Of course this Ubuntu box runs version 237… I was joking to my mates that they added file:path
in version 236, not knowing that this evil insinuation is actually true! O_o Who needs files anyways? There's this Über-Pötterlog. Holy mother! Back to good old /bin/sh -c '… >> /my/stdout.log'
.
@off_grid_living Fair enough. I just thought, that QLD would be quite humid and therefore provide perfect conditions for oxidation. I often heard, that once the thing is sealed up and the corrosive stuff inside used up, it won't rust any further. But it needs to be sealed, if there are leaks, oxidation continues.
@pbatch Cool solution! The one time I had to implement such custom ordering I went with holey integers and recompute, because items were rearragned only very rarely.
@vain Oh, this is wonderful! I just started reading it.
@prologic No doubt about that, but sadly this is not one of them. One record summer follows the next. Decades ago, winter used to be much cooler, too.
@off_grid_living I'm no material expert, but this looks fine. If you cap off the square tubes, you'll probably stop the oxidation starting from inside. I wouldn't want to paint the inside.
@vain Yes, cities make a difference. Some photos were taken around 450-500m NHN, much higher than where you are. @adi Still nice, though.
@adi How much did you get? Here it will be gone on Wednesday, temperatures are supposed to rise from tomorrow on.
@vain Oh yeah, we got five centimeters over night.
@vain Looks like you haven't sacrificed enough cats, have you? 2021 is the year when Linux finally prevails the desktops!
@adi In my case I had trouble to get the overall idea on how to work with several files. My initial expection simply wasn't met. However, your HOWTO is the missing link, thanks mate! You definitely have to link this somewhere prominent. Maybe also publishing the raw mkws website sources (or a subset of it, probably without the tarballs) would also helpful to get one or two tricks. Ah, unprocessed, makes sense.
@adi Yes, good idea! A little bit more complex example would certainly also help. It took me quite long to wrap my head around on how to use this properly (maybe I was just too tired). What does the "upp" in "upp{html,xml,css,…}" stand for? "pp" references the preprocessor, but the "u"? At the moment I don't have a usecase for mkws, but I'll keep it in mind. Btw, the "man" directory in the File Hierarchy section misses the "" in the tree.
@adi Yes, good idea! A little bit more complex example would certainly also help. It took me quite long to wrap my head around on how to use this properly (maybe I was just too tired). What does the "upp" in "upp{html,xml,css,…}" stand for? "pp" references the preprocessor, but the "u"? At the moment I don't have a usecase for mkws, but I'll keep it in mind. Btw, the "man" directory in the File Hierarchy section misses the "" in the tree.
2021-01-15T20:45:00+01:00\t@https://twtxt.net/user/adi/twtxt.txt> (#u6jmita) In my case I had trouble to get the overall idea on how to work with several files. My initial expection simply wasn't met. However, your HOWTO is the missing link, thanks mate! You definitely have to link this somewhere prominent. Maybe also publishing the raw mkws website sources (or a subset of it, probably without the tarballs) would also helpful to get one or two tricks. Ah, unprocessed, makes sense.
@adi I reckon you should make the pp docs more prominent on the front page. I'll take a deeper look into it tomorrow.
@xuu @vain @prologic Thanks, great analyses! Ha, I have 42 twts! Well, now not anymore. Using the target URL of a redirect and not the original one should get rid of at least some of the duplicates. I would have expected some of the EMPTY flagged ones as FAILED instead, esp. all the ones with the invalid TLDs (see mine for example). But I need to have a deeper look at the code. Cool project nevertheless!
@off_grid_living I'm pretty sure you – as someone with a lot of gardening experience – will also find a solution to cover up the looks. :-)
@prologic @vain @xuu Wow! Did you account for duplicates such as the twtxt.net URL change?
@vain Thanks, but in reality it was of course much nicer.
@adi @prologic My tt client uses the conversation URLs in the twt subjects when creating a reply, because I think this makes more sense, too. This is also covered by the Twt Subject Extension Spec. This client is still in a terrible state right now – hence "tt" as in "terrible tui" rather than "twtxt tui". :-P
@vain Cool. I believe for experiments it's a totally valid approach to go with cheap stuff. No need to spend tons of money.
@vain Skill comes with practice. Mission accomplished?
@off_grid_living This looks great, nice work! I really enjoy following your build progress.
@prologic @antonio Sweet! But yeah, I remember seeing tons of leaves and branches torn off when walking on the down under footpaths and thinking "WTF have they done here again!?" Regarding nature: earlier I've seen ~200 sheep beeing driven down a hill to a new snowy paddock. That was quite cute to watch.~
While stalking @lyxal I came across the Fibonnaci Project and dug out my heavily rusted Ada knowledge back from the days. I couldn't believe it wasn't listed, yet. I certainly need to do something with that language again. Thanks mate! :-)
@vain It just works perfectly, no need for fun. :-P Maybe my issue is that it takes way too long to get used to a completely different appearance and my brain just thinks: REVERT!
@vain If it is getting too bright, I turn on the light in the room to create fairly equal illumination around my monitors.
@vain I don't get this dark mode thingy everywhere. The only black things are my terminal and background image. ;-)
@prologic Thank you! We don't need to rush this. It's better to take our time and produce a good spec rather than fix it several times after publication.
@vain @prologic Nice "Good morning!" example, I didn't think of that! I always thought that there's a pretty much zero chance of two users creating the same twt at the same second. But your sample is actually quite likely to happen, especially if the twtxt universe grows. So, yeah, there are indeed candidates for potential hash collissions without the author information.
@prologic Nice! Okay, that's where the "d" comes from, but I don't get where the twtxt.net like URL was produced. Must be hidden somewhere in the call chain.
@vain @prologic The "+00:00 to Z" thing comes from Go's internal time handling. time.RFC3339
will always produce Z
rather than +00:00
. I doubt that it is possible to keep the original information in the time.Time
object itself, whether +00:00
or Z
was parsed from the _twtxt.txt_, so I took the lazy route of just defining Go's behavior in the spec. That's also why UTC must be used, if the original date does not specify a timezone at all. For a quick and easy hash calculation it would be ideal to hash the exact twt line without the twter URL, but that would have been a tiny bit bigger change I didn't have the courage to suggest.
@lyxal I guess the experiment is about changing habits. — Now, I'm off to the woodworking shop and doing some realworld stuff.
@prologic Alright, I'm gonna use DDG from now on. Let's see how this goes. However, I really don't want to miss out on the 90 YT channels I'm "subscribed" to (I don't have an account, I just monitor them with my own tooling).
Shame on me, but I'm using Google as my search engine. I also watch quite a lot of YouTube. So I guess this makes this a "no". All the other things could die tomorrow and I wouldn't care the tiniest bit at all.
@prologic Thanks mate! No doubt about the one and only true original, but I certainly praise you for its resurrection. :-) Most old feeds I found were dead by then, a lof of the maintained ones are on your service.
@prologic On a side note, is it just an operator error or is there actually a bug in one of your clients? You replied to the broken URL https://lyse.isobeef.orgd/user/lyse/twtxt.txt
, which looks like a twtxt.net instance, but there's also a "d" appended to the top level domain. I've seen the exact same pattern happening three days ago with @vain in this twt: https://www.uninformativ.ded/user/vain/twtxt.txt
@prologic No offence, to me it seems this client is abandoned, there are three PRs untouched for months or even years, which fix actual crashes of the client. When I discovered the crashes on my own and fixed them, I wanted to send a PR, but then realized that they had all been already addressed by some folks, but nothing happend. So I then didn't bother any further.
@prologic I'm using my own terrible mess over here, there's also a small screenshot (not sure whether you can make out anything). It actually started out as something completely different. I just wanted to fool around with Urwid, a Python text user interface library. But you know how things end up. ;-) At the moment I rely on the official twtxt CLI for fetching, caching and following, but some day I'm gonna integrate it into tt
for sure. Hopefully sooner rather than later. This client is currently in a really horrible state and not very usable by others (hardcoded paths and crap like this). Finally going to bed now, see you in a couple of hours, g'night!
@prologic Absolutely correct, this format is actually both ISO 8601 as well as RFC 3339, where ISO 8601 is a superset of RFC 3339, making dashes and colons optional among other things. `datetime.isoformat()` produces the ISO 8601 formatted timestamp, which happens to be RFC 3339-compliant, too.
@prologic I'm sure I will find some time tomorrow or in the next days.
@prologic Exactly, that's what I probably end up doing. But first I have to write up the spec on this extension, I reckon. :-D Yesterday I came across that issue and pull request, both you and @vain had discussed back then.
I just noticed a bug in my twtxt client's twt publish form – luckily just before submitting. Why on earth make it most programming languages so easy to misuse their damn date time APIs!? On today's episode we have Python's datetime.datetime.utcnow().replace(second=0, microsecond=0).astimezone().isoformat()
which is not what we want, it's actually datetime.datetime.now(datetime.timezone.utc).replace(second=0, microsecond=0).astimezone().isoformat()
instead. The former gives us the time in UTC and thus is off by an hour in my case: 2021-01-03T23:30:00+01:00
vs. what I'm really after: 2021-01-04T00:30:00+01:00
@vain @deadguy @prologic I'm currently in the process to come up with something automated, too. At the moment I manually check my Nginx access log with cut -d ' ' -f 12- ~/www/logs/twtxt.log|sort|uniq -c
It works for now, but it's certainly not good enough. I definitely want to filter out search engine and other unusable UAs, fold software versions (twtxt.net with its git hashes comes to mind ;-)) and also check the result against my subscribed feeds, to quickly discover new subscribers.
@gareppa @gareppa Hey, same to you! Which of your feeds is the real deal? The one on twtxt.net or tilde.club? It also seems that your User-Agent HTTP header from tidle.club is broken, there's a superfluous "public_html/" in the path. ;-)
@prologic Just request the last seen twt as well in the Range
header and if it doesn't match the old one you've already seen, you know that this feed doesn't operate in append only mode, so that you can request the whole feed. It's worth mentioning that this also happens if the key value comments at the beginning of the file have changed, too, e.g. when the maintained subscription list has been modified. Yes, not ideal. Healthy 2021 everybody!
@prologic Hahaahaaa, brilliant, you're right, it's the A-Team lawnmower. :-D I took the photo yesterday in front of a new background – here in much higher resolution. Unfortunately, I don't have enough dark gray bricks to better imitate the original coloring. There are also plenty of pictures from a couple of years ago: https://lyse.isobeef.org/lego/a-team-van/v1.5/ I definitely should weed out all the duplicates someday…
@prologic My pleasure! Thanks for all your efforts on improving twtxt as a whole.
@prologic Yeah, I know. I'm still trying to come up with something nice and easily recognizable. I just placed a JPEG next to it, but something this small doesn't work terribly well. I'll keep experimenting.