555 karma · joined December 11, 2020
You can Linux all you want, I prefer Mac and I have done Linux extensively.
Why are you like this?
I would LOVE for this to be the case, however. Adding this again so that I am not lumped together with the coal thumpers.
What exists, TO BE BUILT that is, is battery farms, sure, but they are nowhere nere big enough. They are nowhere nere close enough to compensate the factor applied to wind farm energy generation. But let's hope good progress can be made in the accumulation aspect of intermittent energy production.
And no, I have no problem with renewables either.
If your conclusion from reading what you said is this, then you did not read because I said the exact opposite.
The main problem of renewables is that it is intermittent and that fact remains to be solved. I want this solved or at least improved because it is the bottleneck. In fact, it is such a bottleneck that its energy generation factor is noted as 1:10, i.e.: a power plant rated at 100MW, registers as 10MW in comparison to nuclear and hydro (and obviously coal and gas.) So this means that to add a 1MW worth of energy generation to the grid, 10MW must be built.
Another problem that hits wind farms is that when there's wind blowing somewhere, it tends to blow everywhere, or some large area. So suddenly there is too much energy want to flow in to the grid which hits the core of the problem with grids at this point because energy that is inserted into it, must be extracted to the exact same magnitude at the same time. So a 100GW demand must be met by 100.0GW production. Now if 110GW is produced, something _MUST_ consume it, so there are two choices:
1. make someone consume it, i.e., sell it to them. They have to buy it so the price will drop until there are enough buyers and this does not stop at 0, prices will go in to the negative. So the market will pay you to use electricity. The market. Or:
2. shut off the power plants until we are back at 100GW (or whatever can be met by consumption.)
3. there is also a catastrophic third option. If you have a situation where too much energy (read power if you want to) is inserted into the grid, then its frequency will rise, this damages the infrastructure and connected consumers, so they will get disconnected. Read large and broad power outages. These situations are also non-trivial to recover from. I.e.: to "restart the grid" afterwards. See what happened in Spain last(?) year.
How do you run a power plant in a market that demands payment to accept the energy you want to sell? You cannot. So this is the windfarm paradox, feel free to compare to Russel's paradox. It goes something like this:
A windfarm makes money whenever the wind blows because only then does it have energy to sell.
A windfarm cannot make money whenefer the wind blows because then the market price goes to zero.
So a windfarm makes money when the wind blows and does not blow at the same time.
To solve this problem, energy consumption must be made capable of also being intermittent. Either run "factories" intermittently, which might very well be part of the solution. And/ or, have huge accumulation capacity in the grid that can swallow the over generation.
TLDR: renewables is the easy answer but very hard thing to do. The hard answer is the one I have given, together with getting more nuclear going which is difficult and expensive. But.. what can we do?
"[...] pure functional programming whilst still functioning."
I mean, what is this?
When I read what you are saying here, you are saying that an "advanced codebase", whatever that means, using functional programming leads to centralized state and distributed components. And you know this because the codebase you are thinking about has this software architecture.
I have been in such codebases too, they tend to be frontend and maybe that is just the way you have to do it, maybe not. But this is not a property inherent to functional programming. Solving problems with a component or object concept as a central abstraction for "a thing" is the OOP way. I know this because this is how I spent the first half of my career. You think you need a _substantive_ onto which you perform verbs. Nothing wrong with this though, I am not picking a fight with OOP.
I can offer what I refer to when I talk about FP so that we can at least have a real thing to disagree over :)
1. model the domain and interactions with it with strong types such that neither interactions nor state can represent values outside of the domain.
2. parse, don't validate
3. Use modules, stateless collections of declarations, to organize stateless functions. No this. No self.
4. No magic code. I.e.: no null checks, no magic number checks, no arbitrary logic in four places that together make up the fact that prices can have taxes. Abstract it and "store" these runtime decisions using typed values, use functions that accept these typed values to force use of the aforementioned types.
5. Control the side effects. This does not mean that you have to use Haskell or monads or anything like that. Just that managing it is a good thing.
6. #5 implies keeping track of state. I.e.: no, you may not just willy-nilly read it from the persistent store, cache or file.
What you are describing is OOP. Passing messages between identities over calling pure functions with values.
But I claim that Rust is actually a high level language. Higher level than Java. My argument is that in Rust (, F# and Scala) you can encode in structure, what has to be operational code in Java.
So in the stronger languages you can reason about larger swaths about domain concepts easily, whereas in Java you have to trust the test panel on faith and wade through deep sections of "magic code" (compare with magic numbers. Why is there a 427/ these 7 lines of logic here? What does it do?)
Scala is not doing great, probably because they took too long to get 3 finished and good.
Yes. Companies are going back to Java because this is what all the convervative guys and girls want to use. That fact is what I am criticizing. You want fast horses, you don't want nice things.
So now you have Maven, semi-typed code intermingled with container logic because you cannot abstract over anything, you have millions of lines of impenetrable tests. Just like we all did in 2006. You all love this because learning things is not your forte :) That other stuff is for academics and niche.
But sure, with AI, maybe this will matter less because people don't care about the code anymore.
This is why we can't have nice things.
Java with Streams and "functions" is a lot better than what I left behind 15 years ago. But it is still extremely primitive compared to what F#, Rust and Scala offers. And I know this because I have spent 10+ years EACH using all of these in anger. So 20+ years.
But in this context I feel that partial solutions are offered as alternatives to more complete ones. I.e.: if holes in your trousers is of no concern, then having tools to avoid that is of no value.
Not picking on C here, as already mentioned, it is a wonderful language.
I would on the contrary say that adding extra static checking deducts from the _actual_ complexity of the domain and its application.
In Rust the compiler is going to have a problem with your code unless you are explicit about borrowing/ ownership, gcc won't care. Which is the more complex thing there?
Same goes for the polymorphism. Looking at languages without parametric polymorphism, you instead see casts and inheritance trees. Not picking on old Java here, but is this more or less complex?
Let's talk some about unsafe as well. In C or C++, for instance, there is a global unsafe surrounding all the code, so if someone has problem with unsafe, why would they pick on Rust where "unsafety" is optional?
Same goes for unwrap. Unwrap is basically a deref combined with a _safe_ crash if the deref was not successful at runtime. Do that in an unsafe language and you have an access violation best case. Or just silent corruption. Which is more complex?
What do you mean by complexity in this context and in what way does Rust carry a lot of it?
This is honestly not intended to pick on C++ as a Rust fanboy, however. It really isn't.
For instance, to be a little unpolished, I would shrug off the unwrap incident as doing it the C++ way and pretending that the complexity does not need to be solved right then and there because ItShouldNotHappen or IKnowWhatIAmDoing.
I prefer Rust over C++, but I do not hate C++. This isn't even about C++ anyway.
When it comes to out of control dependency trees, I agree with you. But there is a trade off here too and that is that either you implement the thing or you externalize it. I use both approaches myself and am in no way excusing anything or attempting to be Rust's defense lawyer. There definitely seems to be a leftpad-problem brewing in the Rust community.
I say this as someone with 3 decades of professional experience. That does not make me right, please do tell me that I am in fact wrong! It does mean that I might be one of these guys with positions that should be challenged, however.
You know what? I welcome this. Explain to me why I am wrong, let's do it your way, dear youngin!