# 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 238023
# self = https://watcher.sour.is?offset=227893
# next = https://watcher.sour.is?offset=227993
# prev = https://watcher.sour.is?offset=227793
posting from CLI just cuz i can lalalala i have nothing to talk about
posting from CLI just cuz i can lalalala i have nothing to talk about
i love posting to my own personal youtube site i can just do whatever tf i want. no content ID here just vibes and finger crossing that i don't get a cease and desist one day
i love posting to my own personal youtube site i can just do whatever tf i want. no content ID here just vibes and finger crossing that i don't get a cease and desist one day
@lyse Oh! no need to be sorry and feel free to keep at it if it helps, I don't mind. It's just that I'm always on the lookout for corpo-bots and crawlers slipping through the cracks (a fun little game of sorts) 😅 the only thing I let them see is a robots.txt telling them to :diffoff

Also, I'm curious about the invalid lines in my feed. is it something I should lookout for in future?
@lyse Oh! no need to be sorry and feel free to keep at it if it helps, I don't mind. It's just that I'm always on the lookout for corpo-bots and crawlers slipping through the cracks (a fun little game of sorts) 😅 the only thing I let them see is a robots.txt telling them to :diffoff

Also, I'm curious about the invalid lines in my feed. is it something I should lookout for in future?
owow. Gopher is still here!
That graph doesn’t look that bad. I mean, by the looks of it, I wouldn’t even qualify it as a DDoS. 😅
@movq I am sure they would have been just fine. Should we assume your main driving machine is on solid state?
This Simon Willison’s post is a good read: https://simonwillison.net/2024/Dec/31/llms-in-2024/. If you haven’t read it, and are negatively or positively thinking of the so called AI, then you should.

There is more at Simon’s blog. It is worth spending some time in it.
@ after some fighting with this janky software (that i still love despite the jank) we now have stupid tux as our logo. slayyy
@ after some fighting with this janky software (that i still love despite the jank) we now have stupid tux as our logo. slayyy
changing my video site's logo to this silly no thoughts head empty tux clip art. because i can. https://openclipart.org/detail/103855/tux-the-penguin
changing my video site's logo to this silly no thoughts head empty tux clip art. because i can. https://openclipart.org/detail/103855/tux-the-penguin
@prologic What are we looking at here? Are those requests per second? 🤔
@prologic What are we looking at here? Are those requests per second? 🤔
@prologic What are we looking at here? Are those requests per second? 🤔
@prologic What are we looking at here? Are those requests per second? 🤔
@lyse @kat Thanks. 😅 Fingers crossed.
@lyse @kat Thanks. 😅 Fingers crossed.
@lyse @kat Thanks. 😅 Fingers crossed.
@lyse @kat Thanks. 😅 Fingers crossed.
[47°09′44″S, 126°43′49″W] Wind speed: 67kph
@movq oh no good luck!!!
@movq oh no good luck!!!
On DDoS, wouldn’t sshguard and/or fail2ban work?
It seems like this is cached, I think levels is doing good work with this.
Hell0 here
Happy to find this secret place on the gopherspace
It turns out my ISP supports ipv6. After 4-5 months with only ipv4, I thought to ask customer support, and they told me how to turn it on. (I'm pretty happy with ebox so far. Low-priced fibre with no issues so far. Though all my traffic goes through Montreal, 500km away from me in Toronto, which adds a few ms to network latency.)
[47°09′17″S, 126°43′48″W] Automatic systems disengaged due to heavy rain
So I need to figure out how to block ASN(s)...

Additionally, I' thinking of; How to detect DDoS attachs?

Here's one way I've come up that's quite simple:

> Detecting DDoS attacks by tracking requests across multiple IPs in a sliding window. If total requests exceed a threshold in a given time, flag as potential DDoS.
So I need to figure out how to block ASN(s)...

Additionally, I' thinking of; How to detect DDoS attachs?

Here's one way I've come up that's quite simple:

> Detecting DDoS attacks by tracking requests across multiple IPs in a sliding window. If total requests exceed a threshold in a given time, flag as potential DDoS.
On my blog: 🍾 Happy Belated Calendar-Changing Day, 2025 🎆 https://john.colagioia.net/blog/2025/01/05/hny2025.html #holiday #newyear #publicdomain
https://tuxicoman.jesuislibre.net/2025/01/la-reconnaissance-vocale-sous-linux-2024.html speech note whisper translate
[47°09′43″S, 126°43′25″W] Working impossible due to thunderstorm
@movq Sweet!
Pinellas County - Long Run: 11.00 miles, 00:09:38 average pace, 01:46:02 duration
just one of those ones you never want to stop. it was dark, quiet, and lonely which just let me zone out with the cool weather and maintain what felt easy. didn't look at the watch until the end when it notified me it was going to die. adjusted the mileage and time to reflect.
#running
Pinellas County - Long Run: 11.00 miles, 00:09:38 average pace, 01:46:02 duration
just one of those ones you never want to stop. it was dark, quiet, and lonely which just let me zone out with the cool weather and maintain what felt easy. didn't look at the watch until the end when it notified me it was going to die. adjusted the mileage and time to reflect.
#running
Pinellas County - Long Run: 11.00 miles, 00:09:38 average pace, 01:46:02 duration
just one of those ones you never want to stop. it was dark, quiet, and lonely which just let me zone out with the cool weather and maintain what felt easy. didn't look at the watch until the end when it notified me it was going to die. adjusted the mileage and time to reflect.
#running
@lyse Cool 👌
@lyse Cool 👌
Hmmm so I've sustained two DDoS attacks on my Gitea server today. A few hours apar. Still analyzing the traffic...
Hmmm so I've sustained two DDoS attacks on my Gitea server today. A few hours apar. Still analyzing the traffic...
@movq Oh dear. All the best of luck with that noise! And the disks.
@movq I don't use them either.
In the process of temporarily removing and securing all my hard disks. They’ll be turning this building into a construction site for the next weeks/months. Lots of heavy drilling and hammering. Not sure what this means for spinning disks and I’d rather be on the safe side. 🫤
In the process of temporarily removing and securing all my hard disks. They’ll be turning this building into a construction site for the next weeks/months. Lots of heavy drilling and hammering. Not sure what this means for spinning disks and I’d rather be on the safe side. 🫤
In the process of temporarily removing and securing all my hard disks. They’ll be turning this building into a construction site for the next weeks/months. Lots of heavy drilling and hammering. Not sure what this means for spinning disks and I’d rather be on the safe side. 🫤
In the process of temporarily removing and securing all my hard disks. They’ll be turning this building into a construction site for the next weeks/months. Lots of heavy drilling and hammering. Not sure what this means for spinning disks and I’d rather be on the safe side. 🫤
@movq Thanks! I already found it and patched it to run in my ancient Python version (no match keyword and exec(…) only allows globals and locals as positional arguments). :-) https://lyse.isobeef.org/tmp/mcalc-patched.py.txt
@lyse That’s the script, if you’re interested: https://www.uninformativ.de/git/bin-pub/file/mcalc.html
@lyse That’s the script, if you’re interested: https://www.uninformativ.de/git/bin-pub/file/mcalc.html
@lyse That’s the script, if you’re interested: https://www.uninformativ.de/git/bin-pub/file/mcalc.html
@lyse That’s the script, if you’re interested: https://www.uninformativ.de/git/bin-pub/file/mcalc.html
@lyse Right, there is some hope left for Python docs because of the type hints. 😃 (I still don’t use them, because, ugh. 🤦)
@lyse Right, there is some hope left for Python docs because of the type hints. 😃 (I still don’t use them, because, ugh. 🤦)
@lyse Right, there is some hope left for Python docs because of the type hints. 😃 (I still don’t use them, because, ugh. 🤦)
@lyse Right, there is some hope left for Python docs because of the type hints. 😃 (I still don’t use them, because, ugh. 🤦)
@prologic Excellent, working fine now. Thank you!
To quote GLaDOS: Yesterday I saw a deer!

To quote GLaDOS: Yesterday I saw a deer!

To quote GLaDOS: Yesterday I saw a deer!

To quote GLaDOS: Yesterday I saw a deer!

@movq Truly classic. :-D
@movq That sounds super useful! I always used bc and ibase=2/obase=2 for conversions. But your digit grouping is what I always lacked. I gotta switch.
@movq Yeah, the Python docs are more like a book. They absolutely shine if you have no idea and read them from top to bottom. The tutorial is baked right in. But they don't work all that perfect as cheat sheets. I also remember looking for the return types way too long in the past.

I would have thought that this could be easily improved when type hints are in place. And it sure does: https://www.tornadoweb.org/en/stable/httpclient.html#tornado.httpclient.HTTPClient.fetch
@movq It's crazy! I thought about it the other day on my hike. There are so many shady areas in winter that are fully blasted by the sun in summer.
@movq Heck yeah, they're both very lovely! I like how you can still see the full disk through the clouds in the first one.
@kat Oh cool, I wish I had a similar subject in school. :-)
I cobbled that together yesterday, @aelaraji. Since I was too lazy to write some tests, I simply hit your feed as I knew it contains two invalid lines right now. Sorry mate! :-( Next thing is to actually write some proper tests, improve the messages, etc.

Here's the code: https://git.mills.io/yarnsocial/validator

Looking forward to that, @prologic. :-)
“We are...so far removed from the realities of production and work that we inhabit a dream world of artificial stimuli and televised experience.” 📀💩 Добре дошли в пост-дигиталното бъдеще
[47°09′10″S, 126°43′48″W] Automatic systems disengaged due to thunderstorm
For the time being... I've just blocked all of OpenAI(s) Bots. They (_thankfully_) publish a JSON endpoint that you can use to block all OpenAI crawlers from reaching your server (_in my case, blocking it at the edge_). Example:


proxy-1:~# curl -qs https://openai.com/gptbot.json | jq -r '.prefixes[].ipv4Prefix' | xargs -I{} ./block-ip.sh {}


Where block-ip.sh is simply:


#!/bin/sh

ufw insert 1 deny from "$1" to any
For the time being... I've just blocked all of OpenAI(s) Bots. They (_thankfully_) publish a JSON endpoint that you can use to block all OpenAI crawlers from reaching your server (_in my case, blocking it at the edge_). Example:


proxy-1:~# curl -qs https://openai.com/gptbot.json | jq -r '.prefixes[].ipv4Prefix' | xargs -I{} ./block-ip.sh {}


Where block-ip.sh is simply:


#!/bin/sh

ufw insert 1 deny from "$1" to any
@aelaraji Yes! 👏 This is exactly what it is! 🤣 I will of course soon™ be hosting this service, likely at validator.twtxt.net 😅😅
@aelaraji Yes! 👏 This is exactly what it is! 🤣 I will of course soon™ be hosting this service, likely at validator.twtxt.net 😅😅
Any idea What's this "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?
Any idea What's this "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?
[47°09′07″S, 126°43′13″W] Weather forecast alert -- storm from N
@kat Haha 🤣 If someone figures this out, please let me know 🙏🙏 -- In the meantime, I'm going to very soon™ write a daemon that will watch the audit log for repeated violations and add to the network firewall.
@kat Haha 🤣 If someone figures this out, please let me know 🙏🙏 -- In the meantime, I'm going to very soon™ write a daemon that will watch the audit log for repeated violations and add to the network firewall.
This is better:


proxy-1:~# ./audit-log-by-ip.sh 4.227.36.76 | coraza-log-formatter -m -
2025/01/04 23:17:04 4.227.36.76 58982 GET /external?aff-HY0BLO=&f=mediaonly&f=noreplies&nick=g1n&uri=https%3A%2F%2Fthe-president-codes.linegames.org null 0  On OWASP_CRS/4.7.0
Actionset: OWASP_CRS/4.7.0
Message: Bad User Agent
Severity: 0
Raw: SecRule REQUEST_HEADERS:User-Agent "@pmFromFile /etc/caddy/waf/bad_user_agents.txt" "id:2000,log,phase:1,deny,msg:'Bad User Agent'"
This is better:


proxy-1:~# ./audit-log-by-ip.sh 4.227.36.76 | coraza-log-formatter -m -
2025/01/04 23:17:04 4.227.36.76 58982 GET /external?aff-HY0BLO=&f=mediaonly&f=noreplies&nick=g1n&uri=https%3A%2F%2Fthe-president-codes.linegames.org null 0  On OWASP_CRS/4.7.0
Actionset: OWASP_CRS/4.7.0
Message: Bad User Agent
Severity: 0
Raw: SecRule REQUEST_HEADERS:User-Agent "@pmFromFile /etc/caddy/waf/bad_user_agents.txt" "id:2000,log,phase:1,deny,msg:'Bad User Agent'"
Nice! I wrote another useful tool 👌


proxy-1:~# ./audit-log-by-ip.sh 4.227.36.76 | coraza-log-formatter -m -
Actionset: OWASP_CRS/4.7.0
Message: Bad User Agent
Severity: 0
Raw: SecRule REQUEST_HEADERS:User-Agent "@pmFromFile /etc/caddy/waf/bad_user_agents.txt" "id:2000,log,phase:1,deny,msg:'Bad User Agent'"
Nice! I wrote another useful tool 👌


proxy-1:~# ./audit-log-by-ip.sh 4.227.36.76 | coraza-log-formatter -m -
Actionset: OWASP_CRS/4.7.0
Message: Bad User Agent
Severity: 0
Raw: SecRule REQUEST_HEADERS:User-Agent "@pmFromFile /etc/caddy/waf/bad_user_agents.txt" "id:2000,log,phase:1,deny,msg:'Bad User Agent'"
@prologic we live in hell
@prologic we live in hell
went out with my family today, brought my camcorder, resulted in a little vlog :) https://memoria.sayitditto.net/view?m=SjbDq15bL
went out with my family today, brought my camcorder, resulted in a little vlog :) https://memoria.sayitditto.net/view?m=SjbDq15bL
How in da fuq do you _actually_ make these fucking useless AI bots go way?


proxy-1:~# jq '. | select(.request.remote_ip=="4.227.36.76")' /var/log/caddy/access/mills.io.log | jq -s '. | last' | caddy-log-formatter -
4.227.36.76 - [2025-01-05 04:05:43.971 +0000] "GET /external?aff-QNAXWV=&f=mediaonly&f=noreplies&nick=g1n&uri=https%3A%2F%2Fmy-hero-ultra-impact-codes.linegames.org HTTP/2.0" 0 0
proxy-1:~# date
Sun Jan  5 04:05:49 UTC 2025


😱
How in da fuq do you _actually_ make these fucking useless AI bots go way?


proxy-1:~# jq '. | select(.request.remote_ip=="4.227.36.76")' /var/log/caddy/access/mills.io.log | jq -s '. | last' | caddy-log-formatter -
4.227.36.76 - [2025-01-05 04:05:43.971 +0000] "GET /external?aff-QNAXWV=&f=mediaonly&f=noreplies&nick=g1n&uri=https%3A%2F%2Fmy-hero-ultra-impact-codes.linegames.org HTTP/2.0" 0 0
proxy-1:~# date
Sun Jan  5 04:05:49 UTC 2025


😱
Done.
Done.
@lyse Oh good! It works haha 🤣 I'll bump it up a bit 👌
@lyse Oh good! It works haha 🤣 I'll bump it up a bit 👌
🧮 USERS:1 FEEDS:2 TWTS:1205 ARCHIVED:83338 CACHE:2807 FOLLOWERS:17 FOLLOWING:14
@prologic Looks like I'm hitting this now when reloading my subscriptions:

$ grep twtxt.net .config/twtxt/config | wc -l
26