Since no one mentioned it yet, this is the classic card game “Klondike”.
KPatience is a program that implements multiple such card games…
Since no one mentioned it yet, this is the classic card game “Klondike”.
KPatience is a program that implements multiple such card games…
Hmm, good question. I know of one such implementation, which is Delta RPM, which works the way I described it.
But I’m not sure, if they just designed it to fit into the current architecture, where all their mirrors and such were set up to deal with package files.
I could imagine that doing it rsync-style would be really terrible for server load, since you can’t really cache things at that point…
Had to search for a bit, too, but finally found the relevant keyword: Delta RPMs
(Which also explains why it’s a Red Hat / SUSE thing. 😅)
Here’s a decent article, which links to some more in-depth explanations: https://www.certdepot.net/rhel7-get-started-delta-rpms/
This doesn’t work too well for rolling releases, because users will quickly get several version jumps behind.
For example, let’s say libbanana is currently at version 1.2.1, but then releases 1.2.2, which you ship as a distro right away, but then a few days later, they’ve already released 1.2.3, which you ship, too.
Now Agnes comes home at the weekend and runs package updates on her system, which is still on libbanana v1.2.1. At that point, she would need the diffs 1.2.1→1.2.2 and then 1.2.2→1.2.3 separately, which may have overlaps in which files changed.
In principle, you could additionally provide the diff 1.2.1→1.2.3, but if Greg updates only every other weekend, and libbanana celebrates the 1.3.0 release by then, then you will also need the diffs 1.2.1→1.3.0, 1.2.2→1.3.0 and 1.2.3→1.3.0. So, this strategy quickly explodes with the number of different diffs you might need.
At that point, just not bothering with diffs and making users always download the new package version in full is generally preferred.
openSUSE Leap does have differential package updates. Pretty sure, I once saw it on one of the Red-Hat-likes, too.
But yeah, it makes most sense on slow-moving, versioned releases with corporate backing.
It shows up as “Terminal” in the search results, so I imagine that’s what it matches against, even if it is colloquially referred to as “Windows Terminal”…
On KDE, it’s just one of the suggestions, I believe, that you could search this term on the web. If you trigger that suggestion, it then opens the web browser to do the search.
As such, searching “terminal” wouldn’t yield a suggestion from a web result that matches, but I’m pretty sure applications are prioritized above other results either way.
A few years ago, I set up a home-server with music and some pictures on there, and recently I noticed that my storage disk was getting full. Then I saw that the disk only had 16 GB and wondered, where the hell I got that small of a disk from.
So, I go to plug in a bigger disk and can’t even find the original disk at first. Turns out my whole storage capacity was one of these bad boys:

And yeah, I’ve got about 1800 songs, clocking in at 5.8 GB, so even that tiny storage would easily be enough for a much larger collection.
And I do also have them replicated on my phone, for listening on the go. (Don’t even need an SD card in my case.)
Presumably, that ampersand needs to be replaced with &…


Man, at $DAYJOB, if we open-source something, they tell us to check for checked-in passwords and whatnot, and force us to throw away the commit history, which always feels stupid when we’ve known upfront that we’re going to open-source it and so kept things clean from the start.
But then, yeah, you see a post like that and just think that it really wouldn’t have been too difficult to search for swear words before publishing.
I mean, I also don’t really care, since it’s code rather than an official communication channel, but I can understand why management might care.
The description in the ticket isn’t too bad:
allows users to make a window disappear and keep only its title bar visible.
It really just hides the window contents. In effect, it is similar to minimizing a window, except that it doesn’t spring into your panel and rather stays in place as just the window title bar without the contents.
It is a niche feature, if you couldn’t tell. But it isn’t some KDE specialty feature; various other desktops and window managers also support it. I think, it was more popular in the early days of graphical user interfaces, when we were still working out, how we want to do panels and such.
And conversely, I do think it makes more sense as a feature on big screens like you can have today, where your panel might be quite a bit away.
Don’t think, window shading will make a big comeback just yet, but yeah, probably enough existing users that use it, so that it would be cool to support that workflow.


One time, I had to request firewall access for a machine we were deploying to, and they had an Excel sheet to fill in your request. Not great, I figured, but whatever.
Then I asked who to send the Excel file to and they told me to open a pull request against a Git repo.
And then, with full pride, the guy tells me that they have an Ansible script, which reads the Excel files during deployment and rolls out the firewall rules as specified.
In effect, this meant:
Yeah, the whole time I was thinking, please just let me edit an Ansible inventory file instead. I get that they have non-technical users, but believe it or not, it does not actually make it simpler, if you expose the same technical fields in a spreadsheet and then still use a pull request workflow and everything…


They have breaking changes in their minor versions…


Personally, I find that (complex) software implemented in Python tends to be so unreliable that I typically don’t want to use it after all, but I only find that out after wasting a bunch of time learning the software.
It’s just frustrating, especially if I come back to the software every so often, naively thinking that it’s been a few versions, so maybe they’ve fixed it. It’s always just different bugs, which still end up being too frustrating to use the software.
To give an example, I like to compose music using Lilypond, which is more-or-less a programming language to create sheet music. And there is a program that’s supposed to give you a well-integrated workflow for that (i.e. an IDE), called Frescobaldi.
The first time I tried it, playback of the composed music wouldn’t work.
The second time, I couldn’t click on notes to jump to the respective code snippet.
And I tried it again a few weeks ago and it just crashed immediately with an obscure error message.
Instead, I’ve slapped together a script, which just opens the sheet music in my PDF viewer, the code in my normal editor and then uses a CLI tools to generate and playback the sheet music. And while it’s definitely not perfect, it has been working more reliably for me than Frescobaldi ever has.
They just dumped them there in the 60s and 70s before there was regulation…
Edit:
Here’s two links, if you want to read up on it:
Waterfox. It started out as a 64-bit build of Firefox for Windows, back when Mozilla didn’t offer that yet. These days, I believe, it just offers a few different defaults…


I’m currently prototyping a macro to help reduce boilerplate, as part of a more general library. And I’m doing some wild shit, like defining the fields of a data type from the parameter list of a function.
But then, yeah, what I’m now stuck on is that my generated code references a data type under one name, but it’s actually got a different name in the public API. All the wild shit was smooth sailing, but a technicality now fucks me over. 🫠


Sure, but as it happens with multiplayer games, you typically have a friend group that plays a certain game. Getting all of them to switch to another game can definitely be a problem.


Eh, it’s gonna depend on your taste in games. If competitive multiplayer games are your thing, then it is a problem. But sure, there’s lots of people who have zero interest in competitive multiplayer.
Lots of “modern” languages don’t interop terribly well with other languages, because they need a runtime environment to be executed.
So, if you want to call a Python function from Java, you need to start a Python runtime and somehow pass the arguments and the result back and forth (e.g. via CLI or network communication).
C, C++, Rust and a few other languages don’t need a runtime environment, because they get compiled down to machine code directly.
As such, you can call functions written in them directly, from virtually any programming language. You just need to agree how the data is laid out in memory. Well, and the general agreement for that memory layout is the C ABI. Basically, C has stayed the same for long enough that everyone just uses its native memory layout for interoperability.
And yeah, the Rust designers weren’t dumb, so they made sure that Rust can also use this C ABI pretty seamlessly. As such, you can call Rust-functions from C and C-functions from Rust, with just a bit of boilerplate in between.
This has also been battle-tested quite well already, as Mozilla used this to rewrite larger chunks of Firefox, where you have C++ using its C capabilities to talk to Rust and vice versa.