movq www.uninformativ.de
Following
0
Followers
0

Recent twts from movq

In-reply-to > (#bwsglma) @movq What about something like what Antenna does?, supplying a URL you can call to push your feed Gemini - About Antenna

@prologic Oh, hold on, we’re talking about two different things here. 😅

Yes, I agree: There doesn’t need to be a mechanism for actively sending a message from user A to user B when user A mentions user B.

What I meant, though, was indeed discovery of new feeds. Or rather: New followers. At the moment, you can only find out about new followers by inspecting their HTTP user agents – and that only works via HTTP. So, for the purpose of notifying feed authors about new followers, I was proposing a pingback-like mechanism. (And I think this is also what the original GitHub issue from 2016 was talking about.)


#ruzkugq
In-reply-to > (#bwsglma) @movq What about something like what Antenna does?, supplying a URL you can call to push your feed Gemini - About Antenna

@prologic Hmm. Some thoughts.

WebMentions are probably the best solution in a world with “HTTP + server-side code”. (You need something to process the POST request.)

The … well, let’s call it “beauty” … of the original twtxt spec was that sending special HTTP user agents does not require server-side code. You can just grep your logs. This is probably not relevant for Yarn, but it is for me – I run a plain httpd, no CGI, no PHP, no nothing. That thing serves static HTML and that’s it. And I want to keep it that way, because it saves me a lot of trouble.

So that’s one aspect.

Another aspect is Gemini and Gopher: While they do support user input, they don’t support multiple fields. I.e., source and target as it is specified by WebMentions won’t work. So you have to come up with your own format anyway.

So, yeah, what’s left? How could it be done? Maybe something like this:

  • We need a format to specify feed URL and nick name. I’d simply go with this: ${source.nick} ${source.url}, e.g. movq https://www.uninformativ.de/twtxt.txt
  • HTTP: A GET request with one percent-encoded parameter, e.g.: https://www.uninformativ.de/twtxt.txt?follow=movq%20https%3A%2F%2Fwww.uninformativ.de%2Ftwtxt.txt
  • Gemini: A request with a percent-encoded parameter, e.g.: gemini://www.uninformativ.de/twtxt.txt?movq%20https%3A%2F%2Fwww.uninformativ.de%2Ftwtxt.txt
  • Gopher: A “search request” (menu type 7), no need for percent encoding here, e.g.: /twtxt.txt<literal_tab>movq https://www.uninformativ.de/twtxt.txt

If you run server-side code, then it can interpret this additional payload. If you, like me, run nothing but static httpd, then the requests will usually be served as if there was no parameter – but the full query will usually show up in log files.

So basically, this would be like moving the info from the HTTP user agent to some other place where it’s supported for all protocols.

Now, we could send this parameter for every request, but I’m not sure if that’s a good idea. For one, it creates noise. Also, what if a server is pedantic and takes the request literally, i.e. it searches for a file called twtxt.txt?follow=movq%20https:%2F%2Fwww.uninformativ.de%2Ftwtxt.txt? Or maybe Gopher servers refuse to serve the twtxt.txt file if there’s a search parameter. So I guess it’s better to only do these “pingback requests” every once in a while.

Strictly speaking, we could ignore HTTP entirely and just keep using the user agent here. We would then only be using this new format for Gopher and Gemini. I’m not sure, though, if it’s a good idea to use such different methods depending on the protocol. On the other hand, we should care about backwards compatibility.


#ansuy4a
In-reply-to > So, @prologic, having a slash on the nick breaks mentions. Is there a consensus on which characters are allowed on nicks, or just about anything goes? Evidently I am not going to be exchanging that many twts (if anything at all) with someone with a slash on their nick, but it would be nice to either set some "standard", or fix mentions (again?!) to accommodate.

@prologic Yeah, probably. 🤔 Technically, anything that doesn’t end in a space or a parenthesis (because that would break the user agent string) would work in plain old twtxt … At the end of the day, it’s not specified. I gravitate towards “letters and digits”, yeah.


#2mf4kma
In-reply-to > This (sorry it is a Twitter link) is such a huge problem! It refers to train burglaries in Los Angeles, as trains full of cargo slow down, or stop, at a certain place. Thieves use the opportunity to break open containers, and steal their contents.

@fastidious That video on Twitter created the impression that this is happening in “rural“ areas, where nobody is around. But I just saw this on a german news outlet:

Here, it looks like it’s right in the middle of the city. 🤯


#m3g4fmq
In-reply-to > So I was writing a little "wordle"-like game in Rust, when suddenly … oops … there’s no rand() … https://www.uninformativ.de/git/rustle/file/src/main%2Ers%2Ehtml#l61 😬

I understand that random numbers are much harder than one might think, so they’re probably reluctant to add something to the standard library until it’s “good”. So, for now, we have this:

https://crates.io/crates/rand/

The legend goes that there once was a rand() in the standard library:

https://stackoverflow.com/a/29334943

I really wonder how this strategy will play out for the Rust community. How will those external libraries ever be integrated into the standard library? This is going to be a long and painful process, which will involve breaking and rewriting lots and lots of Rust programs. Well, not necessarily breaking, because dependencies are pinned by default, but it’s exactly that pinning which makes it easy for software to rot (never gets updated, because “it works 🤷”).

Then again, that guy on StackOverflow makes a good point about the sequence of HTTP libraries in Python. 🤔 Python can only grow and, maybe, there’ll be a “clear cut” some day – which will be just as painful.

It all has pros and cons.


#imrv3tq
In-reply-to > (#bwsglma) @benk Ah, look at that. Lots of twtxt users in Gemini space. 🤯 Does that mean I should extend my client? It doesn’t speak gemini:// at the moment. 😢

@fastidious I admit, I forgot about WinSCP. 😅

Still, it’s a third-party tool and we’d prefer to use built-in stuff. Any third-party tool means we have to keep track of updates/patches/security issues and we have to add more documentation (where is that tool from, how do you install it, how do you configure it, …).

Maybe, with WSL, we could have built something based on SSH. I have zero experience with that, though. The PowerShell thingy was much quicker. Might be worth to check this out later, though.


#w6rn2na
In-reply-to > @prologic Fun fact: I set up new FTP stuff at work today. It was the easiest way to transfer files from a Windows machine to a Linux box.

@prologic I am indeed serious. 😅

I wanted to spent as little time as possible with this Windows machine. Also, I didn’t want to introduce any new maintainence burdens. Using any third-party software would have caused the latter. 😢

PowerShell/Windows has a built-in FTP client. Basically this:

https://stackoverflow.com/questions/1867385/upload-files-with-ftp-using-powershell/1868367#1868367k

(I tried to use ftp.exe first, but that thing doesn’t support passive FTP, which we need.)

The FTP server already existed anyway. (You don’t want to know why.)

Missing transport encryption aside (this runs in our internal network only, so it’s okay-ish to accept), I don’t think this is the worst solution, to be honest.


#dv567vq

(#yf6xs4q) The one who asked was me. 🥴 It works fine in gemini clients like lagrange, but gnutls and openssl both complain about abnormally terminated connections. Will have to investigate.


#l7kohtq
In-reply-to > Had to deal with lots of Microsoft stuff today at work. Am now questioning my life choices. Maybe I should start living in a buddhist monastery or something. 🤔

@eaplmx Yeah, that’s how I remember it. What I think to remember rather vividly was being stumped by that new “registry” thingy. “Why are they trying to take our good old INI files away? 😢” But you’re totally right, it was a really long time ago, so it’s quite possible that I’m mis-remembering. 😅 (Or maybe I’m projecting my today’s views/feelings on those old things …)


#h4ymgla
In-reply-to > Had to deal with lots of Microsoft stuff today at work. Am now questioning my life choices. Maybe I should start living in a buddhist monastery or something. 🤔

@fastidious Azure was actually one of those things I came in contact with today. 🙈 🙊

@markwylde To be fair, Windows 95 thru XP only feel nice today. When I switched from Windows 3.1 to 95, it felt horribly bloated. 🤣 But hey, it was pretty good at playing videos.


#w65kztq
In-reply-to > looking into hosting my own twtxt.txt file now. leaning towards using jenny client. loving the relative simplicity of twtxt.

@xavavu FWIW, I updated the blog post about jenny. It was a bit outdated.

(Eventually, I won’t update that blog post anymore. The README files are the primary source of truth. It’s just that this blog post is still almost at the top on my page, so …)


#ghna7xa
In-reply-to > EU Wants To Build Its Own DNS Infrastructure With Built-in Filtering Capabilities The European Union is interested in building its own recursive DNS service that will be made available to EU institutions and the general public for free. From a report: The proposed service, named DNS4EU, is currently in a project planning phase, and the EU is looking for partners to help build a sprawling infras ... ⌘ Read more

@thecanine Probably close to zero – until they make it mandatory. It’s the first step towards something like a “EU Internet”.

Hey, that’s our chance! When they have finally destroyed the Internet, we build something new. That’s our chance for a clean start and to get rid of all the historical baggage.

sigh


#63232gq
In-reply-to > EU Wants To Build Its Own DNS Infrastructure With Built-in Filtering Capabilities The European Union is interested in building its own recursive DNS service that will be made available to EU institutions and the general public for free. From a report: The proposed service, named DNS4EU, is currently in a project planning phase, and the EU is looking for partners to help build a sprawling infras ... ⌘ Read more

@lyse Lol, but you have to admin that’s a cute robot. 🥴 🤖


#wp476xa
In-reply-to > EU Wants To Build Its Own DNS Infrastructure With Built-in Filtering Capabilities The European Union is interested in building its own recursive DNS service that will be made available to EU institutions and the general public for free. From a report: The proposed service, named DNS4EU, is currently in a project planning phase, and the EU is looking for partners to help build a sprawling infras ... ⌘ Read more

@prologic I read about that. The german government has been trying to do DNS-based blocking since something like 2009 („Zensursula“) and apparently they now try again on an EU level. It’s horseshit and everyone is tired of it. And that’s their goal: Make everyone tired, until there’s no fighting anymore. 🙄


#a7sr3eq

(#bwsglma) FWIW, I implemented a simple Gemini client now. It doesn’t do TOFU yet and I’m not very motivated to implement support for client certs. How common are those in Gemini space?


#vru3d3q

(#bwsglma) Too bad that Gemini – just like Gopher – has no concept of a “user agent”. So nobody will know when I’m following them.

It really is a bit annoying that twtxt uses this “hack”. There are other similar hacks that work regardless of the protocol, like just doing a dummy request such as gemini://kwiecien.us/twtxt.txt:movq:$my_feed_url or something. Yes, that will result in an error, but, well, it would show up in a log, just like that user agent thingy …

(I don’t see a way to cleanly solve this without additional headers.)


#7tppy3q
In-reply-to > https://dominikbraun.io/blog/the-difference-between-go-and-rust 👈 Came across this article almost by accident -- Well worth the read 👌

@prologic Yeah, it’s important to keep that in mind. We often wonder why things are the way they are – when all we needed was a little bit of context and history. 👌

The original article – while being a rant – highlights one aspect that I like the most about Rust: They at least try to be correct. Instead of going down the route of “meh, it’s probably fine”, the Rust guys confront you with error cases and corner cases and all that. Nobody is perfect, but they at least try.

This is something that I miss a lot. I’ve spent way too much time with scripting and that “90% is good enough” rule. Maybe this is just a phase, maybe I’ll grow out of it. 🤣 But at the moment, that focus on correctness is very refreshing.


#i3r6mga
In-reply-to > I am somewhat tempted to rewrite jenny in Rust. 😈

Alright, this one appears to be better:

https://crates.io/crates/ureq

It’s still much heavier than I was hoping for, but I can’t spot any transitive dependencies in there which are complete nonsense.

The sad truth is, HTTP is heavy. All this stuff has to be implemented somehow, if you want to be compliant. And TLS has to be implemented as well. 😮‍💨


#tx7k5cq
In-reply-to > Rust might be interesting as a language, but its ecosystem is a total clusterfuck.

@fastidious I’m not a web dev and I don’t know NodeJS at all. Can’t compare these two. I’ll give you an anecdote: I once tried to find a library to parse command line arguments (something like getopt) and eventually gave up on it due to all the deps they pulled in. Most people appear to be using clap. This is what it looks like when you compile the most basic example: https://movq.de/v/3ffe9bec70/claptest.txt Just for parsing command line options? Really?

And this is what it looked like when I was trying to compile a simple HTTP client using reqwest (which appears to be the most popular library): https://movq.de/v/3ffe9bec70/reqwesttest.txt Oof. How am I supposed to keep track of all of that?

The Rust standard library aims to be small. This means that a lot of things must be external libraries. (This is in stark contrast to Python, for example. You might have seen this: https://xkcd.com/353/) That explains why the chrono library for doing date and time stuff exists – but it doesn’t explain everything.

My theory is: Since Rust has its own package management which makes it easy to publish and use packages, well, people do just that. A lot. Including pointless (IMHO) stuff like the following (got these from the log outputs above):

The list goes on and on.


#hzljxwq