@movq@www.uninformativ.de Maybe Iām using the wrong term, ya know, silos and bubbles and all that š
@Sumomo@sumomo.neocities.org Ahh if youāre using the āol twtxt client from buckket, that thing isnāt really maintained anymore. I recommend you check out one of the clients listed on https://twtxt.dev or even just https://twtxt.app
@Sumomo@sumomo.neocities.org What client are you using btw? š¤ Does it support threads, and other v2 specs? š¤
If I say companies should at least consider the 3 line CC license before scraping my sites, Iām seen as the unreasonable one.
But when I use an alternative forontend, to read feeds on their sites, without having to make yet another free account, now the same companies and their users scream about some unspecified part of their license being violated, threaten legal action and expect me to care about it.

GitHub thread: https://github.com/zedeus/nitter/issues/1442#issuecomment-5413651441
@movq@www.uninformativ.de @itsericwoodward@itsericwoodward.com Hahaha, a festival, indeed! :-D There was also āRaupenkriegā (caterpillar war): jumping against each other in sleeping bags. I reckon that counts as pogo or mosh pit.
And back in the days, we had wonderful deep mud all around us, too! In extreme years we even needed to leave the camp ground for a day and walk to a gym with all the kids. There was just too much rain and the creek dangerously high.
We once had an actual creek running through the dining tent before the kids arrived. Luckily, it didnāt originate from the official creek, but the water came down the hillside. Unimaginable today with all these droughts in summer. Many creeks around here are dried up for several weeks, if not months now.
There you go, enjoy my favorite selection of yummy chocolate on the ground!
- https://wawuwo.de/old/wawuwo2006_woche2/montag/00020.html
- https://wawuwo.de/old/wawuwo2006_woche2/dienstag/00011.html
- https://wawuwo.de/old/wawuwo2006_woche2/dienstag/00018.html
- https://wawuwo.de/old/wawuwo2006_woche2/dienstag/00024.html
- https://wawuwo.de/old/wawuwo2006_woche2/freitag/00003.html
- https://wawuwo.de/old/wawuwo2007_woche2/09.08.2007-donnerstag/00001.html
- https://wawuwo.de/old/wawuwo2007_woche2/09.08.2007-donnerstag/00004.html
- https://wawuwo.de/old/wawuwo2007_woche2/09.08.2007-donnerstag/00021.html
- https://wawuwo.de/old/wawuwo2007_woche2/10.08.2007-freitag/00005.html
- https://wawuwo.de/old/wawuwo2007_woche2/10.08.2007-freitag/00009.html
- https://wawuwo.de/old/wawuwo2007_woche2/10.08.2007-freitag/00010.html
- https://wawuwo.de/old/wawuwo2007_woche2/10.08.2007-freitag/00011.html
- https://wawuwo.de/old/wawuwo2007_woche2/10.08.2007-freitag/00013.html
- https://wawuwo.de/old/wawuwo2007_woche2/11.08.2007-samstag/00001.html
- https://wawuwo.de/2009/woche2/freitag/043.html#image
- https://wawuwo.de/2010/woche2/abbau/016.html#image
It was a question of the mindset. Once we supervisors just made the best out of it and tried to had fun, the kids typically didnāt mind the mess either. Besides building huts, one of the most favorite things ever was actually āMatschschƶpfenā (scooping mud). The kids scooped puddles into wheel barrows using giant soup ladles from the kitchen. āSorry kids, time is up for today. Whoever sits in the closing circle first gets to go first tomorrow.ā Unfortunatly, I donāt find any photos from that.
@movq@www.uninformativ.de I usually donāt listen to metal where the singers scream. There are only very, very few bands where I find that actually pleasing.
Two decades ago or so, we young supervisors compiled ourselves a cassette for our forest recreation week. One of us had an old ruggedly built radio with a cassette deck powered by a bunch of large Baby (?) batteries. One side had āworking musicā which we played back while working in the evenings and night, e.g. gathering firewood in a handtruck for the campfire and things like that.
I used something by either Finntroll or Turmion KƤtilƶt for the āwakeup musicā side in the morning. The kids slept at home, but there were always some supervisors sleeping at the camp. The SĆT, the Standard-Ćbernachtungsteam, consisted of mostly young folks, about sixteen to early twenties. It was completed by wiser people in their fourties. Each morning, metal blasted through the dining tent that we converted into a sleeping tent. :-) Good times!
Yesterday, my mate and I left the house at 10 in the morning around 15 or 16°C. There was a steady wind blowing, the sun came and went every two minutes. The clouds looked really nice. Temperatures peaked at 21°C I reckon. Certainly great t-shirt weather. It was supposed to slightly rain at some point in the morning, but all we got was less than two hand full of drops and later the tiniest amount of drizzle for not even half a minute. So, nothing.
The weathermen also called for a cloudy arvo and partially sunny evening. The forecast must have scared off people right away, because there was noone around. We saw very dark clouds in the distance and there was certainly rain in the town. But out in nature, just a constant alternation between the sun and clouds.
Just before noon, we arrived at the bakery two villages over and got four fire brezels (with pepper, extremely tasty, but the fingers are an oily mess after that) and two nut sticky buns for provisions. This is where the small bird (19-23) was giving us a show.
Itās so dry, the landscape looks already like autumn for several weeks. Sooo many orange and brown leaves on the ground, itās crazy. I hope we still get a real autumn and head not straight from summer into winter. Last weekend was still an awful 37°C.
This time, we paid the small entrence fee to walk around inside the ruin of Hohenrechberg Castle. The red sandstone looks super sick. I really dig it. Itās actually purplish at parts, no kidding. Absolutely unreal! At least for me, I normally only see the beige sandstone around here.
Right when we went down the castle ditch, both camera batteries were completely drained after just 880 photos in total. What a bummer. I saw a guy with a leather glove coming out of a door and immediately followed him to the aviary in the hopes of a show or something. That flight cage wasnāt there last time I visited the ruin. And we were lucky, the falconer fed his harrisā hawk and explained us along the way. Other families came and went, but we talked to him for at least 20 minutes. Super interesting. I think that was easily the best part.
At exactly 19 oāclock I unlocked the front door. Our feet were done. It was an amazing nine hours hike. :-)
The gallery is a tiny bit larger than usual, enjoy: https://lyse.isobeef.org/wanderung-auf-die-burgruine-hohenrechberg-2026-08-22/
For me, the two most āmagicalā things about np.arrays are:
- Vectorized/broadcast operations, like multiplying a matrix and a scalar value & adding or subtracting two vectors or two matrices - but also any vectorized function;
- Masking & array indexing, being able to use arrays to select positions on other arrays;
- Bonus-third-thing: multi-dimensional arrays in general are quite magical too, if you add slicing to it, good lord, it can be quite daunting.
Oh god ⦠this appears to be related to the input device? Using the scrollbar is fine but using the mouse wheel is not? https://movq.de/v/66db24e1ee/vid-1787378419.mp4
There is this extremely annoying issue with my website:
https://movq.de/v/4acced3c8e/scroll.mp4
Notice how Iām scrolling, then switching to another tab, switching back, and then the scrolling position is different?
What the hell could cause this? Itās not always like this and I have only seen it in Firefox so far (but I very rarely use Chromium anyway), and this really happens a lot on my site but not on others.
Any ideas? Did I screw up the CSS somehow? š¤
The #py5 #LiveCoding feature can be briefly described as a tool that runs your module mode sketch and keeps an eye on changes at the source file, updating the running sketch with changes you save from your editor/IDE.
You can use with any coding editor from the command line, or, if you use #Thonny IDE you could help me test this experimental version of the thonny-py5mode plug-in!
https://discourse.processing.org/t/using-py5s-live-coding-feature-on-thonny-ide/48967
The #py5 #LiveCoding feature can be briefly described as a tool that runs your module mode sketch and keeps an eye on changes at the source file, updating the running sketch with changes you save from your editor/IDE.
You can use it with any coding editor, invoking it from the command line, or, if you use #Thonny IDE you could help me test this experimental version of the thonny-py5mode plug-in that adds a Live Coding mode!
https://discourse.processing.org/t/using-py5s-live-coding-feature-on-thonny-ide/48967
@klaxzy@klaxzy.net Turns out, itās not a cool project. :-D
Can you build from source? Perhaps not if there is just a download link.
Itās been a hot minute since I last used alien to convert a Debian package into an RPM packge. Or was it the other way around? No clue.
If you use GenAI images on your posts, you might have people thinking your posts are slop :-/
Try some nice public domain images! How about some bridges?
https://www.loc.gov/search/?fa=partof:library+of+congress+free+to+use+and+reuse&q=bridges
If you use GenAI images on your posts, you might have people thinking your posts are slop :-/
Try some nice public domain images! How about some bridges?
https://www.loc.gov/search/?fa=partof:library+of+congress+free+to+use+and+reuse&q=bridges
This cookie banner button uses āAbfallā in the German translation for probably āRejectā or āConfigureā, I donāt know, simply left the site. This literally means waste, garbage, rubbish, trash. Spot on! :-D
@arg@twtpub.com You actually can, but we highly discourage it and I havenāt really built āEditā / āDeleteā functionality in the Twtxt App that I know youāre using š Twtxt being purely decentralised, meaning that there are absolutely zero decentralised, with the exception of the twtpub.com service youāre using to reduce as much friction as possible for newcomers to try things, makes supporting threads a bit of a controversial topic š ā In the end we are sticking with the Hash v2 extension, making threads use content addressing, so even if you did delete/edit a Twt, you have to be carefuly it hasnāt already been replied to in the ecosystem š¤£
@david@daiwei.me Next year, apparently, but less spectacular. š¤
@lyse@lyse.isobeef.org Nice! Oh yes, observing the sun is exhausting, itās always so hot. And for not using a tripod, these shots are pretty good!
Iām not seeing any of what youāre describing, But then again I only use the app on mobile, on iPhone. Thereās only been basically a few commits to the App and one to Swag. Thatās it.
@movq@www.uninformativ.de Hell yeah, this is awesome! Great shots!
When I checked at the beginning, the sun was already way behind the trees. I then decided to wait until the end before leaving the house and melting in direct sunlight at 31°C. At the hill, there were around 15 people in camping chairs and on picnic rugs. Some dragged out their camera gear as well.
My first two photos were through the eclipse glasses. In contrast to others, I didnāt bring my tripod and just used a tree as a crappy makeshift one. With the large zoom itās impossible to keep it still for one second (what my cam decided to be the exposure time). Leaning the camera against the side of the tree is just not good enough.
Most of this insane power consumption happens during the models training, so the additional cost of prompting, is minimal. Facebook invented cool ways to exted the environmental damage far beyond the training stage, by dumping the dirty data center water into nearby water sources, but thatās more so a Facebook problem, than a fault of AI.
I would still never waste my own money, paying for any AI subscriptions that my employer doesnāt already pay for, no matter if we use them, or not.
I am also against aggressive scraping and taking everything as training data, disregarding the authors wishes and license. I allow it on my website, mostly as proof that no matter how much they scrape my stuff, the real me remains both a superior webdev and artist.
I am well aware this makes me come across really egotistical, especially after developers far better than me, embraced vibe coding, arguably way too much. To give an example, all attempts to get Microsoft Copilot, thatās embedded into SharePoint, to generate an extension/uBlock filter to make SharePoint revert to the old superior UI failed, but I was able to do that in three lines of code ( https://thecanine.smol.pub/ublock-filters ), in half an hour, despite me never seeing the code of that page before. After a few of these comparisons, it is increasingly hard to see most of these tools, as my replacement.
I am not even going to talk about the people trying to imitate my art style with AI, until they can show me a result where all the squares are the same size, in a grid and actually square.
I am a bit split on this, donāt think thereās any real use for AI in things like art, at absolute most getting a reference to compare with multiple non-AI ones, or possibly some animation in between frames, if it ever gets better at making those. Would not rely on it for any of my personal projects, more than maybe a quick search that would have previously been done on Stack Overflow, but if I work somewhere and they demand it be used similarly to how it is described on this site, considering the current IT job market, Iād probably take the slop bullet, over being unemployed.
Obviously even in that case, Iād only do this to generate code I can understand, improve and review. Iām definitely not advacating people just put their feet up on the table and let some random combination of āAI agentsā, vibecode their entire codebase.
I think it is safe to argue that a lot of #Pythonās success is derived from it being adopted early by end-user programmers, both in and out of the broad scientific community. We got the numeric computation infrastructure, then astronomers, computational linguistics folks, computer vision buffs, pioneering data journalists, the type design crew (Guidoās brother, wink wink), the list goes on and on.
If I were a retired person with time and money to spare I would start a āPython scientific and end-user programmers associationā to advocate for the interests of people who use Python not as professional developers. We could fund a well designed āPython censusā that would probably show we are more numerous than the professional developers (instead of the stupid JetBrains survey). Also, I hope we wouldnāt be funded by big corps and would be able to criticize them freely.
@david@daiwei.me Absolutely insane! For almost all the tools I always need two hands for sure. I canāt imagine using just a single one. And then his stuff turns out 100 times better than I could ever do.
There are advantages with just a single hand, though. I cut myself in the finger with scissors earlier. How stupid is that! :-D
I donāt like using Instagram and I was happy that maybe I could automate posting my daily sketches there using a #python script with the #instagrapi library.
I tried posting a single image as a test yesterday and it worked great in the first attempt, yay! :)
Today my account was blocked as Meta figured my account might have been invaded! :(
So there goes my excitement about automated posting on Instagramā¦
Nothing. Absolutely nothing at all. The storm clouds passed us by to the north, south, east and west. Next chance of rain on Wednesday.
C. This threw me off so bad, and it took me an unreasonable time to wrap my head around the difference between the precisions of floats and doubles. š„²
@aelaraji@aelaraji.com Hahaha, I donāt recall when I first stumbled across it, but Iām sure it must have been the same experience you had.
Ignoring the consistent fuck-up of the decimal point (German reverses comma and dot, we use a comma as the decimal separator and the dot as the thousands separator), they managed to print the amount correctly in most e-mails. But the āshipping is underwayā e-mail is broken. For ages.
@david@daiwei.me Thanks, mate! I just finished my two full version marking gauges. And Iām rather pleased with them, I think they turned out great if I say so myself.
https://lyse.isobeef.org/tmp/streichmass-mit-messerrad/
The beech fences (80 and 100mm long) were part of a former table frame that I cut down. I plugged the dowel holes with, well, dowels. The horrific looking one was the stuck original one, though. Luckily, itās a hell lot worse on camera than in person. If you take a close look, youāll also be able to see the large but slight chamfers one one side each that I just left alone.
I really like beech wood. It looks beautiful, is rather heavy (at least in comparison to spruce which I typically use) and thus rock solid, is also a blast to plane and the list goes on. I sanded it with 180 grit and itās smooth as a babyās bottom.
The 25mm beech round stocks that house the brass knurled nuts are now roughly 4cm long. Thatās one thing I wanted to change right after my first experience. If they were rounded or chamfered more, it would probably be even nicer for the fingers when using the marking gauge. Theyāre sunken in roughly 3mm in the fences. A forstner bit made quick work. This simplified alignment during glue-up a lot. Will definitely do that again if I happen to build more. I could fully concentrate on the grain orientation and it didnāt shift around.
Just like in the prototype, I used 8mm aluminium solid round bar again for one of the marking gauges. Itās also about 15cm in length. I figure thatās enough. The bought marking gauge has a twenty-something and some change steel rod. So far, all my markings didnāt even exceed probably 50mm.
I found the 8mm brass pipe laying around on the workshop. Didnāt know anymore I had it for ages. Unfortunately, the wall thickness is below a millimeter, so my 6mm wooden dowels are sliding in there. Thus, I put 8mm dowels in my drill chuck and reduced the diameter with a rasp. I went a tiny bit too far, the press fit is on the loose side. When drilling with a 2mm drill (I did that on purpose to hopefully cause the dowel to expand a bit more in the pipe, typically the tap hole for M3 is 2.5mm) and tapping M3, the downsized and glued in dowel slipped down the pipe. Should have used construction adhesive or something along those lines. Anyway, I might replace it with a solid one. I consider this a half-successful experiment. I fear that an unfavorable grain direction might pull out the cutting wheel during use. Letās see.
The finish of all three is boiled linseed oil. It looks nice, but oh by, this smell. I really dislike it. My hands stink even after washing them several times. I still got several liters left, so I have the dubious joy to use it on many, many other projects to come.
Oh, one last thing. Didnāt manage to drill the tiny holes for my M3x16 bolts perfectly in center like for the prototype. Theyāre a tiny bit off. Also, on the longer fenced marking gauge, the hole for the knurled nut is a little to the side and at an angle. No idea how I messed this up. Luckily, itās just a look thing but doesnāt impair use.
@david@daiwei.me Hahaha, I love it! :ā-D I need very high precision pliers.
But now Iām owed something for that! Nearly made up for it. I can use the new clamp to press hard and shrink the coin a bit.
@movq@www.uninformativ.de When a mate was learning Czech a few years ago, he sometimes told us about some crazy words and sentences. But it could very well be that these were out of norm extremes. Not sure. Youāre right, I also expected a little worse. :-)
@thecanine@twtxt.net Hahaha, this is cool! :-D
Bwahahaha, these security folks have a great sense of humor! :-D Got a phishing test e-mail disguised as an overdue anti-phishing training e-mail:
We receive these test phishing e-mails every now and then at work. When you follow the links and log in at the fake login, you probably get assigned another (real) training.
When I got this e-mail, I immediately thought of such a test. Since I actually do have some stupid training deadlines coming up soon, I wasnāt 100% sure, but still doubted that this was one of them. To make the timing even better, in the team meeting last week, our bosses reminded us to complete outstanding trainings before the deadlines. Ideally well in advance. Notifications about deadlines coming closer are sometimes not only sent to the individuals but also to the bosses and their bosses. And then things can get out of hands when somebody doesnāt read the e-mails properly and mistakes them for deadline exceeded reports.
Anyway, the URL also looked kinda legit. It really doesnāt help a single bit that domain names change all the fucking time. So, still with the test program in mind, I thought, I just give it a quick shot out of curiosity. Since I just had logged in before, the empty SSO username field was totally obvious then. Looking at the e-mail headers confirmed that this was indeed one of securityās field checks. :-)
I really am saddened by the current state of LG, as someone who used their phones and monitors for decades and still uses and albeit cautiously recommends their TVs, to those who can also go through the hours long process, to reconfigure them.
They really are the ultimate great hardware, burdened by adware and spyware filled anti-consumer firmware company.
@bender@twtxt.net probably just too busy with real life and work to interact with us plebs š¤£
muos/amd64 that boots into a running shell, with a tiny little vfs, UNIX-like semantics, syscalls, read/write, etc. It works pretty nicely, and aside from a small Assembly "nucleus", most of the Kernel and Userspace is written in Mu.
I just taught the scc SLOC tool I use how to detect and recognize the Mu programming language. So itās actually a bit worse than your estimate. Itās more like ~60/30 at the moment:
>>> mu = 1445
>>> asm = 2365
>>> T = mu + asm
>>> mu / T * 100
37.9265091863517
>>> asm / T * 100
62.07349081364829
Why.
Pythonās numeric types complex, float and int are not subtypes of each other, but to support common use cases, the type system contains a straightforward shortcut: when an argument is annotated as having type float, an argument of type int is acceptable; similar, for an argument annotated as having type complex, arguments of type float or int are acceptable.
https://typing.python.org/en/latest/spec/special-types.html#special-cases-for-float-and-complex
@movq@www.uninformativ.de You know you could in theory use the Twtxt App and the Twtxt Feeds service as your ānews readerā right? š
@lyse@lyse.isobeef.org Bingo!
Oh, yeah, newsboat is good. For this particular use case, I explicitly needed a graphical feed reader, though. š I ended up using Thunderbird, which has its own interesting way of configuring/adding feeds:
https://movq.de/v/a3557e3dc9/vid-1784952576.mp4
Why are feeds categorized as āMailā? Whatās going on with that āAddā button on the left of the dialog? Why does the dialog indicate that thereās a folder called ālist-files Recent Commitsā which doesnāt really exist in the end? (Why does it take about 1-2 seconds to load 25 feed items?) And so on.
@prologic@twtxt.net Our company is paying a shitload of money for all these (different) AI tools ⦠Iām probably not allowed to tell you the exact number, but it is a lot. The only other way would be to lay off employees, so we can pay even more for AI. (Needless to say, that would be the worst possible move.)
For a private person, $20 a month is also pretty expensive, isnāt it? And then assume that you maybe need more than one AI tool. Youāre quickly up to $50 a month or much more. This isnāt something that I, as a private person, will ever be willing to spend for this kind of stuff.
āAIā is just expensive as fuck. On every level. They will have to (ab)use every possible way to squeeze more money out of it, and that includes ads and what not.
@lyse@lyse.isobeef.org Yeah, the feed names are legacy and I didnāt want to set up redirect rules. (I canāt really tell if anybody actually uses them ā¦)
Extracting the info from the CHANGES file would be nice. Maybe Iāll add that. :-)
@movq@www.uninformativ.de Good question. Tarballs are probably not needed, but might be convenient for people who donāt want to or can use a version control system. Not sure if there are non-techies who use your software. Tarballs for branches are overkill, though, I agree.
Looking at this more closely: As for the feeds, how about filenames ātags.atomā and ācommits.atomā? Unless, of course, they were already named like that before.
For the tags feed it would be cool to include the actual changelog entries to be more useful if somebody takes this approach to get notified of new versions. But that would mean you have to duplicate the changelog entry into the annotated tag. And then you canāt fix changelog typos in the feed anymore. Alternatively, the feed generation would need to extract the section from the the CHANGES file. That has the benefit of automatically providing changelogs for past versions in the feed.
Hmm ā¦
My project pages have this āDownloadsā section and I offer tarballs for each release:
https://movq.de/git/jenny/#downloads
I added this many years ago because an OpenBSD dev asked for it (but the project in question didnāt end up in their ports after all).
What are your thoughts on this? Is it necessary to offer tarballs?
I noticed that some distributions have already moved away from using tarballs and instead always clone from Git. š¤
jenny stuff aside, I received zero bug reports or code contributions since leaving GitHub in 2018.
@prologic@twtxt.net Oh, yes, just for clarity: This wasnāt a āpro GitHubā argument. š I wonāt go back there (or to another āforgeā).
I think weāre totally on the same page: Decentralized Git hosting is good, but we havenāt solved the ācollaborationā part yet. Or rather: We have to modernize it. The tools are already there, but (many) people donāt want to use them and think theyāre clunky.
Deleted some old no longer used pixelart from my galley and added this as an alternative version, of the sprite one.

@movq@www.uninformativ.de Oh, thatās actually quite a bit. I didnāt expect that. You definitely have useful things. :-)
Exactly, I now also send links to my fork. :-D
jenny stuff aside, I received zero bug reports or code contributions since leaving GitHub in 2018.
How many tickets and merge requests did you get before moving to your own server?
Hm, these were probably some of the more active projects:
- https://github.com/vain/lariza/issues?q=is%3Aissue%20state%3Aclosed
- https://github.com/vain/pdfPres/issues?q=is%3Aissue%20state%3Aclosed
- https://github.com/vain/xiate/issues?q=is%3Aissue%20state%3Aclosed
So itās not a ton of stuff and there are many āissuesā I opened myself, but itās certainly more than these days.
Havenāt used
git send-emaileven once. I definitely have to look into that soon. Wanted to do that for several years. I typically upload the patch to my server and send a link via IRC.
git send-email is good for sending patches to a mailing list (because then the individual patches can be discussed easily), but since those are dying out as well, it loses its appeal. If you want to send patches to a single person, just sending the link to your repo is far easier. š¤
jenny stuff aside, I received zero bug reports or code contributions since leaving GitHub in 2018.
@movq@www.uninformativ.de Finally, your software is just perfect and finished by now, no need to report non-existing bugs or send in code changes. :-) How many tickets and merge requests did you get before moving to your own server?
I have to admit that I use git format-patch so rarely, I always have to pull it up from my shell history. Havenāt used git send-email even once. I definitely have to look into that soon. Wanted to do that for several years. I typically upload the patch to my server and send a link via IRC.
Maybe I was just very unlucky, but my experience is that you can perfectly ignore people and their work who only do it for the āfameā. Itās almost always been from inferior quality to say the least.
@movq@www.uninformativ.de If only somebody had warned us! Luckily, no TV in this household. :-)
@prologic@twtxt.net Hmmm, I have no idea how to solve that problem. š
Some jenny stuff aside, I received zero bug reports or code contributions since leaving GitHub in 2018.
I thought I had made that super easy, because you can just send me an email ā no sign-up process, nothing. But thatās way too old-school, people donāt know how to use git format-patch (let alone git send-email) and they also donāt understand that they can just send me a link to their forked Git repo (which can be hosted anywhere). Git is super flexible and powerful, but those features are hardly ever used.
Maybe people even need some kind ārewardā, or āfameā. Like those āachievementsā that you can unlock on GitHub. (Something to put in their CV ⦠?)
Are you aware of the Residential Proxy pest?
https://spur.us/blog/smart-tv-apps-residential-proxy-sdks
This explains the access patterns that I see in my logs.
Itās funny, because I used to warn years ago that this might happen, and then I lost track of this topic. Now here we are and itās a real issue. š¤¦āāļø
@lyse@lyse.isobeef.org A small portion of people might do the headphone thing because of autism or sensory issues, to isolate them from annoying noises. I used to do that myself. š¤
(1) Why The Oceanās Top Predator Refuses to Hunt Us - YouTube ā The first half of this documentary is amazing! š® ā The remaining half however is sad and depressing, making me never want to visit another zoo again š¢
Hurray! Finally, the thunderstorm is right over us. The last days we always got skipped. The rain smells so great. :-)
We strolled up our backyard mountain. Visibility wasnāt the best, despite the rain we got yesterday. Oh well, scenery was really beautiful, though.
I found it super funny that we almost overtook a jogger before she turned off to another path right in front of us (yeah, weāve got a smart pace, but this girl was slow as a snail).
š£ ACTION REQUIRED: Hey folks š For those of you whom are using the Twtxt App either via the Hosted option or on your own twtd instnace or via Github/Gitea or any other publishing backend (doesnāt amtter). Please read.
Please open the app and you should be prompted to save your recovery code for your device. This basically is all of your settings, follows, etc in the app itself. This is synced to the Origin everytime you make a change, and also stored on-device. This is what makes it possible to sync your setting across services, move to another device, etc.
Please save a copy of the recovery code somewhere. This is only your only way to recover your settings.
Thank you š
@balloon-fu-sen@tw.fus.f5.si Huh? š§ This hasnāt changed. What has is the default proxy used depending on your publishing backend.
there us a recovery path
@david@daiwei.me Ha, I just noticed that I changed Newsboatās defaults. Right from the factory, new items are just bold, while read ones arenāt. No different colors, white on black. Focused items are bold yellow on blue. No matter the read status. I think thatās why I started to play with the config to differentiate them. Itās been so long ago that I didnāt know anymore I even messed with that.
And yes, youāre right, the red on black is borderline readable. Also, my white on green focus is rather silly. But Iām sooo used to it, I donāt realize how bad the contrast is. To be fair, I donāt spend a lot of time in the lists. Aha, there are new articles, Enter to hit the artice view, read it, press n to immediately jump to the next unread article, rince and repeat, finally Iām back in the article list view.
Default theme, read focused:
Default theme, unread focused:
Lyseās schlimmbesserung, read focused:
Lyseās schlimmbesserung, unread focused:
@GabesArcade@gabesarcade.com I may be blocking that provider due to abuse from bots using VPN(s) ā What was your last IP?
@david@daiwei.me I had to look these up, horror isnāt my genre at all. :-D No idea what the cool kids use today, but I still have zsh as my interactive shell. For shell scripts, though, I try to stick to POSIX and only resort to bash if really needed or it would be too cumbersome.
@david@daiwei.me Not sure if you only mean the code segments or in general. In theory, a general darker text color for read messages would probably work. The thing is that regular white on black is quite standard. In Newsboat, new articles are red (I opted for yellow here) and read ones white. I found that useful and kinda copied it for tt.
@prologic@twtxt.net @movq@www.uninformativ.de Same with tt, hash v2 has to be used right from the epoch onward. (And now replying to a message with a timestamp before the epoch still results in a v1 hash.)
@prologic@twtxt.net No. After the cutoff-date, hashes are expected to be v2. End of story.
(In jenny, a twt can only ever have one thing that can be used for threading.)
@dce@hashnix.club So let me get this straight⦠You want to store your feed on a Codeberg repo right? But you want to clone that repo down somewhere else to serve it on a different location. Right? And youād like to use the Twtxt App (https://twtxt.app) to front all of this? Right?
You may have noticed I am not as active as I used to be here. Old @bender@twtxt.net isnāt going anywhere, though! But⦠I am Hyde, and my Jekyll resides at @david@daiwei.me. Jekyll is having his turn more often now, so if you follow my pure, unrestrained evil, you may as well follow my dark desires, hypocrite counterpart. šš¤£
Follow @david@daiwei.me, or I will bend you!
@david@daiwei.me Yes, but then I have to create and maintain an account Iāll never use š¤£
@dce@hashnix.club which version of Twet are you using? I might see if I can get it updated for you.
@movq@www.uninformativ.de The nice thing about properties is that you can compute and cache things on the fly at first attempt and also ensure validation for writing. But like you said, since itās not obvious that reading or writing might do some more things, itās strongly advised to avoid doing expensive stuff disguised as properties.
I reckon the vast majority of property use cases is to provide read-only access. At least that was my impression when I was doing a lot more in Python.
Personally, I think that this just reads a lot nicer:
oink.my_property
oink.my_property = 42
Than:
oink.get_my_property()
oink.set_my_property(42)
Btw, any field access is implemented using method calls. I might be wrong, but I believe thereās always __getattr__ and __setattr__ involved. 8-)
I trip over this in our code at work all the time.
Python has this concept of āpropertiesā:
class Oink:
def __init__(self):
self._foo = 3
@property
def my_property(self):
return self._foo
a = Oink()
print(a.my_property)
my_property() is a method but it can be used as if it were a field.
This can also be used to define a setter:
class Oink:
def __init__(self):
self._foo = 3
@property
def my_property(self):
return self._foo
@my_property.setter
def my_property(self, value):
self._foo = 123 * value
Because, for some reason, Python people donāt like getters and setters. Instead, they hide it behind a property.
The result is, when you read this:
a.my_property = 5
print(a.my_property)
You have no idea that this actually calls a method.
@movq@www.uninformativ.de My grief with Java is that itās sooo verbose. Sure, all the enterprise garbage makes it a hell lot more terrible, but even regular Java feels always so lengthy. And back in the days when I was using it daily, I missed so many convenient things in the stdlib after having experienced Pythonās ābatteries includedā. Not sure if or how recent Java versions caught up.
tt has a "draft" mode right? You didn't publish, then edit over and over did you? š
@prologic@twtxt.net Not sure if this really counts as a draft mode or this is what you had in mind. I just was in the editor for ages and didnāt close it. tt provides an integrated preview for the rendered message in there. It automatically updates every second.
Hereās a screenshot of the compose view with the conversation context on the top to which to reply to, the editor in the middle and the almost-live preview at the bottom, I hope itās big enough:
But itās not like I hit the āAdd messageā button in the compose view (the one currently selected on the screenshot), see the message in the conversation tree and then come back into the compose view to continue editing. Thereās no edit functionality in tt. Once the message is appended to my twtxt.txt file on disk, all I can do is edit it with vim. The U+2028 line breaks are really annoying to deal with (Iām sure I could do something about that if I spent the time), so I try to avoid that at all costs.
Once new messages have been added to my local file, I then manually upload the file to my server in a separate terminal. Thereās no upload command integrated into tt. Right from my very first message in the beginning, Iāve always done it exactly like that. Iām used to this and it really doesnāt bother me. But I can see that others might not be fans of that at all. I might add an upload mechanism to tt at some point in the future.
I really think I should go back to Java.
Writing programs in Python is so exhausting. I want a compiler and I want static typing. No, linters and type checkers and IDEs are not good enough. Compilers catch way more errors in advance.
Rust is also exhausting. Theyāre constantly adding language features and, at the same time, the runtime library remains tiny and you need 3rd party libraries for everything. Many of those are still at version 0.x (SemVer!) and you canāt rely on anything. Often times, you need the latest Rust nightly compiler.
Go is ⦠I donāt like it. And huge binaries.
I like C as a language, but itās too fragile. I want to have a proper HashMap every now and then.
None of the above have good GUI libraries, at least not on Linux.
And then thereās Java. This is my fractal renderer that I wrote over 17 years ago:
https://movq.de/v/fcd3c4e557/vid-1784121825.mp4
Itās fast. It has a GUI with custom widgets and those werenāt even hard to make. It still works without changing a single line of code. The source code files have timestamps from 2009 and I just noticed that the JAR file Iām using in the video was compiled in 2010.
Java as a language is relatively easy to learn and to master. There are few surprises. The source code organization with packages is good. Java API docs are clear and well written.
The JVM ramp-up times have improved considerably:
https://movq.de/v/e7314e521e/vid-1784121998.mp4
This isnāt like the Dark Ages anymore. Might even be usable for some CLI tools.
The only thing where Java really sucks is anything close-ish to the kernel. Try issuing an ioctl() ⦠I couldnāt have made my TUI framework in Java, but then again, I wouldnāt have needed to because Swing already exists and it just works.
@david@daiwei.me Thatās a good thing. I still use it heavily, but I also realize that it is addictive. This whole idea of getting likes and boosts is horrible. Seeing ānumber goes upā is inherently addictive design, if you ask me. This should never have been added to a Free Platform like Mastodon, and Iām glad that twtxt doesnāt have anything like it.
also, just to clarify, we built the hosted Service as the last lowest rung ladder for non-technical people. I fully expect most technical people will spin up their own publishing backend or use Github or similar so that long-term the ecosystem still remains very much decentralized.
@david@daiwei.me You mean, you mean⦠like mowing down a whole rain forest in a thunderstormās brutal heat? :-?
Show us todayās rain. :-)
@david@collantes.us heads up š that verification code never reached you ā outbound email was broken on my end (my mail relay was rejecting twtxt.net senders š¤¦āāļø). Fixed + deployed now š„³ give the hosted feed another go, itāll land this time š¤
@prologic@twtxt.net You also have to tell us the username!
Hurray, I can now press gg instead of g to go to the top in tt. Much better! :-) Other multi-key combinations are also easily possible now.
I should probably write a real article about this at some point, but here we go. The only downside with my new key binding system is that it breaks tviewās established pattern. Youāve got an InputHandler(), that is implemented using WrapInputHandler(ā¦). It typically then directly implements the switching logic depending on the key press. Something like this:
func (w *Widget) InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
// WrapInputHandler allows for intercepting key events with SetInputCapture(ā¦)
// from the outside for customization. This handles the default key bindings.
return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
switch event.Key() {
case tcell.KeyRune:
if event.Modifiers() == tcell.ModNone {
switch event.Rune() {
case 'k':
w.scrollUp()
return // we already handled the event, stop processing
case 'j':
w.scrollDown()
return
}
}
}
// We didn't handle the key event. Maybe the parent
// widget knows what to do with it.
if handler := w.parent.InputHandler(); handler != nil {
handler(event, setFocus)
}
})
}
From the outside, you can intercept and either stop or continue the widgetās original key handling with a potentially rewritten key event using SetInputCapture(ā¦):
w := NewWidget()
// customized or additional key bindings
w.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
switch event.Key() {
case tcell.KeyUp:
// Rewrite the event, so the "cursor up" key is an alias
// for the vim key binding "k", that is handled by the
// wrapped input handler above. (I know, I know, this is a
// completely unrealistic example, why would anyone use
// cursor keys when there are vim key bindings available?!)
return tcell.NewEventKey(tcell.KeyRune, 'k', tcell.ModNone)
case tcell.KeyRune:
if event.Modifiers() == tcell.ModNone {
switch event.Rune() {
case 'q':
app.Stop()
// we already handled the event, do not pass it
// to the wrapped input handler above
return nil
case 'r':
toggleMessageReadStatus()
return nil
}
}
}
// we didn't handle the event, pass it to the wrapped
// input handler above
return event
}
Since they all expect a single key, Iāve noticed that using multiple dedicated KeyBindings of mine on these different levels kinda breaks multi-key handling with common prefixes. The outer-most KeyBinding captures the prefix, but it canāt transfer it to the inner one if not handled by the outer one. At least not without some more (potentially ugly) changes. So, I now have to work with just a single KeyBindings object for the entire widget chain (if it consists of multiple other widgets or the regular input handler and input capture are in the game). The outside needs to register all its key bind customizations or extensions at the same level that the original widget handles its default ones. Doable by exposing the widgetās KeyBindings instance, but not pretty. You always have to keep this in mind.
With the KeyBindings, it will look like that:
type Widget struct {
parent tview.Primitive
// make it available to children or the outside either by
// direct field access or by providing a getter method
KeyBindings *bind.KeyBindings
}
func NewWidget() *Widget {
w := &Widget{KeyBindings: &bind.KeyBindings{}}
w.KeyBindings. // default key bindings
Bind0(bind.KeySequence('k', w.scrollUp).
Bind0(bind.KeySequence('j', w.scrollDown)
return w
}
func (w *Widget) InputHandler() InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
// also note the missing support for focus transfer at the moment
event = w.KeyBindings.Capture(event)
if event == nil {
return
}
if handler := w.parent.InputHandler(); handler != nil {
handler(event, setFocus)
}
}
}
And then from the outside, or in a child widget:
w := NewWidget()
w.KeyBindings. // additional or customized key bindings
Bind1(bind.KeySequence(tcell.KeyUp), func(*tcell.EventKey) *tcell.EventKey {
return tcell.NewEventKey(tcell.KeyRune, 'k', tcell.ModNone)
}).
Bind0(bind.KeySequence('q'), app.Stop).
Bind0(bind.KeySequence('r'), toggleMessageReadStatus)
When directly working with tview primitives that are not part of custom widget implementations, the following works well so far:
textView := tview.NewTextView().
SetWordWrap(true).
SetText("ā¦")
SetScrollable(true)
textView.SetInputCapture((&bind.KeyBindings{}).
Bind0(bind.KeySequence('q'), app.Stop).
Bind1(bind.KeySequence('g', 'g'), func(*tcell.EventKey) *tcell.EventKey {
return tcell.NewEventKey(tcell.KeyHome, 0, tcell.ModNone)
}).
Capture)
I need to sleep on this some more.
Also, writing very long messages like this one is really not all that fun in ttās editor. I should absolutely provide a way to shell out to vim.
(Took me about one and a half hours to compose, holy crap. But not only because of not using vim. Although, that might have saved me a quarter hour or so for sure. Proof-reading this message also uncovered quite a few bugs in my real documentation. So, thatās a big win!) Good night!
@david@daiwei.me The one with www is correct: https://www.uninformativ.de/twtxt.txt is the canonical URL used in the url = metadata field. (For historical reasons, it also works without www and even with http.)
+00:00 vs Z should be treated as equivalent UTC š¤¦āāļø I'll take a look at the timestamp parsing in Yarnd š§
@prologic@twtxt.net For what itās worth, the twt hash extension is specifically modeled after yarndās implementation with all the quirks coming from Goās stdlib: https://twtxt.dev/exts/twt-hash.html#timestamp-format
āAll timezones representing UTC must be formatted using the designated Zulu indicator Z rather than the numeric offsets +00:00 or -00:00. If the timestamp does not explicitly include any timezone information, it must be assumed to be in UTC.ā
@balloonfu-sen@yarn.girlonthemoon.xyz I could in toehry publish a specification for what twtd implements, which forms the basis of the API between twtxt.app <-> twtd, if you wanted to write your own twtd / twtxt.app compatible publishing backend (assuming you didnāt want to use Github/Gitea, etc).
@balloonfu-sen@yarn.girlonthemoon.xyz Unfortunately I tried to support SFTP but ripped this out as Browsers (which the Swag framework uses under the hood as a framework to build PWA(s)) doesnāt support raw TCP connections. So FTP / SFTP is not possible without hacks like a proxy. Which I donāt really want to support. So only things that have some kind of HTTP API are possible viable publihsing backends right now. That is Github/Gitea, twtd, Yarn, etc.
š definitely using the Twtxt App as my daily-driver now for Twtxt/Yarn. Not using twtd however, as I just pair the app with my already existing yarnd powered profile on twtxt.net
So⦠Quick count. Hands up those who are using the Twtxt App? š¤ ā And whoās also pairing this with the twtd publishing backend?
Well, after all these tests, I canāt reproduce. I have used exclusively the desktop to conduct these tests.
@david@daiwei.me Ta, I continued my fun with studying the tcell and cbind code bases for key bindings. My plan is to eventually not only support custom key bindings in the tt configuration file, but also to enable multi-key sequences, such as gg to jump to the top of a list/tree. Or use other vim-like navigation movements like 7j or 25gg etc.
And it turns out there are only a hand full oft tcell/cbind version combinations that work together. Only if all stars align, thereās chance of success. I will probably end up pulling cbind in to simplify my life. There are situations where tcell.EventKeyās triple of key, modifiers and rune are not all that intuitive to me. Letās see.
@prologic@twtxt.net Well, 15 shows the site. On the left, I had a roll mat on a tarp. I borrowed some āNVA tarpsā from the scouts for this trip. The scouts got them from the National Peopleās Army, the German Democratic Republicās armed forces after Germany was reunited. Theyāre 1.75m x 1.75m in size and weigh 1.3kg, quite heavy, but super awesome. One tarp on the bottom, another one to cover up the clothes, shoes and sleeping bag in order to protect against the thaw. Finally, a mosquito net over all that, hung from a rope between two trees.
My mate just used a hammock with a mozzie net on the right hand side. The third tarp served as the luxurious bedside carpet. :-)
We sat on my second tarp to chill and enjoy the sunset and surroundings. It was nice to notice birds etc. die down. It took a really long time for the last light to fade away. Since we have a very high risk of forest fires, we of course couldnāt have a camp fire. But after all the exhaustion, I didnāt even miss it for one second.
Since we had dinner at home before leaving, all we brought were two lye rolls, two grain rolls, two brezels, some sausage and chocolate biscuits for breakfast. From the 2.5l of water, I ended up using 2l. Itās always good to have a little extra, despite the unnecessary weight. We had brekkie a few kilometers further on a bench in the shade. The first bench was already in direct sun.
Our camp site was maybe 30m to the side and a few meters down of a summit path hidden behind some trees and bushes. We were quite lucky, the other side of the hill got quite a bit of a breeze at night. We could hear the leaved treetops making much more noise behind us.
@movq@www.uninformativ.de Yes, these kind of dogs should really be strictly forbidden!
Itās not illegal if you own the forest or ask the owner. :-)
@david@daiwei.me Yeah, no clue. But my mate said the dog is disqualified from such adventures in the future. :-)
The temps were supposed to hit 14°C just before sunrise. Since we didnāt bring a thermometer, I canāt tell for sure. I was rather hot in my sleeping bag, so I had to pull out my arms every now and then. My mateās sleeping bag was a little lighter and, unfortunately, the zipper jammed up. Since it didnāt close all the way, it felt quite a bit cold I was told in the morning. When we got up at 6ish (we said, we donāt care about time at all), it was probably already 16°C if not more. I brought a jumper, but a t-shirt was already nice enough to wear. The jumper just served as my pillow. The mercury raised by the minute then.
Yeah, I circled the spot with a biro to keep an eye on it. Until now, thereās absolutely nothing to see. Looks like I got lucky.
(Guess I should have used my āfind contextā function. š¤Ŗ)
We slept in the forest. It was really great except of my mateās fucking terror dog who was barking and snarling the entire night to each and every sound. I had maybe half an hour of sleep in total. Despite that, it was pleasantly warm. Well, the night, that is. The heat was brutal during the days. Literally streams of sweat were running down on us on the way there in the evening and back in the morning.
Surprisingly, there werenāt any mozzies around at night, I would have lost all safe bets. On the way there, my mate convinced me to take a shortcut through the taller and taller growing grass. Itās been some time that somebody traveled on this track, so we had to search around a bit for the overgrown path where we could cross the mostly dried up creek. In the beginning I said that this will be a bad idea. Lo and behold, I discovered a tick on my inner upper leg the next morning. Luckily, I got it out with my tick hook on the first attempt.
Iām starting to use the twtxt.app as my daily driver now as opposed to yarnd and my pod twtxt.met š„³
Fixed the broken hashes in the Twtxt App (https://twtxt.app) š„³ It was hashing your twts with a client-side timestamp the server never used š¤¦āāļø Now it keeps the canonical created/hash the pod (or twtd) returns, and the GitHub/Gitea backends write a # url = preamble so every client hashes your feed the same way. Thanks @fastidious@tilde.town for the report š
@marcorocco@roccodrom.de thatās interesting. Not the act itself, nor that you did it for your wife (it is the least you could do, right?). I find it interesting because in the US you canāt find bicycles with inner tubes. The tyre is it, nothing else. Yep, just the tyre.
Heh, thatās a cute story: https://www.osnews.com/story/145459/you-paid-me-a-long-time-linux-user-to-use-windows-11-exclusively-for-a-month-heres-how-it-went/
@aelaraji@aelaraji.com do not use twtxt.app yet. It has issues that @prologic@twtxt.net will fix soon.
@movq@www.uninformativ.de LOL. I canāt imagine a workplace using Matrix. It simply⦠boggles my mind.
XMPP greatest peak was when Google Talk was around. Being able to chat with thousands, if not millions, of Google users at that time, using your own domain, and your own XMPP server was amazing. Then Google, in all its wisdom, and as it does very often, decided to kill it.
I might be on the minority, but can care less about video calls. Heck, even calls! Text is King. š¤Ŗ
@movq@www.uninformativ.de I donāt. but i do use IRC so hmmm š§
@aelaraji@aelaraji.com At work we used to have XMPP/Jabber Chat-Clients but now they are obsolete, due to the introduction of Matrix.
@lyse@lyse.isobeef.org How many people are still using XMPP? š¤ Iād expect the number to just as low as IRC users? š¤
@lyse@lyse.isobeef.org simplified it a little bit. Using only *bot* will bring collateral damage I want to avoid (there are, still some āgoodā bots):
@aibots {
header_regexp User-Agent (?i)(GPTBot|ChatGPT|OAI-Search|anthropic|Claude|Google-Extended|FacebookBot|CCBot|Perplexity|Applebot-Extended|cohere|Omgili|Bytespider)
}
abort @aibots
@anth@a.9srv.net that page is absolutely unreadable on mobile, very close to the same on desktop. Had to use Safariās reader mode to see it, and then⦠meh. Closed tab. š