Searching txt.sour.is

Twts matching #documentation
Sort by: Newest, Oldest, Most Relevant

I’m trying to help a friend using #GoogleDocs and it looks like the enshitification mill destroyed the end-notes feature?

My friend’s document would benefit from the automatically numbered superscript links for Vancouver style references…

⤋ Read More
In-reply-to » Does anyone have time this weekend to manually test and validate and prove out this spec I'm calling Gitxt? A Twtxt-inspired purely decentralised Git federation/forge? 🤔 Hit me up! You need only git, curl and a web server of some kind.

For the curious, this is fully documented with roleplay Alice/Bob. I was going to test this with @david@daiwei.me but we both got busy, but now I’m on holidays from work for a month so 🤷‍♂️ 🤣

⤋ Read More

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!

⤋ Read More
In-reply-to » Oh boy, I absolutely hate this stupid trend of not writing changelogs anymore! Why the fuck would one seriously consider it to be a viable option to just let some shitty bot spew all merge requests on a goddamn GitHub release?! First of all, these merge request titles suck balls. The order of the changes in this "changelog" is completely random (well, probably merge time, which is as useless as the dick on the Pope). They are not grouped by anything at all. Additions, changes, removals, deprecations, etc. randomly mixed up in one giant list. And then "Add feature X", seventeen kilometers further down "Revert 'Add feature X'". Fuck you! Don't include this shit in the first place!

@movq@www.uninformativ.de I just ran across another thing. At least I personally couldn’t care less about CI infrastructure changes. Whether they’re using github action a or b or c or version v or w, it is not of my interest. At all. (It might be useful to estimate the supply chain attack risk, though.) If the maintainers want to include them in the changelog – and there are probably people to whom this information is crucial – it’s probably best to document CI infrastructure changes in their own section.

⤋ Read More
In-reply-to » Oh boy, I absolutely hate this stupid trend of not writing changelogs anymore! Why the fuck would one seriously consider it to be a viable option to just let some shitty bot spew all merge requests on a goddamn GitHub release?! First of all, these merge request titles suck balls. The order of the changes in this "changelog" is completely random (well, probably merge time, which is as useless as the dick on the Pope). They are not grouped by anything at all. Additions, changes, removals, deprecations, etc. randomly mixed up in one giant list. And then "Add feature X", seventeen kilometers further down "Revert 'Add feature X'". Fuck you! Don't include this shit in the first place!

@movq@www.uninformativ.de Hahaha, great timing! :-D I love your article and agree with almost all your points.

On the AI changelog part, though, I’d rather recommend to just not have a changelog at all.

Another important thing for me is the deprecation notice section. What do I need to look out for in the future? Should I start to migrate to another API soon? Even right now? Or does it have time?

While going through these terrible GitHub release pages, I also found these “New Project Contributors” sections (yeah, for that, they found the time to make a section) annoying. Don’t get me wrong, sure, credit where credit is due. But come on. Soooooo much space for an inefficiently formatted (and also unsorted) list. At least it was easy enough to skip over it.

And then, there are also these changelogs or rather notice documents in general that are infested with multicolored emojis all over the place. My brain’s spam filter kicks in and shoves everything to /dev/null immediately. It’s especially a thing at work.

In my previous work project, we also used the Keep A Changelog Format. That was great. You wouldn’t believe how often I resorted back to that document. At least twice a week, often several times a day. I was very glad that we put in this effort. Of course, writing the changelog took its time, but it was worth every minute and more. Reading a many months old item, it was immediately clear. I was our best customer in that regard.

Now, it’s just the same auto shitshow with MR titles in a rolling date-versioned release scheme. It’s just our team who has to deal with that, though. I think I’m the only one who is not a fan of it.

⤋ Read More

U.S. Plan Is Said to Pull a Third of Fighter Jets It Provides NATO for Europe
The plan, outlined by officials and in a written document, provides rare clarity about the extent to which the Trump administration intends to reduce its commitment to NATO. ⌘ Read more

⤋ Read More

Plan ‘abandoning’ nearly built motorway in Sydney’s south secretly explored
Confidential documents reveal abandoning the $3.2 billion underground motorway project has been canvassed in a secret scoping study and other reports. ⌘ Read more

⤋ Read More

Alpha School’s Ritzy New York City Campus Costs $65,000 a Year—but Isn’t Actually a School
A homeschooling center in Manhattan is part of the company’s nationwide expansion. Internal documents reveal its strategy: “Opening date > safety.” ⌘ Read more

⤋ Read More

Man allegedly caught with firebomb, knives outside John Ibrahim’s home
A man has allegedly been found lurking near the Sydney home of the former nightclub mogul with weapons and an “intent” to harm, court documents say. ⌘ Read more

⤋ Read More

Warnings that metro rail line to Sydney’s new airport is set to be delayed again
Confidential documents reveal the project is running late on a vast range of work, from switching on power at stations to receiving new European-built trains. ⌘ Read more

⤋ Read More

Hands-On With Gemini Spark: I Gave It Access to My Life and It Friend-Zoned My Boyfriend
Google’s new AI agent combed through my emails, documents, and calendar to plan a birthday party and still didn’t clock the person most important to me. ⌘ Read more

⤋ Read More

US Law Enforcement Warns of ‘Anti-Tech Extremism’ as AI Hatred Grows
As Americans stew over the looming risk of job-stealing AI and data centers in their back yards, the feds are raising the alarm about a new category of threat, documents obtained by WIRED show. ⌘ Read more

⤋ Read More

SpaceX IPO Filing Reveals Anthropic Is Paying $15 Billion a Year to Access Its Data Centers
The long-awaited documents SpaceX filed with US regulators Wednesday included details about a lucrative deal to lend GPUs to a major AI rival. ⌘ Read more

⤋ Read More

Hackable Robot Lawn Mower Unlocks a New Nightmare
Plus: Meta officially kills encrypted Instagram DMs, the Trump administration targets “violent left wing extremists,” leaked documents reveal Russia’s school for elite hackers, and more. ⌘ Read more

⤋ Read More

Another AI rant:

One of the “key features” of LLMs is that you can use “natural language”, because that is supposed to be easier than having to learn a programming language. So, when someone says to me, “I automated this process using AI!”, what they mean is: They have written a very, very large Markdown document. In this document, they list what the AI is supposed to do.

In prose.

This is a complete disaster.

Programming and programming languages have one crucial property: They follow a well-defined structure and every word has a well-defined meaning. That is absolutely brilliant, because I can read this and I can follow the program in my head. I can build a mental model. I can debug this, down to the precise instructions that the CPU executes. This all follows well-defined patterns that you can reason about.

But with these Markdown files, I am completely lost. We lose all these important properties! No debugging, no reasoning about program flow, nothing. It’s all gone. It’s a magic black box now, literally randomized, that may or may not do what you wanted, in some order.

People now throw these Markdown files at me … and … am I supposed to read this? Why? It’s completely random and fuzzy.

Sadly, these AI tools are good enough to be able to mostly grasp the authors intentions. Hence people don’t see the harm they cause, because “it works”.

We already have a ton of automations like this at work: Tickets get piped through an LLM and these Markdown files / prompts determine what will happen with the ticket, and maybe they trigger additional actions as well, like account creation or granting permissions. All based on fuzzy natural language – that no two humans will ever properly agree on.

Jesus Christ, we’re now INTENTIONALLY bringing the ambiguity of legal texts and lawyers into programming.

Using natural language is NOT easier than using a programming language. It is HARDER. Have you people never read a legal contract? And that stuff can STILL be debated in a court room.

I can’t begin to comprehend why we, tech folks, push this so hard. What is wrong with you? Or me?

(And, once again, we’re ignoring other factors here. LLMs use a ton of energy and ressources, that we don’t have to spare. It’s expensive as fuck. It doesn’t even run locally on our servers, meaning we give all these credentials and permissions to some US company. It’s insane.)

⤋ Read More
In-reply-to » Just a couple of shots from our trip to Bald Rock—finally got reception so I can share them!

Hmmm doesn’t appear to be documented 🧐 Nut ly watch reckons i climbed 242m so yhay part is right!

⤋ Read More

Fresh calls for release of UK’s files on Rendlesham Forest UFO incident
There are still many unreleased documents pertaining to the UK’s most hotly debated and enduring UFO case. Often referred to as “Britain’s Roswell”, t… ⌘ Read more

⤋ Read More

Okay, so the funniest thing that has happened at work in the realm of AI so far is this:

So this guy (that holds a certain position of power) wants people to use more AI, meaning people are expected to install a set of AI tools on their laptops. But, of course, he doesn’t want to write proper documentation for this, because that would be silly monkey work, right? So he conjures up some AI prompts that are intended to make the AI agent install all this stuff by itself.

Do you see where this is going? Can you see the punchline?

That’s right! Since none of this AI stuff is deterministic, every setup is different. 🤦‍♀️ Like, 10, 20 systems, all set up a little different and people wonder why this or that doesn’t work as expected.

Okay, it’s not funny.

Image

⤋ Read More

Bizarre conspiracy theory claims Earth’s gravity will stop for 7 seconds
The idea seems to have stemmed from claims of a leaked NASA document known as ‘Project Anchor’. We’ve heard a lot of ‘out there’ conspiracy theories o… ⌘ Read more

⤋ Read More
In-reply-to » Yikes. https://adamj.eu/tech/2021/05/13/python-type-hints-how-to-fix-circular-imports/

@lyse@lyse.isobeef.org The thing is that’s hard to avoid if TYPE_CHECKING, but documentation tools such as pdoc don’t support that … so it’s either type hints or API docs. 🤷

I hope I can eventually find a way out of this mess …

⤋ Read More
In-reply-to » @lyse You actually have a Markdown parser/renderer in there? Oh dear. I would have been (well, I am) way too lazy for that. 😅

@movq@www.uninformativ.de Well, just a very limited subset thereof:

  1. inline and multiline code blocks using single/double/triple backticks (but no code blocks with just indentation)
  2. markdown links using using [text](url)
  3. markdown media links using ![alt](url)

And that’s it. No bold, italics, lists, quotes, headlines, etc.

Just like mentions, plain URLs, markdown links and markdown media URLs are highlighted and available in the URLs View. They’re also colored differently, similarly to code segments.

I definitely should write some documentation and provide screenshots.

⤋ Read More
In-reply-to » H… Ho… How have I not heard about vim-tagbar before? 😳

@lyse@lyse.isobeef.org Yeah, well, given that I didn’t need this for such a long time, it’s probably not an essential tool. 😅

I’ve often wanted to have an outline of text documents, though, and tagbar/ctags can do that as well:

Image

Image

This isn’t as powerful as the “Navigator” tool in StarOffice/LibreOffice (which can be used to rearrange the document), but still pretty useful:

https://www.uninformativ.de/blog/postings/2024-05-23/0/so31.mp4

⤋ Read More
In-reply-to » I'm contemplating the idea of switching my activity pub instance from Gootosocial to a Pleroma one. While GTS is kinda cute (lightweight and easy to manage) of a software, the inability to fetch/scroll through people's past toots when visiting a profile or having access to a federated timeline and a proper search functionality ...etc felt like handicap for the past N months.

@bender@twtxt.net yeah, I’ve been reading through the documentation last night and it felt overwhelming for a minute… +1 point goes to GTS’s docs. but hey, I’ll be taking the easy route: podman-compose up -d they provide both a container image and an example compose file in a separate git repo but I’m wondering why that is not mentioned anywhere in the docs, (unless it is and I haven’t seen it yet)

⤋ Read More
In-reply-to » I'm contemplating the idea of switching my activity pub instance from Gootosocial to a Pleroma one. While GTS is kinda cute (lightweight and easy to manage) of a software, the inability to fetch/scroll through people's past toots when visiting a profile or having access to a federated timeline and a proper search functionality ...etc felt like handicap for the past N months.

@aelaraji@aelaraji.com good luck with that! Their installation requirements, and install document in general give me headache. While on the contemplating topic, I too am contemplating shutting down my ActivityPub altogether. No GoToSocial, no nothing. I am mostly a lurker, so will not miss it much.

⤋ Read More

All my newly added test cases failed, that movq thankfully provided in https://git.mills.io/yarnsocial/twtxt.dev/pulls/28#issuecomment-20801 for the draft of the twt hash v2 extension. The first error was easy to see in the diff. The hashes were way too long. You’ve already guessed it, I had cut the hash from the twelfth character towards the end instead of taking the first twelve characters: hash[12:] instead of hash[:12].

After fixing this rookie mistake, the tests still all failed. Hmmm. Did I still cut the wrong twelve characters? :-? I even checked the Go reference implementation in the document itself. But it read basically the same as mine. Strange, what the heck is going on here?

Turns out that my vim replacements to transform the Python code into Go code butchered all the URLs. ;-) The order of operations matters. I first replaced the equals with colons for the subtest struct fields and then wanted to transform the RFC 3339 timestamp strings to time.Date(…) calls. So, I replaced the colons in the time with commas and spaces. Hence, my URLs then also all read https, //example.com/twtxt.txt.

But that was it. All test green. \o/

⤋ Read More
In-reply-to » FTR, I see one (two) issues with PyQt6, sadly:

@movq@www.uninformativ.de I think I now remember having similar problems back then. I’m pretty sure I typically consulted the Qt C++ documentation and only very rarely looked at the Python one. It was easy enough to translate the C++ code to Python.

Yeah, the GIL can be problematic at times. I’m glad it wasn’t an issue for my application.

⤋ Read More

I used Gemini (the Google AI) twice at work today, asking about Google Workspace configuration and Google Cloud CLI usage (because we use those a lot). You’d think that it’d be well-suited for those topics. It answered very confidently, yet completely wrong. Just wrong. Made-up CLI arguments, whatever. It took me a while to notice, though, because it’s so convincing and, well, you implicitly and subconsciously trust the results of the Google AI when asking about Google topics, don’t you?

Will it get better over time? Maybe. But what I really want is this:

  • Good, well-structured, easy-to-read, proper documentation. Google isn’t doing too bad in this regard, actually, it’s just that they have so much stuff that it’s hard to find what you’re looking for. Hence …
  • … I want a good search function. Just give me a good fuzzy search for your docs. That’s it.

I just don’t have the time or energy to constantly second-guess this stuff. Give me something reliable. Something that is designed to do the right thing, not toy around with probabilities. “AI for everything” is just the wrong approach.

⤋ Read More
In-reply-to » @bender Thanks for this illustration, it completely “misunderstood” everything I wrote and confidently spat out garbage. 👌

@prologic@twtxt.net 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@twtxt.net, 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. 😂

⤋ Read More
In-reply-to » There are no really good GUI toolkits for Linux, are there?

@movq@www.uninformativ.de Yeah, give it a shot. At worst you know that you have to continue your quest. :-)

Fun fact, during a semester break I was actually a little bored, so I just started reading the Qt documentation. I didn’t plan on using Qt for anything, though. I only looked at the docs because they were on my bucket list for some reason. Qt was probably recommended to me and coming from KDE myself, that was motivation enough to look at the docs just for fun.

The more I read, the more hooked I got. The documentation was extremely well written, something I’ve never seen before. The structure was very well thought out and I got the impression that I understood what the people thought when they actually designed Qt.

A few days in I decided to actually give it a real try. Having never done anything in C++ before, I quickly realized that this endeavor won’t succeed. I simply couldn’t get it going. But I found the Qt bindings for Python, so that was a new boost. And quickly after, I discovered that there were even KDE bindings for Python in my package manager, so I immediately switched to them as that integrated into my KDE desktop even nicer.

I used the Python KDE bindings for one larger project, a planning software for a summer camp that we used several years. It’s main feature was to see who is available to do an activity. In the past, that was done on a large sheet of paper, but people got assigned two activities at the same time or weren’t assigned at all. So, by showing people in yellow (free), green (one activity assigned) and red (overbooked), this sped up and improved the planning process.

Another core feature was to generate personalized time tables (just like back in school) and a dedicated view for the morning meeting on site.

It was extended over the years with all sorts of stuff. E.g. I then implemented a warning if all the custodians of an activitiy with kids were underage to satisfy new the guidelines that there should be somebody of age.

Just before the pandemic I started to even add support for personalized live views on phones or tablets during the planning process (with web sockets, though). This way, people could see their own schedule or independently check at which day an activity takes place etc. For these side quests, they don’t have to check the large matrix on the projector. But the project died there.

Here’s a screenshot from one of the main views:

Image

This Python+Qt rewrite replaced and improved the Java+Swing predecessor.

⤋ Read More

PEP 8107: 2026 Term Steering Council election
This document describes the schedule and other details of the 2025 election for the Python steering council, as specified in PEP 13. This is the steering council election for the 2026 term (i.e. Python 3.15). ⌘ Read more

⤋ Read More

U-Boot v2025.10 released
Version 2025.10 of the U-Boot boot loader
has been released with new features, including Python tooling improvements,
cleanups for implicit header inclusions, better support for numerous Arm
platforms, support for new RISC-V platforms, better documentation, and
more. Maintainer Tom Rini also reports on some project news:

As I mentioned with the v2025.07
release, I was looking for a few people to step up and help with the
overall organization and management of the project. To that … ⌘ Read more

⤋ Read More

The driver’s license documents in Germany now have an expiration date. You have to renew them every 15 years. (Not the license itself, just the documents.)

I just got my renewed documents. Their expiration date says something like 01.09.40. Huh? That looks super weird to me, like an error. But no, it’s 2040 … Just 15 years away.

⤋ Read More
In-reply-to » @bender @thecanine well now this has me thinking abt the feasibility of making an android twtxt app for pods, the actual apis of pods would have to be standardized (or the fucked up way that activitypub does it, where the "mastodon api" is the defacto client api (does yarn even have an api reference?)) or the client is just simply..a client..but editing feeds via PUT, PATCH, DELETE etc. is standardized!...? (not to mention i dont even know where to begin making an android app lmao)

@zvava@twtxt.net And yes yarnd does have a well documented API and two clients (CLI and unmaintained Flutter App)

⤋ Read More

«… It all went well until 1980 or so, when Ronald Reagan appointed a new head of the EPA. The lady didn’t like her stationery we had designed and with a simple “I want my daisy back” undermined the overall graphic system. If the Queen doesn’t like it, we don’t like it became the attitude, and the program began to crumble. The old logo was fully reinstated and the graphic system was abandoned. A decade later, nobody at the EPA could find a copy of the Graphic Standards System, except a bunch of legalese that you will find on its website.

I’m a fan of the EPA and all its efforts and hope that we helped in some small way for this agency to communicate within itself, to other government agencies, and with the American people. I’m very grateful and appreciative that Jesse Reed and Hamish Smyth of Standards Manual, and Julie Anixter of AIGA, brought this document to life again. Have fun revisiting.»
(from the introduction by Steff GeissbĂźhler)

⤋ Read More

Hmm, gnu.org is slow as heck. Shorter HTML pages load in about ten seconds. This complete AWK manual all in one large HTML page took a full minute: https://www.gnu.org/software/gawk/manual/gawk.html Is there maybe some anti AI shenanigans going on?

In any case, I find the user guide super interesting. My AWK skills are basically non-existent, so I finally decided to change that. This document is incredibly well written and makes it really fun to keep reading and learning. I’m very impressed. So far, I made it to section 1.6, happy to continue.

⤋ Read More
In-reply-to » @prologic @movq My metadata only has my HTTPS URL. I didn't consider having multiple. I was talking about my config.yaml. Jenny sounds like a good client, so I might give that a try.

@dce@hashnix.club No worries 😌 It’s all documented in our soecs, it’s not such a common thing that we’ve felt the great need to really solve, we’re aware folks want to sometimes have their feed on several protocols, and that’s totally fine™ 😅

⤋ Read More
In-reply-to » What’s Missing from “Retro”: gopher://midnight.pub/0/posts/2679

@movq@www.uninformativ.de having to go to a gopher proxy to see a text document better served on readily available web servers… 🤭, but I digress. Verbatim text:

What's Missing from "Retro"
~softwarepagan
------------------------------------------------------------------
You know, often, when I say I miss older ways of computing or
connecting online, people tell me "there's nothing stopping you
from doing that now!" and they are technicay correct in most cases
(though I can't, for example, chat with friends on MSN ever
again...) However, let me explain that while this type of thing can
*sort of* fill that hole in my heart, it isn't *the same.*

Say, for example, I wanted to connect with others over a BBS. This
wouldn't offer the same types of connections it used to. While
there are BBSes around with active users, they're no longer there
to discuss movies, Star Trek, D&D, games, etc. They're there to
discuss *BBSes.* The same can be said for Gopher, old-school forums
and all sorts of revival projects (such as Escargot, Spacehey,
etc.) Retrocomputing enthusiasts, while they have a variety of
interests, are often in these spaces to discuss the medium itself
and not other topics. This exists at a stark contrast from how
things were in the past, where a non-tech-inclined person may learn
the tech to connect with likeminded others (as I did as a
Zelda-obsessed kid.)

The same can be said of old media. People will say "well, nobody is
stopping you from watching old shows/movies now!" Again, they are
technically correct. I can go home right now and watch *Star Trek:
The Next Generation* to my heart's content. It will never again,
however, be current, or new. When something is new, it serves as a
shared cultural experience. Remember how "Game of Thrones* felt in
the mid-to-late 2010s? Yeah, that.

It's sad. I sustain myself on a mixed diet of old things, new
things, and new things intended for old millenials like me who like
old things. It can be bittersweet. 

⤋ Read More

#Pillow #PIL #Python

DeprecationWarning: 'mode' parameter is deprecated and will be removed in Pillow 13 (2026-10-15) img1 = PIL.Image.fromarray(my_array, mode="RGB")

So I went to see the documentation:

https://hugovk-pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.fromarray

And came out empty handed, that is, couldn’t understand what to do instead :(

And the plot thickens:
https://github.com/python-pillow/Pillow/pull/9063

(@py5coding I guess you’ll want to check this out at some point. py5_tools.animated_gif uses this)

⤋ Read More

#Pillow #PIL #Python

DeprecationWarning: 'mode' parameter is deprecated and will be removed in Pillow 13 (2026-10-15) img1 = PIL.Image.fromarray(my_array, mode="RGB")

So I went to see the documentation:

https://hugovk-pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.fromarray

And came out empty handed, that is, couldn’t understand what to do instead :(

And the plot thickens (this affects many projects, there are some workarounds, but some argument about “reverting” this change allowing some “mode” on import):

https://github.com/python-pillow/Pillow/pull/9063

(@py5coding@py5coding I guess you’ll want to check this out at some point. py5_tools.animated_gif uses mode=“RGB”)

⤋ Read More

#Pillow #PIL #Python
On Image.fromarray():

DeprecationWarning: 'mode' parameter is deprecated and will be removed in Pillow 13 (2026-10-15) img1 = PIL.Image.fromarray(my_array, mode="RGB")

So I went to see the documentation:

https://hugovk-pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.fromarray

And came out empty handed, that is, couldn’t understand what to do instead :(

And the plot thickens (this affects many projects, there are some workarounds, but some argument about “reverting” this change allowing some “mode” on import):

https://github.com/python-pillow/Pillow/pull/9063

(@py5coding@py5coding I guess you’ll want to check this out at some point. py5_tools.animated_gif uses mode=“RGB”)

⤋ Read More
In-reply-to » I have a Python script that transforms the original YouTube channel Atom feed into a more useful Atom feed by removing the spam description and replacing it with the video duration, filtering out videos by title, duration, etc. I just updated it to exclude the damn Shorts garbage more efficiently. Finally, YouTube updated their Atom feed generation, so that the video URL contains /short/ if it's of this useless kind. Never thought that they ever actually will improve their Atom feeds. Thank you, much appreciated!

@kat@yarn.girlonthemoon.xyz @movq@www.uninformativ.de Sorry, I neither finished it nor in time. :-( That’s as good as it’s gonna get for the moment: https://git.isobeef.org/lyse/gelbariab/-/tree/master/rss-proxys?ref_type=heads

The README should hopefully provide a crude introduction. The example configuration file is documented fairly well, I believe (but maybe not). You probably still have to consult and maybe also modify the source code to fit your needs.

Let me know if you run into issues, have questions, wishes etc.

⤋ Read More

How to Mount a Balcony Awning
Hi Kris,

I’ve been reading your website for quite a while. It’s one of my favourite blogs. Thank you for what you are doing!

We are currently experiencing a heat wave in Germany, so I drew inspiration from Low-tech Magazine’s article “ How to Dress and Undress your Home” and built an awning on my balcony. I documented the process so that other readers can install one themselves.

The ov … ⌘ Read more

⤋ Read More

Saw this on Mastodon:

https://racingbunny.com/@mookie/114718466149264471

18 rules of Software Engineering

  1. You will regret complexity when on-call
  2. Stop falling in love with your own code
  3. Everything is a trade-off. There’s no “best” 3. Every line of code you write is a liability 4. Document your decisions and designs
  4. Everyone hates code they didn’t write
  5. Don’t use unnecessary dependencies
  6. Coding standards prevent arguments
  7. Write meaningful commit messages
  8. Don’t ever stop learning new things
  9. Code reviews spread knowledge
  10. Always build for maintainability
  11. Ask for help when you’re stuck
  12. Fix root causes, not symptoms
  13. Software is never completed
  14. Estimates are not promises
  15. Ship early, iterate often
  16. Keep. It. Simple.

Solid list, even though 14 is up for debate in my opinion: Software can be completed. You have a use case / problem, you solve that problem, done. Your software is completed now. There might still be bugs and they should be fixed – but this doesn’t “add” to the program. Don’t use “software is never done” as an excuse to keep adding and adding stuff to your code.

⤋ Read More

[$] Improving Fedora’s documentation
At Flock,
Fedora’s annual developer conference, held in Prague from June 5
to June 8, two members of the Fedora\
documentation team, Petr Bokoč and Peter Boy, led a\
session on the state of Fedora documentation. The pair covered a
brief history of the project’s documentation since the days of [Fedora Core 1](https://lwn.net/Articles/56036/ … ⌘ Read more

⤋ Read More

JPs ‘keep the world ticking’ but are clocking off in larger numbers
Authorised to certify documents such as birth certificates, statutory declarations and wills, justices of the peace provide an important service free of charge. But Victoria does not have enough. ⌘ Read more

⤋ Read More

[$] The importance of free software to science
Free software plays a critical role in science, both in research and in
disseminating it. Aspects of software freedom are directly relevant to
simulation, analysis, document preparation and preservation, security,
reproducibility, and usability. Free software brings practical and specific
advantages, beyond just its ideological roots, to science, while
proprietary software comes with equally specific risks. As a practicing
scientist, I would like to help others—scientists or not—see the … ⌘ Read more

⤋ Read More

Trump Disappeared Them to El Salvador. Now, They’re Being Erased by Immigration Courts.
Isabela Dias,  Reporter  -  Mother Jones

_Stephan: The Trump Gestapo shipped hundreds of men, mostly innocent of any crime except being in the United States without proper documentation, to concentration camps maintained by other countries. Now, the Trump immigration courts are “disappearing” them permanently. Will they ever be released? Maybe when the U. … ⌘ Read more

⤋ Read More

Colorado terror attack suspect charged with hate crime
FBI documents allege Mohamed Sabry Soliman used a makeshift flamethrower and threw Molotov cocktails at a pro-Israel group in an attack he says he planned for more than a year. ⌘ Read more

⤋ Read More

Apple Raises iCloud+ Prices in Three Countries
Apple recently raised prices for its iCloud+ plans in Brazil, Chile, and Peru, according to a support document updated last Thursday.

Image

The table below outlines the price changes in each country.

CountryOld PricesNew PricesBrazil50GB: R$ 4.90

200GB: R$ 14.90

2TB: R$ 49.90

6TB: R$ 149.90

12TB: R$ 299.90
… ⌘ Read more

⤋ Read More

Kristi Noem tells Congress she doesn’t have to follow the Constitution
Oliver Willis,  Staff Writer  -  Daily Kos

Stephan: Almost every day, aspiring dictator Trump and the obedient servants who make up his administration tell America that neither Congress nor the courts has any power over Trump. The Constitution is just a historical document.

Image

_Homelan … ⌘ Read more

⤋ Read More