blog.ratterobert.com

movq (www.uninformativ.de)

Day 1 was surprisingly finnicky. A lot of people got it wrong, apparently. Me too. 🤣

https://movq.de/v/488136b4ae/day01%2Dblurred.jpg

In reply to: #ftqfrta 19 hours ago
movq (www.uninformativ.de)

@bender Ah, god damnit. 🤣

In reply to: #wghyf4q 1 day ago
movq (www.uninformativ.de)

@prologic Nothing stops you from programming while in Vietnam. šŸ˜šŸ˜ˆšŸ˜…

In reply to: #hhdrrea 1 day ago
movq (www.uninformativ.de)

@bender Hmm, something’s weird with that post:

https://movq.de/v/cf64f3a625/s.png

šŸ˜…

In reply to: #wghyf4q 1 day ago
movq (www.uninformativ.de)

@lyse Damn. That was stupid of me. I should have posted examples using 2026-03-01 as cutoff date. šŸ˜‚

In my actual test suite, everything uses 2027-01-01 and then I have this, hoping that that’s good enough. 🄓

def test_rollover():
    d = jenny.HASHV2_CUTOFF_DATE
    assert len(jenny.make_twt_hash(URL, d - timedelta(days=7), TEXT)) == 7
    assert len(jenny.make_twt_hash(URL, d - timedelta(seconds=3), TEXT)) == 7
    assert len(jenny.make_twt_hash(URL, d - timedelta(seconds=2), TEXT)) == 7
    assert len(jenny.make_twt_hash(URL, d - timedelta(seconds=1), TEXT)) == 7
    assert len(jenny.make_twt_hash(URL, d, TEXT)) == 12
    assert len(jenny.make_twt_hash(URL, d + timedelta(seconds=1), TEXT)) == 12
    assert len(jenny.make_twt_hash(URL, d + timedelta(seconds=2), TEXT)) == 12
    assert len(jenny.make_twt_hash(URL, d + timedelta(seconds=3), TEXT)) == 12
    assert len(jenny.make_twt_hash(URL, d + timedelta(days=7), TEXT)) == 12

(In other words, I don’t care as long as it’s before 2027-01-01. šŸ˜šŸ˜…)

In reply to: #d2pj7pq 1 day ago
movq (www.uninformativ.de)

@prologic Very rarely. And if I/we do, then it’s by train or by car. šŸ˜…

In reply to: #kk7tyka 3 days ago
movq (www.uninformativ.de)

@prologic Really? That’s nice. šŸ˜… (God, I haven’t been on a plane in 25 years, I think.)

In reply to: #r62xlta 3 days ago
movq (www.uninformativ.de)

@prologic Hmm. šŸ¤” Well, I don’t run that server myself, so I can’t peek into the logs to see what’s going wrong … 🄓

In reply to: #74r2ziq 3 days ago
movq (www.uninformativ.de)

@lyse Oh yeah, there’s lots of them here. Even in winter when it’s freezing outside. I’m always baffled to see parrots in the snow … feels like a paradox. 🄓

In reply to: #vipj3ea 3 days ago
movq (www.uninformativ.de)

@prologic How do I test? You can try to mention my Mastodon account https://tilde.zone/@movq, if that helps. šŸ¤”

In reply to: #74r2ziq 3 days ago
movq (www.uninformativ.de)

@prologic Yeah, I meant ISPs. Hm, okay. šŸ¤”

In reply to: #h3pxyfq 4 days ago
movq (www.uninformativ.de)

@iolfree They’re not wrong, are they? šŸ˜…

In reply to: #qn5i7aq 5 days ago
movq (www.uninformativ.de)

@prologic Do these IPs belong to hosting providers or to providers of private internet connections? The latter is what I’m seeing on my server …

In reply to: #h3pxyfq 5 days ago
movq (www.uninformativ.de)

@prologic We have a bit of a vendor lock-in here in Germany: PayPal is sometimes the only non-shady option to pay for something. ā˜¹ļø

In reply to: #khrfy3a 5 days ago
movq (www.uninformativ.de)

@bender Once Advent of Code starts, I’ll start spamming, don’t worry. šŸ˜…

In reply to: #ocuiada 6 days ago
movq (www.uninformativ.de)

Hm, so regarding the hash change:

https://git.mills.io/yarnsocial/twtxt.dev/pulls/28

How about 2026-03-01 00:00:00 UTC as the cut-off date? šŸ¤”

In reply to: #d2pj7pq 6 days ago
movq (www.uninformativ.de)

@lyse Probably wouldn’t help, since almost every request comes from a different IP address. These are the hits on those weird /projects URLs since Sunday:

    1 IP  has  5 hits
    1 IP  has  4 hits
   13 IPs have 3 hits
  280 IPs have 2 hits
25543 IPs have 1 hit

The total number of hits has decreased now. Maybe the botnet has moved on …

In reply to: #qjlgy4q 6 days ago
movq (www.uninformativ.de)

@prologic Time to make a new internet. Maybe one that intentionally doesn’t ā€œscaleā€ and remains slow (on both ends) so it’s harder to overload in this manner, harder to abuse for tracking your every move, … Got any of those 56k modems left?

(I’m half-joking. ā€œMake The Internet Expensive Againā€ like it was in the 1990ies and some of these problems might go away. Disclaimer: I didn’t have my coffee yet. šŸ˜…)

In reply to: #jryh2ba 1 week ago
movq (www.uninformativ.de)

@lyse Oops. šŸ˜… But yay, it’s working. 🄳

In reply to: #ifjh3pa 1 week ago
movq (www.uninformativ.de)

And regarding those broken URLs: I once speculated that these bots operate on an old dataset, because I thought that my redirect rules actually were broken once and produced loops. But a) I cannot reproduce this today, and b) I cannot find anything related to that in my Git history, either. But it’s hard to tell, because I switched operating systems and webservers since then …

But the thing is that I’m seeing new URLs constructed in this pattern. So this can’t just be an old crawling dataset.

I am now wondering if those broken URLs are bot bugs as well.

They look like this (zalgo is a new project):

https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/

When you request that URL, you get redirected to /git/:

$ curl -sI https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/
HTTP/1.0 301 Moved Permanently
Date: Sat, 22 Nov 2025 06:13:51 GMT
Server: OpenBSD httpd
Connection: close
Content-Type: text/html
Content-Length: 510
Location: /git/

And on /git/, there are links to my repos. So if a broken client requests https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/, then sees a bunch of links and simply appends them, you’ll end up with an infinite loop.

Is that what’s going on here or are my redirects actually still broken … ?

In reply to: #kyfenpq 1 week ago
movq (www.uninformativ.de)

I just noticed this pattern:

uninformativ.de 201.218.xxx.xxx - - [22/Nov/2025:06:53:27 +0100] "GET /projects/lariza/multipass/xiate/padme/gophcatch HTTP/1.1" 301 0 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
www.uninformativ.de 103.10.xxx.xxx  - - [22/Nov/2025:06:53:28 +0100] "GET http://uninformativ.de/projects/lariza/multipass/xiate/padme/gophcatch HTTP/1.1" 400 0 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"

Let me add some spaces to make it more clear:

    uninformativ.de 201.218.xxx.xxx - - [22/Nov/2025:06:53:27 +0100] "GET                       /projects/lariza/multipass/xiate/padme/gophcatch HTTP/1.1" 301 0 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
www.uninformativ.de 103.10.xxx.xxx  - - [22/Nov/2025:06:53:28 +0100] "GET http://uninformativ.de/projects/lariza/multipass/xiate/padme/gophcatch HTTP/1.1" 400 0 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"

Some IP (from Brazil) requests some (non-existing, completely broken) URL from my webserver. But they use the hostname uninformativ.de, so they get redirected to www.uninformativ.de.

In the next step, just a second later, some other IP (from Nepal) issues an HTTP proxy request for the same URL.

Clearly, someone has no idea how HTTP redirects work. And clearly, they’re running their broken code on some kind of botnet all over the world.

In reply to: #sxlpyva 1 week ago
movq (www.uninformativ.de)

@thecanine That image is correct.

In reply to: #dkc24ma 1 week ago
movq (www.uninformativ.de)

@thecanine Not bad. 🄳 Fingers crossed that they actually do it. šŸ¤ž

In reply to: #gg45s6a 1 week ago
movq (www.uninformativ.de)

Luckily, I haven’t noticed at all. šŸ˜…

In reply to: #enujccq 1 week ago
movq (www.uninformativ.de)

@lyse That is brilliant! 🤣

In reply to: #6ozbn3a 2 weeks ago
movq (www.uninformativ.de)

FTR, I see one (two) issues with PyQt6, sadly:

  1. The PyQt6 docs appear to be mostly auto-generated from the C++ docs. And they contain many errors or broken examples (due to the auto-conversion). I found this relatively unpleasent to work with.
  2. (Until Python finally gets rid of the Global Interpreter Lock properly, it’s not really suited for GUI programs anyway – in my opinion. You can’t offload anything to a second thread, because the whole program is still single-threaded. This would have made my fractal rendering program impossible, for example.)
In reply to: #6e546wa 2 weeks ago
movq (www.uninformativ.de)

@prologic Hm, same startup delay. (Go is not an option for me anyway.)

It’s hard to tell why all this is so slow. Maybe in this particular case it has something to do with fonts: strace shows the program loading the fontconfig configs several times, and that takes up a bulk of the startup time. šŸ¤” (Qt6 or Java don’t do that, but they’re still slow to start up – for other reasons, apparently.)

To be fair, it’s ā€œjustā€ the initial program startup (with warm I/O caches). Once it’s running, it’s fine. All toolkits I’ve tried are. But I don’t want to accept such delays, not in the year 2025. šŸ˜… Imagine every terminal window needing half a second to appear on the screen … nah, man.

In reply to: #6e546wa 2 weeks ago
movq (www.uninformativ.de)

Be it Java with Swing or PyQt6, it takes ~300 ms until a basic window with a treeview and a listbox appears. That is a very noticeable delay.

Is it unrealistic to expect faster startup times these days? šŸ¤”

Once the program is running, a new second window (in the same process) appears very quickly. So it’s all just the initialization stuff that takes so long. I could, of course, do what ā€œfatā€ programs have done for ages: Pre-launch the process during boot, windowless. But I was hoping that this wasn’t needed. šŸ˜ž (And it’s a bad model anyway. When the main process crashes, all windows crash with it.)

In reply to: #6e546wa 2 weeks ago
movq (www.uninformativ.de)

@lyse Yeah, I noticed that too. I haven’t double-checked my code, though. Maybe it has something to do with selecting the correct URL? I mean, these feeds don’t have any # url = fields, so maybe that’s it?

In reply to: #3neip4q 2 weeks ago
movq (www.uninformativ.de)

@lyse Ah, there it is. 😃 Never gets old. šŸ‘

In reply to: #oos3ufq 2 weeks ago
movq (www.uninformativ.de)

@arne … I still haven’t watched that show. 🤦

In reply to: #tqjqvwa 2 weeks ago
movq (www.uninformativ.de)

@prologic And none of them use Yarn-style threading. I don’t think they’re aware of us, they’re probably using plain twtxt. Other than one hit by @threatcat a few days ago, I’ve seen no traffic from them. šŸ¤”

In reply to: #kf2fo5q 2 weeks ago
movq (www.uninformativ.de)

@threatcat Let me guess, sl? šŸ˜

In reply to: #gcaqtmq 2 weeks ago
movq (www.uninformativ.de)

This looks like a botnet, to be honest. The IPs are all over the place. Ethopia, Brazil, Kenya, Lebanon, Netherlands, … I mean, that’s the logical thing to do, isn’t it? Do your web crawling on infected PCs. Nobody will block those, because those are the same IP ranges as legitimate requests. And obviously you don’t have to pay for computing time.

… and they all send invalid HTTP requests, all answered with HTTP 400 … How silly.

In reply to: #sxlpyva 2 weeks ago
movq (www.uninformativ.de)

@bender Better safe than sorry, I guess. šŸ˜…

In reply to: #onzfgpa 2 weeks ago
movq (www.uninformativ.de)

@lyse Well, they say you have to build up stocks, don’t they? šŸ˜…

The font is fiamf3 (scaled up 2x, it would be too small when printed). It’s the same one that I use in my terminal and the status bars. 😃

In reply to: #ulrmviq 2 weeks ago
movq (www.uninformativ.de)

@lyse Yeah, it feels broken. It often needs a couple of retries and a lot of patience. It’s been like that for months. 🫤

In reply to: #wswlm2q 2 weeks ago
movq (www.uninformativ.de)

@lyse There’s a couple of new users on https://tilde.club, but since this is a shared host, I doubt that they have access to their access.log files. Hence they’ll never see followers, unless we notify them out of band. 🫤

In reply to: #5ara5ka 3 weeks ago
movq (www.uninformativ.de)

@lyse Yeah, I’m glad I’m not the only one who didn’t get this right. šŸ˜… You never had to configure a systemd timer? Lucky. šŸ˜…

In reply to: #36db6ya 3 weeks ago
movq (www.uninformativ.de)

@bender No plus-aliases, just aliases. The mailserver runs on my OpenBSB box and is managed using BundleWrap (we use that at work), so to create a new alias, I push a new BundleWrap config to the server.

In reply to: #gk5t5mq 3 weeks ago
movq (www.uninformativ.de)

@prologic Glad you’re back. āœŒļø

In reply to: #zxchmeq 3 weeks ago
movq (www.uninformativ.de)

@lyse It’s possible to run the validator locally (my blog generator scripts do that):

https://validator.w3.org/nu/about.html

That way you don’t forget. 🄳

In reply to: #o67gqfa 3 weeks ago
movq (www.uninformativ.de)

@prologic FWIW, I love the idea and I do the same with my email domains. It’s the most effective way to fight spam, IMO. 🄳

In reply to: #5dyjtqa 3 weeks ago
movq (www.uninformativ.de)

@bender All good. āœŒļø It’s just that I’ve been through several iterations of this (on other platforms), AI output back and forth, pointing out what’s wrong, but in the end people were just trolling (not saying that’s what you had in mind), because apparently that’s ā€œfunā€.

In reply to: #s62fiaa 3 weeks ago
movq (www.uninformativ.de)

This is formatted poorly on twtxt.net, so here’s a plain text file: https://movq.de/v/971c5a125d/wall-of-text.txt

In reply to: #oa65m7q 3 weeks ago
movq (www.uninformativ.de)

… and now I just read @bender’s other post that said the Gemini text was a shortened version, so I might have criticized things that weren’t true for the full version. Okay, sorry, I’m out. (And I won’t play that game, either. Don’t send me another AI output, possibly tweaked to address my criticism. That is besides the point and not worth my time.)

In reply to: #f4xwmia 3 weeks ago
movq (www.uninformativ.de)

@prologic Let’s go through it one by one. Here’s a wall of text that took me over 1.5 hours to write.

The criticism of AI as untrustworthy is a problem of misapplication, not capability.

This section says AI should not be treated as an authority. This is actually just what I said, except the AI phrased/framed it like it was a counter-argument.

The AI also said that users must develop ā€œAI literacyā€, again phrasing/framing it like a counter-argument. Well, that is also just what I said. I said you should treat AI output like a random blog and you should verify the sources, yadda yadda. That is ā€œAI literacyā€, isn’t it?

My text went one step further, though: I said that when you take this requirement of ā€œAI literacyā€ into account, you basically end up with a fancy search engine, with extra overhead that costs time. The AI missed/ignored this in its reply.

Okay, so, the AI also said that you should use AI tools just for drafting and brainstorming. Granted, a very rough draft of something will probably be doable. But then you have to diligently verify every little detail of this draft – okay, fine, a draft is a draft, it’s fine if it contains errors. The thing is, though, that you really must do this verification. And I claim that many people will not do it, because AI outputs look sooooo convincing, they don’t feel like a draft that needs editing.

Can you, as an expert, still use an AI draft as a basis/foundation? Yeah, probably. But here’s the kicker: You did not create that draft. You were not involved in the ā€œthought processā€ behind it. When you, a human being, make a draft, you often think something like: ā€œOkay, I want to draw a picture of a landscape and there’s going to be a little house, but for now, I’ll just put in a rough sketch of the house and add the details later.ā€ You are aware of what you left out. When the AI did the draft, you are not aware of what’s missing – even more so when every AI output already looks like a final product. For me, personally, this makes it much harder and slower to verify such a draft, and I mentioned this in my text.

Skill Erosion vs. Skill Evolution

You, @prologic, also mentioned this in your car tyre example.

In my text, I gave two analogies: The gym analogy and the Google Translate analogy. Your car tyre example falls in the same category, but Gemini’s calculator example is different (and, again, gaslight-y, see below).

What I meant in my text: A person wants to be a programmer. To me, a programmer is a person who writes code, understands code, maintains code, writes documentation, and so on. In your example, a person who changes a car tyre would be a mechanic. Now, if you use AI to write the code and documentation for you, are you still a programmer? If you have no understanding of said code, are you a programmer? A person who does not know how to change a car tyre, is that still a mechanic?

No, you’re something else. You should not be hired as a programmer or a mechanic.

Yes, that is ā€œskill evolutionā€ – which is pretty much my point! But the AI framed it like a counter-argument. It didn’t understand my text.

(But what if that’s our future? What if all programming will look like that in some years? I claim: It’s not possible. If you don’t know how to program, then you don’t know how to read/understand code written by an AI. You are something else, but you’re not a programmer. It might be valid to be something else – but that wasn’t my point, my point was that you’re not a bloody programmer.)

Gemini’s calculator example is garbage, I think. Crunching numbers and doing mathematics (i.e., ā€œcomplex problem-solvingā€) are two different things. Just because you now have a calculator, doesn’t mean it’ll free you up to do mathematical proofs or whatever.

What would have worked is this: Let’s say you’re an accountant and you sum up spendings. Without a calculator, this takes a lot of time and is error prone. But when you have one, you can work faster. But once again, there’s a little gaslight-y detail: A calculator is correct. Yes, it could have ā€œbugsā€ (hello Intel FDIV), but its design actually properly calculates numbers. AI, on the other hand, does not understand a thing (our current AI, that is), it’s just a statistical model. So, this modified example (ā€œaccountant with a calculatorā€) would actually have to be phrased like this: Suppose there’s an accountant and you give her a magic box that spits out the correct result in, what, I don’t know, 70-90% of the time. The accountant couldn’t rely on this box now, could she? She’d either have to double-check everything or accept possibly wrong results. And that is how I feel like when I work with AI tools.

Gemini has no idea that its calculator example doesn’t make sense. It just spits out some generic ā€œargumentā€ that it picked up on some website.

3. The Technical and Legal Perspective (Scraping and Copyright)

The AI makes two points here. The first one, I might actually agree with (ā€œbad bot behavior is not the fault of AI itselfā€).

The second point is, once again, gaslighting, because it is phrased/framed like a counter-argument. It implies that I said something which I didn’t. Like the AI, I said that you would have to adjust the copyright law! At the same time, the AI answer didn’t even question whether it’s okay to break the current law or not. It just said ā€œlol yeah, change the lawsā€. (I wonder in what way the laws would have to be changed in the AI’s ā€œopinionā€, because some of these changes could kill some business opportunities – or the laws would have to have special AI clauses that only benefit the AI techbros. But I digress, that wasn’t part of Gemini’s answer.)

tl;dr

Except for one point, I don’t accept any of Gemini’s ā€œcriticismā€. It didn’t pick up on lots of details, ignored arguments, and I can just instinctively tell that this thing does not understand anything it wrote (which is correct, it’s just a statistical model).

And it framed everything like a counter-argument, while actually repeating what I said. That’s gaslighting: When Alice says ā€œthe sky is blueā€ and Bob replies with ā€œwhy do you say the sky is purple?!ā€

But it sure looks convincing, doesn’t it?

Never again

This took so much of my time. I won’t do this again. šŸ˜‚

In reply to: #f4xwmia 3 weeks ago
movq (www.uninformativ.de)

@bender It’s sad. Remember that Munich once ran the LiMux project. šŸ˜ž

We could build a strong IT sector in Germany or the EU, but we just don’t want to.

In reply to: #kspztjq 3 weeks ago
movq (www.uninformativ.de)

@lyse @bender I’m not very knowledgable regarding the two points you mentioned, hence I didn’t include them in my list. But, yeah, from what I’ve heard, it doesn’t look good.

In reply to: #34cy36q 3 weeks ago
movq (www.uninformativ.de)

@lyse Maybe, but still nice. 😊

In reply to: #yicaifq 3 weeks ago
Reply via email