So, I’ve noticed this tendency for Python devs to compare against C/C++. I’m still trying to figure out why they have this tendency, but yeah, other/better languages are available. 🙃
So, I’ve noticed this tendency for Python devs to compare against C/C++. I’m still trying to figure out why they have this tendency, but yeah, other/better languages are available. 🙃
Yes, but also community rewrite of the Morrowind engine, to make it even more better: https://openmw.org/
Admittedly, some changes might make it use more resources, for example it’s got basically no loading screens, because nearby cells get loaded before you enter them…
Oof, so I came to Linux also with a history of Android Custom ROMs. And well, I had quite a bit of frustration, because my phone was so much more capable and customizable than my (Windows) desktop.
In that regard, Linux has been an absolute fucking delight. And it kind of took Android’s place, in that I now prefer tinkering with my desktop and am frustrated with how incapable Android is.
If that sounds like something you’d be interested in, I have one recommendation to make:
You want something with KDE Plasma as the desktop environment. It’s extremely customizable, extremely feature-rich. Other desktops, as well as more minimal GUIs (“window managers”), can be fun, too, but for starting out, I would recommend KDE.
If your Tumbleweed looked like this, that was KDE:
Well, kind of the default for both Bazzite and Garuda is KDE, so this doesn’t tell you terribly much. 😅
But I’m coming at it in this roundabout way to tell you that I’m on Tumbleweed and well, therefore I’m probably biased, but I don’t really see why you’re looking for something else, if you liked Tumbleweed.
openSUSE has the best implementation of KDE (by some fine details, but still). It’s got a really nice snapshotting system (btrfs for the filesystem + Snapper).
Garuda seems to have adopted that from openSUSE, although I don’t know, if it’s quite as fully integrated in Garuda.
Those snapshots will save you, if your system should ever break.
Basically, if your filesystem and bootloader are still intact, there’s a pretty easy way to rollback: https://doc.opensuse.org/documentation/leap/reference/html/book-reference/cha-snapper.html#sec-snapper-snapshot-boot (should work the same on Garuda)
But yeah, I would kind of recommend against Bazzite due to it being a relatively new concept (with the caveat that I haven’t dabbled around with it yet; I simply wouldn’t know, if it’s actually already very mature).
I should also say that I actually lied, I’m not on Tumbleweed, but rather Slowroll, which is a semi-official flavor of openSUSE. It’s essentially Tumbleweed, but you get one big upgrade once per month and only security updates in between. While the snapshots can easily rollback the breakages, eventually I got mildly annoyed at having to do so once or twice per year on Tumbleweed, when a bad update made it through, so I’m trying out Slowroll. Might be an option for you, too.
And finally, if you feel like I’m coddling you a lot less in this comment than in the last: Yep.
Since you’re dicking around with Android Custom ROMs, you’ll be fine, no matter what you choose. I mean, Linux will still be a humbling experience, because it has no qualms showing you how much you don’t yet know about computers, but it also loves to teach you. The most important ‘skill’ is having fun when tinkering with technology, which you’ve got.
A lot of the newbie recommendations, and that people tell you Tumbleweed is hard to use, are like that, because we just don’t know who’s asking these questions. Some people want to get away from Windows, but have no interest in learning. And then, yeah, I’ll also sometimes recommend Linux Mint, because its keyboard shortcuts are exactly like Windows, even though it actively got in the way of my desire to tinker, when I initially switched to it…
They’re certainly somewhat more exotic choices.
Bazzite is currently seeing a hype wave, because it’s strongly inspired by what the Steam Deck does. But that also means, it’s somewhat built like an OS for a console (or in fact like Android), in that it’s a transactional/atomic distribution.
This means, you can’t easily make changes to the OS itself, only to the applications you install and of course your personal files.
It certainly makes it more difficult to break, but it’s still a relatively new thing in the Linux world and particularly you might still run into some limitations when trying to use it as a full-fledged desktop (depending on what you’re looking to do with your PC).
Garuda Linux is based on Arch Linux, which is what we refer to as “bleeding edge” (as opposed to “cutting edge”), because you get the newest version of all the software on your PC just a few days after it got released by the respective developers. Sometimes, those newest versions will have bugs.
You’ll find folks who’ll tell you they’ve been running Arch since they were two years old and never had a problem, but ultimately, why risk it?
And yeah, Trisquel is also getting basically a hard no from me. It’s a distribution for purists. For people who want nothing to do with the corporate world, who’d rather not be able to do something than rely on proprietary software.
If you’re coming from Windows, the chances of you even really knowing what that means are basically non-existent, so I doubt it’s what you want…
That’s “Nemo”.
The one that’s used by Ubuntu by default is called “GNOME Files” or “Nautilus”, in case you want to do some research on it.
Probably KaOS. It puts a strong focus on KDE and Qt.
As in, it doesn’t package programs using different GUI toolkits, aside from the most popular, like Firefox and GIMP. When I tried it a few years ago, you also had to enable a separate repo to get access to these.
I feel like the Enlightenment desktop environment isn’t to everyone’s taste. It’s definitely got some idiosyncratic design choices…
Well, most people don’t have spare computers at home, so they do actually need to decide. It also means that they can’t easily try out different operating systems, so even when they’re unhappy with their current OS, they’ll rarely inform themselves about alternatives.
Yep, some code examples from the official documentation. This:
printPersons(
roster,
(Person p) -> p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25
);
…is syntactic sugar for this:
interface CheckPerson {
boolean test(Person p);
}
printPersons(
roster,
new CheckPerson() {
public boolean test(Person p) {
return p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25;
}
}
);
…which is syntactic sugar for this:
interface CheckPerson {
boolean test(Person p);
}
class CheckPersonEligibleForSelectiveService implements CheckPerson {
public boolean test(Person p) {
return p.gender == Person.Sex.MALE &&
p.getAge() >= 18 &&
p.getAge() <= 25;
}
}
printPersons(roster, new CheckPersonEligibleForSelectiveService());
The printPersons
function looks like this:
public static void printPersons(List<Person> roster, CheckPerson tester) {
for (Person p : roster) {
if (tester.test(p)) {
p.printPerson();
}
}
}
Basically, if you accept a parameter that implements an interface with only one method (CheckPerson
), then your caller can provide you an object like that by using the lambda syntax from the first example.
They had to retrofit lambdas into the language, and they sure chose the one hammer that the language has.
Source: https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
Since you’re blocking Mozilla domains, my first thought was that it might have to do with the automatic malware checks for downloaded files. But the knowledge base article says it only checks executables, and it doesn’t sound like it tries to contact a Mozilla server either.
But yeah, maybe you want to try turning that off in the settings for debugging either way.
The other suspicion is immediately Snap, primarily because I’ve seen quite some brokenness from Snap Firefox already.
You can try downloading the non-Snap version from the webpage directly: https://www.mozilla.org/en-GB/firefox/all/desktop-release/linux64/
That’ll give you a .tar.bz2
, which you just unpack and run the firefox
binary inside.
If it works there and you want to permanently switch, you probably want to use Mozilla’s APT repo: https://support.mozilla.org/en-US/kb/install-firefox-linux#w_install-firefox-deb-package-for-debian-based-distributions-recommended
I always hated the implementation for .toString()
of Duration
. It gives you a string like that: PT8H6M12.345S
(not a hash)
Apparently, it’s an ISO 8601 thing, but what the hell am I supposed to do with that?
It’s not useful for outputting to end users (which is fair enough), but I don’t even want to write that into a log message.
I got so used to this just being garbage that I would automatically call .toMillis()
and write “ms” after it.
Well, and not to gush about Rust too much, but I recently learned that its debug string representation is actually really good. As in, it’s better than my Java workaround, because it’ll even do things like printing 1000ms as 1s.
And that’s just like, oh right, libraries can actually provide a better implementation than what I’ll slap down offhandedly.
It makes it look like they’re just adding random noise to avoid colliding with existing syntax. Maybe they can try a UUID next time…
Yeah, I came to Rust from Scala and Kotlin, where equality is default-implemented (for case class
and data class
respectively, which is basically all we ever used), so this meme surprised me a bit.
I do actually like that you can decide a type cannot be compared, because sometimes it really just doesn’t make sense. How would you compare two HTTP clients, for example? But yeah, it certainly is a choice one can disagree with.
I find these videos give a very visual explanation and help to put you into the right mindset: http://intorust.com/
(You can skip the first two videos.)
Sort of when it clicked for me, was when I realized that your code needs to be a tree of function calls.
I mean, that’s what all code is anyways, with a main-function at the top calling other functions which call other functions. But OOP adds a layer to that, i.e. objects, and encourages to do all function calls between objects. You don’t want to do that in Rust. You kind of have to write simpler code for it to fall into place.
To make it a bit more concrete:
You will have functions which hold ownership over some data, typically because they instantiated a struct. These sit at the root of a sub-tree, where you pass access to this data down into further functions by borrowing it to them.
You don’t typically want to pass ownership all over the place, nor do you typically want to borrow (or pass references) to functions which are not part of this sub-tree.
Of course, there’s situations where this isn’t easily possible, e.g. when having two independent threads talking to each other, and then you do need Rc
or Arc
, but yeah, the vast majority of programming problems can be solved with trees of function calls.
The first iteration of the Rust compiler was written in OCaml…
It’s like back in the 80s, when games had amazing hand-drawn covers and then the graphics was just text or simple shapes, but now with gameplay.
It’s a survey for what the Mozilla Foundation should be focussing on. Firefox development happens at the Mozilla Corporation (which is a subsidiary of the Foundation, but operates pretty independently).
Hmm, I don’t know anything about Whoogle, but from other privacy-conscious search engines, I would expect it to work when you use that URL in your bookmark.
Three things I can imagine:
You don’t want to use exceptions in normal control flow, because they’re extremely slow. Every time you throw
an exception, it has to collect a stacktrace, which is hundreds, if not thousands, of calculations, compared to a handful of calculations for returning a boolean or an enum variant.
There’s a slider to apply a global scale multiplier in the System Settings under “Display & Monitor”. So, if you set it to 200%, everything will be twice as big.
As for making a distro gaming-ready, honestly I think that’s a bit overpronounced on the webpages of Bazzite and Garuda. It’s one of their distinguishing features, so that’s what they’ll talk about, but I’d be surprised if we’re talking 5 FPS more compared to a general purpose distro.
They generally use the same software and both of them are tuned for performance, with only a slightly different focus when they’ll perform the most optimal.
Yeah, I don’t know what concrete difference zstd makes. The Arch Wiki (great resource, generally applicable independent of distro) tells me that compression may speed up some workloads while slowing down others: https://wiki.archlinux.org/title/Btrfs#Compression
Maybe Garuda found out that it mostly helps with gaming when openSUSE decided to not make use of it, because openSUSE is more general-purpose.
But yeah, I don’t know, if you’re feeling Garuda, then go for it. At this point, you could tell me that you merely like the theme of Garuda better and I’d support that decision, because what I’ve read about it does sound reasonable, and it sounds like you’ll be fine either way.
Not entirely sure what you mean by macros, but: Yes.
The whole OS is built from the ground up to be scriptable and configurable. It’s very likely better than you can imagine.