# Learn more about twtxt: # https://twtxt.readthedocs.io/en/stable/ # https://www.uninformativ.de/twtxt-mention.html # # nick = movq # url = https://www.uninformativ.de/twtxt.txt # avatar = https://www.uninformativ.de/avatar.png # # For out-of-band replies: `echo ed.vitamrofninu@txtwt | rev` # # This file is available via Gopher, too: # url = gopher://uninformativ.de/0/twtxt.txt # However, since Gopher has no concept of user agents or any kind of # headers, I will not be able to see that you're following me and, thus, # will not be aware of any replies or mentions that you send. Please # either use the HTTPS feed or drop me an email. :) # # Legacy, don't use: # nick_alias = vain # # prev = mljudaa twtxt-old_2021-10-11_mljudaa.txt 2021-10-11T12:03:28Z Today is my 1 year twtxt anniversary. 🥳 2021-10-11T12:04:28Z @ (#) Is it any particular feed that shows these duplicates? 2021-10-11T12:08:43Z @ (#) Here’s another idea: In mutt, do `:set noweed`. This shows all mail headers. Among them, you should find a `Message-Id` header. Take note of this value for those two duplicate twts. a) Is it the same value? b) Can you track down the corresponding files in your local mail dir? They have the same name as the message id. What’s their exact file name? 2021-10-11T12:19:54Z (#) Fun fact, the video plays perfectly on WebKitGTK on Linux. (But that’s more related to gstreamer anyway, I think.) 2021-10-11T13:23:03Z @ (#) Yep, it does. 2021-10-11T14:41:03Z @ (#) Yeah, probably. I mean, it already renders them correctly, you just can’t compose them. I’ll put it on my TODO list. 👌 2021-10-11T16:45:49Z (#<6ck6iaa https://twtxt.net/conv/6ck6iaa>) Lol, it was a mere coincidence that I even noticed that anniversary. 😁 That recent PR about metadata made me look at the top of my feed … and there it was. 😁 2021-10-12T14:14:24Z @ (#) Ah, you see duplicates of your own twts. Hmm. Did you put your own feed into your `follow` file? Or maybe *one of your feeds*? (I see you’ve been using various feed URLs.) If yes, then I can imagine a scenario where this leads to duplicates. 🤔 2021-10-12T14:35:59Z @ (#) Aww, crap. 😁 I was trying to replicate the issue that @ saw (duplicate twts with jenny), and I must have messed up so you probably saw my old “vain-test” in a user agent. 2021-10-12T18:34:56Z @ (#) Maybe at the weekend, but I’m rather busy these days with birthdays coming up (and/or no energy left after work to debug software 😳). But don’t worry, we’ll get this sorted out. 😊 2021-10-12T18:44:18Z @ (#) Have fun! (I’m still traumatized by “Wings of Marie”, though. This song build up sooooooo much tension … and … then … nothing. I’m always expecting some epic finale, but it just doesn’t happen. 😢) 2021-10-13T13:47:14Z (#) (I should generate some statistics about page hits. I have no idea if anyone even *reads* the german versions – and they’re a lot of work to make.) 2021-10-13T13:49:59Z @ (#) Haha, yeah, it’s a ton of traffic recently. I currently have ~27k twts in my box. Honestly, I just skim over new ones, then mark them as “read”, and be done with it. No organisation whatsoever. I don’t know how long this approach is going to work … To be honest, I never expected to see this much traffic in the first place. 🤣 2021-10-13T16:30:45Z @ (#) They will come back, eventually. Although at first, it might appear as if they don’t, because jenny doesn’t do anything if the feed hasn’t changed (according to HTTP’s `if-modified-since`). 2021-10-13T19:07:48Z This is a multi-line twt written with jenny.

🎉

cc @ 2021-10-13T19:18:06Z @ (#) Alright, I can’t tell when I’ll be able to do a screen sharing thingy. So let’s try this the old-fashioned way first. Please try to reproduce the issue with the branch `quark-trace` that I pushed recently. It’ll create a /tmp/jenny.log file (it will get *large*). When you see duplicate twts, try to find them in that log.

Reasons, in theory, why we could see dups:

1) jenny doesn’t detect your feed’s URL correctly.

2) python-dateutil doesn’t parse your twt’s timestamp correctly. Or rather, it parses it differently depending on some env vars? Cronjobs often have this pitfall where some env var is different than your normal environment.

Actually … I can’t think of anything else. 🤔 You don’t see dups *all the time*, it only happens for your *own* twts, and you said that the twt hash *mismatches*. That already narrows it down to something in make_twt_hash(). 🤔

Let’s see if that trace file helps. If it doesn’t, we can add more trace() calls. 2021-10-13T19:19:07Z @ (#) Mhm. We’ll have to see. 🤔 For now, I’m not seeing performance issues or anything, it’s just … very crowded. 😁 2021-10-13T19:21:09Z (#) I mean, hey, mutt is already optimized to handle lots and lots of e-mails. Had I written all this myself, it might be quite a bit slower. 🤣 2021-10-13T19:25:53Z @ (#<2nstk3q https://lyse.isobeef.org/twtxt.txt>) Love those clouds! 😊 My god, that poor car. But a croc? I’m looking for shoes, right? 😁 2021-10-13T19:40:53Z @ (#) Looks about right, doesn’t it? 2021-10-13T19:42:20Z @ (#) Rendering them was already supported, so the diff for composing them is not that big: https://www.uninformativ.de/git/jenny/commit/4a02eeec58317107c07e759733312d168e319f17.html 😊 2021-10-13T19:44:54Z @ (#<2nstk3q https://lyse.isobeef.org/twtxt.txt>) I think I found it! It’s certainly a heavenly creature. 🤣🐊 But I also found some Krokodilklemmen. 😉 2021-10-14T13:52:15Z @ (#<7pwobaa https://ferengi.one/twtxt.txt>) When you write Markdown (or LaTeX), you need to separate paragraphs with an empty line between them. That’s what I meant in `CHANGES`. Maybe I should rephrase it. 🤔 2021-10-14T13:55:24Z @ (#) Could be done, yeah. I don’t know yet if I want to, though. 😁 2021-10-14T14:07:52Z @ (#) Alright, what’s in between those lines? There should be more info, like the resulting hash and if jenny was able to find the file on disk, etc. 2021-10-14T14:09:01Z @ (#) Hmmmm, good idea, but it already does that: https://www.uninformativ.de/git/jenny/file/jenny.html#l219 🤔 2021-10-14T14:10:25Z @ (#) Do you mean you no longer see dups or does the `quark-trace` branch work correctly now? 2021-10-14T15:55:55Z @ (#<35w6jva https://www.uninformativ.de/twtxt.txt>) So it really was the missing env var, huh. 🤔 That’s still not great, I’ll keep an eye on it. 2021-10-14T15:58:54Z @ (#<4uyx3kq https://www.uninformativ.de/twtxt.txt>) Technically, it’s possible. The thing is just that I have hard-wrapping turned on by default in my Vim and there’s newlines all over the place. 🥴 This is a screenshot of me writing this twt: https://movq.de/v/5977722c48/s.png I’ll think about it. 🤔 (I’d rather not introduce new config options for this, though.) 2021-10-14T16:00:35Z I wonder how all the heavy “conversation forking” lately affects usability on yarn.social 🤣 https://movq.de/v/ec4cdd7174/s.png 2021-10-14T16:37:10Z @ (#) Gah, I finally understood what’s going on here. The point is that you were using a non-UTF-8 locale (one with latin1, apparently) – I kept trying to reproduce it with `LANG` unset or `LANG=C`, which is different. And that made Python decode strings using latin1, which of course results in garbage. This is clearly a bug, jenny shouldn’t break with non-UTF-8 locales. 2021-10-14T16:38:51Z @ (#<65k6uvq https://www.uninformativ.de/twtxt.txt>) It does make sense, yeah. (I got used to reading flat conversations when the microblog that we used at work no longer supported threading. But I remember, back then, I was pretty pissed. 🤣) 2021-10-14T16:46:24Z (#) The test suite breaks horribly with en_US.ISO-8859-1. Not only do the tests fail, but the test framework is broken as well. 🤣 2021-10-14T17:05:00Z (#) … hmmm. I can force everything to be UTF-8, that’s not a problem. But that means that your entire software stack must be capable of handling UTF-8 (editor, terminal, …). And at that point why not just require the user to use an UTF-8 locale? 🤔 2021-10-14T18:24:49Z @ (#) Awesome, right? Especially those two big planets really are spectacular. 😊 2021-10-14T18:27:34Z @ (#) There was a time (after the Perl era) when everbody built their own web site … in PHP, with MySQL. 🤣 What a mess. The good thing about static web site generators is that they’re harmless. You can’t screw this up. You can’t accidentally introduce SQL injections or make PHP read sensitive files or whatever. I love static web stuff. 👌 2021-10-14T18:35:33Z @ (#) Nah, I think her timezone is simply off. When you go back to the beginning of her feed, there’s a few posts about her script being broken. 🥴 2021-10-15T10:08:17Z @ (#<44nacmq https://ferengi.one/twtxt.txt>) Not a bug. All lines starting with "> " are stripped. (This is done to remove the quoted stuff that is initially appended at the bottom when you reply to a twt.) What you’re writing here is not Markdown, it’s just “text”. The only special processing that jenny does now is that multi-paragraph thingy. (This is in contrast with yarn.social, which renders everything as Markdown, I think?) 2021-10-15T10:10:50Z @ (#) You look like a completely different person on every photo. 🥴 Maybe I have a bit of prosopagnosia … 2021-10-15T12:02:27Z @ (#) Oh boy 😳 2021-10-15T12:02:42Z @ (#) The one on the far left, I’d say 🤔 2021-10-15T12:51:05Z @ (#<74lxfha https://www.uninformativ.de/twtxt.txt>) Yeah, I get what you mean (I think). So jenny should probably simply replace all newlines with a U+2028. 🤔 That would require some more changes, but maybe it’s the cleanest solution. I’ll think about this. 2021-10-15T12:51:05Z Let’s see,
what yarn.social
does with this.

New paragraph, hopefully? 2021-10-15T12:58:29Z Why @ saw dups: gopher://uninformativ.de/0/phlog/2021-10/2021-10-15--python-open-locale.txt So let’s try to be more strict with encodings: https://www.uninformativ.de/git/jenny/commit/6477e2edbbcde4936ce825e7cc73449922cf2e0e.html 2021-10-15T13:00:40Z I can relate to this video so much: https://youtu.be/KjYBh7rq0-Y No more programming for me today. 🎸 2021-10-15T15:16:20Z @ (#) Oh yeah, this is so annoying on Arch. I guess there’s a lot of historical baggage … There is *some* attempt to fix this situation by providing an “alternatives” mechanism, it seems: https://wiki.archlinux.org/title/User:Allan/Alternatives But it’s still very much “work in progress”. 2021-10-15T19:49:59Z @ (#) I bet Rob Pike likes to disagree. 🤣 2021-10-16T06:21:24Z @ (#<7exlyga https://twtxt.net/user/prologic/twtxt.txt>)
At first, there was only “reply” in jenny. Then you introduced “fork”, so I added that method. 😁 But there is no default, really. The example mutt config just installs two hotkeys and it’s up to the user which one to press.

I’m not sure which model is better, to be honest. 🤔

btw, jenny does not pre-fill mentions of all the people in the conversation. When you hit “reply” (or “fork”), you only get a mention of the person you’re replying to. I think that’s actually a *little* bit better, because those “mass-mentions” can get a bit noisy. 🤔 I regularly see mentions of my nick, but the person really was talking to someone else. I just happened to be “in the loop”. (Reminds me a bit of business e-mail. 🤣) 2021-10-16T06:23:19Z @ (#<3ojx27q https://yarn.andrewjvpowell.com/user/eldersnake/twtxt.txt>)
It’s nice, but this should be required by law, really. (Nothing stops Pine from becoming “evil” in the future or getting bought by an “evil” company. And then we’re back to square one with unrepairable phones.) 2021-10-16T06:26:32Z Experimenting with “replace all newlines by U+2028 when writing twts”.

Foo!
Bar!

- This is a list.
- This is another item on the list.

And then she said:

> Look, a tree!

It’s not that bad. 🤔 I just have to set my Vim to not do hard line-wrapping in jenny postings (which it does by default for all plain text files). So I now have this in my `~/.vimrc`:

 au BufRead,BufNewFile jenny-posting.eml call SetForumWrapping() 2021-10-16T06:30:03Z (#)

Speaking of Vim: It might be a good idea to write a twtxt syntax highlighting file, which extends the markdown one. 🤔 But then again, the currently used “mail” syntax highlighting is not that bad either, *and* it get’s nested quoting right:

![](https://movq.de/v/ddcc22f861/s.png) 2021-10-16T07:03:05Z @ (#) 🥳 2021-10-16T08:24:03Z (#)

Alright, I think I like it. I pushed the changes. FYI @

That’s enough changes for now. I’ll let things settle for a while, fix bugs (if we’re finding any), maybe add some more tests, and then go for a new release. 🥳 2021-10-16T11:53:04Z @ (#) You’re welcome! 😊 Yeah, I’m convinced myself that it’s better this way. 👌 2021-10-16T12:11:21Z @ (#)

Interesting idea. 🤔

This is a key factor:

> Such an upcycling will be possible with the manufacturers obligation to publish a device's underlying source code under a Free Software licence at the end of support for *any software necessary to run or modify the initial functioning of the device*.

A device’s source code isn’t worth anything if it depends on, say, a proprietary compiler.

A similar loop hole for manufacturers: They could add pointless complexity to their build system. “Sure, here’s the source code for iOS. Have fun building it! You only need to perform these 13 million steps: …”

Or design the build system in such a way that it’s impossible for most people to perform because of their hardware: Just put it enough effort for the build to require 128 GB of RAM and you’re good. 2021-10-16T12:12:18Z @ (#) No idea, sorry, I’ve never customized mutt’s colors to that extent. 🤔 2021-10-16T19:36:56Z @ (#) Oh, the URL part is being dropped? I missed that. It makes a lot of sense to do that, so I’ll make the change in jenny soon. 👌

Right now, jenny sometimes has to make up those URLs, because there simply is no cross-platform way of creating them. URLs like `https://twtxt.net/search?tag=gjt7pqa` only exist on yarn.social, but there’s no equivalent on my web site … so, yeah, that’s probably where those bad links are coming from.

I guess we should update https://dev.twtxt.net/doc/twtsubjectextension.html accordingly. (Or maybe there’s a PR already, haven’t checked.) 2021-10-16T19:37:44Z You guys are confusing me. Are @ and @ the same person or not? 🤣 2021-10-17T05:28:18Z @ @ (#ec3zmsa) Ahhh, I see. Alright then! 😊 2021-10-17T10:26:54Z (#wkjlotq) Should be fixed on jenny’s `main` now. 🥳 2021-10-17T13:47:17Z @ (#wkjlotq) Fixing old entries is tricky and I wouldn’t do it. If you change something in an old twt, it will change its hash sum – and thus, it will break threading if someone has replied to your old twt or otherweise referenced it. 😵 2021-10-17T13:58:32Z I love how my Android phone unironically tells me: “Please restart your device. Your device has not been restarted for 28 days. We e …” (Yes, it ends with “we e …” and I have no idea how to show the full message.) Really? So they haven given up and don’t even try anymore to make software that, well, works? 2021-10-17T14:09:57Z @ (#576ebza) Can’t use that, sorry. It conflicts with my shell alias for `vim`. 🤣 It sure does look interesting, though. 🤔 2021-10-17T15:44:32Z Ist mir auch eben erst klar geworden: Die Uhu-Webcam (hab’ ich vor einiger Zeit mal verlinkt) war im … Ahrtal. Und da war doch was mit Unwetterkatastrophe. Ohweh. https://uhu.webcam.pixtura.de/das-ahrtal-ist-nicht-mehr-so-wie-wir-es-kannten/ 2021-10-17T16:48:02Z @ (#576ebza) Ouch. Thanks for sharing that link! Guess I’ll pass. 2021-10-17T18:07:00Z @ (#zy6zfva) Yeah, nothing in that area was built to withstand that much water/rain. The damage is huge. 😦 2021-10-19T12:11:37Z @ (#3kd355q) I run the cron job every 15 minutes. Running it every minute imposes quite a bit of load on the feeds of other people. While jenny requests everything with the `if-modified-since` header set, not all servers honor that header. Most of all, yarn does not: https://git.mills.io/yarnsocial/yarn/issues/430 2021-10-19T12:12:36Z @ (#3kd355q) … but I still get a lot of duplicate/edited twts as well. 🥴 This is one of the major drawbacks of jennys Maildir model: We never delete anything. 2021-10-19T17:25:17Z @ (#ztwih5a) It is. 😭 But some people are convinced that it’s awesome, so we have to use it at work. 😭😭😭 2021-10-19T17:28:31Z @ (#3kd355q) Yeah, I’m still seeing large amounts of traffic when jenny runs, so I guess it’s not yet fixed. But I didn’t mean to shame you. 😁 At least on my end, it’s not really an issue. 👌 2021-10-19T17:42:11Z Hmm, feels like there’s a bug lurking somewhere. How does @’s twt (the one about the girl and the cricket) end up with hash #egdmpoa? 🤔 https://f.adi.onl/conv/egdmpoa ![](https://movq.de/v/b7c165f639/s.png) I get #tkdjrmq instead. 🤔 I uploaded the payload that I’m hashing here: https://movq.de/v/fe54d02fe3/hash-payload.txt cc @ @ 2021-10-19T18:06:40Z @ (#3xfftqq) Ahhh, ohhh. That explains it. I was confused by the fact that this URL exists: https://f.adi.onl/conv/egdmpoa – so I was assuming that this is the correct twt/hash. Apparently, it’s just the original version of his twt which is still in his cache? 2021-10-19T18:15:08Z @ (#3xfftqq) Okay, this wasn’t my intention, but now I somehow hope that this test makes it into the repo and the little cricket story stays there forever. 🤣

I think @ is right, though. When I browse @’s front page, I see this: ![](https://movq.de/v/926087ed71/s.png) The twt with the wrong hash is probably just a cache artifact … 🤔 2021-10-19T18:38:16Z @ (#ck2oria) Yep, exactly. Broken threading. That’s how I noticed in the first place. 🙃

It’s unfortunate that editing twts breaks threading. Are there alternatives? The only thing I can think of is adding explicit IDs to all twts (like `Message-ID` and `In-Reply-To`). I think @ already mentioned/proposed this a while ago. The downside of this is that it makes twt feeds *even more* noisy for users who use traditional clients (or no client at all). 🤔 2021-10-19T18:39:49Z @ (#3xfftqq) Kind of. 🤣 I mean, I could also add it to jenny’s suite. 🤣 2021-10-19T18:42:35Z Oh come on. I’ve been playing bass for a year now without any problems. Now I touch my old guitar *once* and, boom, lots of wrist pain. ![Fy faen i helvete!!1!](https://movq.de/v/e21afe6af0/s.png) 2021-10-19T18:43:22Z (#lecztrq) I think it’s time to finally sell this damn thing, so I won’t be tempted again … 2021-10-20T12:37:38Z @ (#ztwih5a) I can’t really compare k8s to those other tools, never used them. 🤔 At this point, we have so much stuff in k8s, it’s gonna be a lot of work to migrate away from it. 🤣

Our devs are pushing hard for k8s. They *might* be happy with another solution, but they know k8s very well know and it works well (for them – just not for me as a sysadmin), so there’s very little motivation to investigate other tools … 2021-10-20T12:45:01Z @ (#ck2oria) I was thinking: “If we just put these two fields at the start of the twtxt message (like we do now with mentions and subject hash), it would be backwards-compatible as well. 🤔” But then I remembered: If people write twts the old way (without the two new fields), how do we reply to them? They don’t have an ID. So we’d probably need the current hashing method as a *fallback* – and then we wouldn’t have made a lot of progress compared to the current version. 🤔 2021-10-20T12:45:44Z @ (#3xfftqq) 😲 😂 It got merged! 2021-10-20T12:46:17Z @ (#lecztrq) You’re totally right! I shouldn’t own this thing if all it does is sit in a bag in the closet. 2021-10-20T12:46:56Z @ (#tj3kwva) I read this on a german site a few days ago and thought it was satire. 🤔 2021-10-20T14:14:42Z (#5jejozq) Since I got vaccinated, I stopped worrying about this whole corona business. Yes, I can (and probably will) still get it; yes, I can still *spread* it; but my life is no longer in immediate danger. That’s a big win, eh? 2021-10-20T14:57:28Z @ (#5jejozq) No, of course not. 😊 I still take pretty much the same precautions as before (which is very easy for me to do, I can work from home 100% and all that; I don’t mind the masks and the distancing). But all those precautions don’t protect you, you can still catch the disease – so I was worried all the time (while doing stuff like buying groceries or using an elevator). And now that I’m vaxxed, this constant worry is gone. 👌

(I don’t know if I can get my point across. Damn language barrier.) 2021-10-20T22:56:23Z @ (#qnwhoyq) I’ll put it on my TODO list. 👌 2021-10-21T04:51:52Z @ (#qnwhoyq) Sure, why not 😁 2021-10-21T05:04:31Z @ (#ifphkga) That’s on purpose and probably won’t change, I think. 🤔

If `Subject` contains the full twt, then you can skim over conversations just by reading those lines in mutt’s index pager. I often do that. On the other hand, if they’re truncated, then the question is: Where do you truncate them? 72, 100, 140, 200? Some people have wide terminals, others don’t. So I decided: Okay, let’s have mutt do it. 🙃 (Or you could make it a user option, but I like to avoid those, because you quickly end up with a ton of options and things get very hard to test, because I myself don’t use most of them.)

The subject lines are already “compressed”, btw. For example, a full mention like “@” gets compressed to just “@foo”. Maybe it’d be possible to expand on that idea, like also strip the hashtags of conversation grouping. 🤔 2021-10-21T05:15:53Z (#ifphkga) Just for some more background: I wrote a StatusNet client years ago which worked very similar to jenny, with mutt as a frontend. That program did indeed truncate the subject lines – but it turned out to be a bit annoying in practice. It was always cut off a little bit too early. 🤣 So I eventually removed truncation altogether. 2021-10-21T07:37:17Z @ (#boco3fq) We’re also having a storm. No damages yet, but also no sleep last night. 😩 2021-10-21T11:58:27Z @ (#ifphkga) Nothing wrong with asking. 😊 I think I might actually implement more aggressive subject “compression”. We should be able to remove those subject hashtags, they’re just noise. 🤔 2021-10-21T11:59:40Z @ (#xvcfdma) Deleting all lines from the editor should do the trick. I use that quite often. 🥴 2021-10-22T11:48:23Z @ (#boco3fq) Yes, shutters and the windows themselves rattle quite a lot, also maybe other kinds of thin-ish structures. It gets very loud here. (I live in an old tower building.) 2021-10-22T11:56:46Z @ (#xyul2ea) What do you mean, “survive”? I sure hope the apocalypse will be thorough! 😳 🥴 2021-10-22T12:00:49Z @ (#f7ydt7a) 11 has a great scenery. 👌 Just needs a bit of rotation. 😁 2021-10-22T12:06:50Z @ (#f7ydt7a) And 15 is great. Straight to the wallpaper collection. 😁 2021-10-22T12:48:24Z (#lecztrq) … aaaaaand I have a buyer. 🥳 2021-10-23T03:54:58Z @ (#f7ydt7a) That’s better, yep. 👌 2021-10-23T09:27:48Z Every time a package has “pandoc” as a build dependency, I’m like: “Holy mother of cows, did I just install the *entire* haskell ecosystem? 🤯” 2021-10-23T10:09:58Z @ (#zipopla) Hm? How so? It’s just a huge amount of dependencies. 🤔 2021-10-23T10:14:31Z @ (#payoedq) Neato. It’s so hard to get the lighting right when taking pictures of birds. 😢 They always end up too dark. Or the background is way too bright. Guess I’d need HDR. 🥴