In terms of all the linux systems I have used, NixOS seemed to least magical to me in terms of what is happening under the hood.
Simple package based distros like Arch basically just extract archives. Very few packages trigger post-install steps which usually just (re)generate something like initrd.
Afaik, bricking Ubuntu is either due to user error (e.g. mixing incompatible package sources) or the devs released broken/buggy packages...
In my career I've found that if languages don't allow developers to shoot themselves (and everyone else) in the foot they're labelled toy languages or at the very least "too restrictive". But the moment you're given real power someone pulls the metaphorical trigger, blows their metaphorical foot off and then starts writing blog posts about how dangerous it is.
One must keep in mind that devs manage to implement even flawed logic that is directly reflected by the code. I'd rather not give them a non-thread safe language that provides a two letter keyword to start a concurrent thread in the same address space. Insane language design.
I am the healthiest I've ever been in my adult life thanks to Covid.
fn doSomethingFallibly() -> SameVal | Error
SomeVal x = ...;
if failed:
return Error
else
return x
fn doTheThing() -> void
match doSomethingFallibly():
SomeVal x: /* use x */
Error: /* log the error */
To the utterly unreadable exception-based implementation: fn doSomethingFallibly() -> SameVal, except Error
SomeVal x = ...;
if failed:
raise Error
else
return x
fn doTheThing() -> void
try Someval x = doSomethingFallibly()
/* use x */
except Error: /* log the error */
This is especially egregious if you want to propagate the error. For the error variant case you can use a beautiful monadic solution fn doTheThing() -> void|Error
SomeVal x <- doSomethingFallibly()?
While the exception based variant completely obscures the control flow: fn doTheThing() -> void, raises Error
SomeVal x = try doSomethingFallibly()Java already went in the right direction with distinguishing errors from exceptions and having "checked" (that you cannot ignore) exceptions, but the implementation of those concepts sucks. Also, generics, which allow the implementation of "sum types", came later and so sum types were never established as the way to do error handling.
The way a doctor explained it to me is blood rushes to the digestive system after we eat and, while normally bodies compensate for that via increased blood pressure (vasoconstriction and heart rate increase), for some people that process doesn't work well and they get a blood pressure drop instead.
[1] https://academic.oup.com/biomedgerontology/article/60/10/126...
Try 16/8 intermittent fasting and a healthier, more balanced diet and walking for a few minutes after meals and you will feel like a new person. After meals you will feel energized and awake.
This reminds me of the classic joke that all probabilities are 50/50. Either a thing happens or it doesn't.
Comparing with Asia (Hong Kong, Singapore, Malaysia) and certain EU countries (Vienna, Netherlands, etc.), it just shocks me how much people need a car for everything. Even a visitor needs to rent a car to properly go about their business.