1,889 karma · joined November 25, 2022
- physically block the hot plug detect pin on all of your display cables. Now you can turn off your monitor!
- PersistentWindows (slow to put everything back, jumps around virtual desktops)
Bonus points for everything related to 'windows' and 'virtual desktops' being un-googleable terms.
If you mount two of them like a gyroscope, inside a spherical opening, the planes could overlap into a target-able beam.
Roughly once every two weeks, here.
The big problem is when cheating is so easy and widespread that everyone knows it. Then it becomes the low friction path. This would explain what I've heard about some Indian school exams.
There are probably a lot of people doing minor cheating and a few people doing major cheating. In most cases, it's not enough to undermine the reputation of the qualification.
Oh, it's the same shape as the fraud problem that's popular here:
https://www.bitsaboutmoney.com/archive/optimal-amount-of-fra...
Oops, null smart pointer.
Oops, UB made my reference null.
Oops, invalidated iterator.
Oops, aliased pointers.
Oops, race condition.
Oops, recursion.
Oops, moved-from object is partially formed.
Your OS emulates. The companies that made the chips you run them on emulate their own hardware. The company in the headline emulate their own video game hardware and sell it to their customers.
So you write the code with algorithm X. You potentially might not know the complexity, depending on how extreme you are with this philosophy, but let's say it's O(n^2). You run it on your test data. It's too slow because of some unneeded deep copies. You change that. Now it's fast enough. It gets merged.
3 years later, you're experiencing integration test failures, because scaling up your system has caused this algorithm to make things time out. No problem: you'll simply look into it and optimise it. Except you can't. Thanks to leaky abstractions, threading-models, or just an inherent quality of the code, changing this algorithm to something with a lower complexity becomes a major refactor. Pray you don't have external APIs or stakeholders depending on it.
So, not only have you wasted the time polishing the O(n^2) algorithm, you also now have a huge technical debt from what can simply be described as inadequate forethought.
The 'simple code now, polish later' process - which is really just 'move fast and break things' in a different shade of paint - means you never learn to internalise the easy wins. It also paradoxically portrays optimisation as both too complex to do initially but trivial to do later. It's not the latter. Having a good gut-feeling of algorithms or the Kafkaesque way memory works is not something that is learned over the course of a JIRA ticket - it's learned over the course of years, treated as any other code-quality concern. For comparison, you could close many tickets quickly by using a global variable to pass data around. But you don't. You make sensible, idiomatic changes to make sure things are stored and accessible where makes sense. Optimisation is the same: there is a lower bound below which it's unacceptable, even if it's not something that fails requirements.
StructuredProgrammingWithGoToStatements was written in 1974. It doesn't track well to modern computing models. I have more L1 cache than he had main memory. I do accept that the vast majority of bugs were from this, 50 years ago. I don't accept that's still true today. It's still a useful thing to teach new learners so they learn how to prioritise their development but as professionals creating novel things we need to have a certain level of planning ahead. And pride.
It's also a tautology. If the optimisation is worthwhile, it's not premature. If the optimisation is noncritical, it's premature.
My example above is not fanciful, by the way. Off the top of my head, Windows, Python and C++ all had/have trouble with some performance loss due to the fallout from earlier decisions and difficulty rectifying it once the world is built on top of it. I've run into similar problems at my own jobs, particularly anywhere that uses microservices. You can't avoid all of these but you should avoid those you can.
spoiler: it isn't
You're also welcome not to buy a phone for your parents. It would be disingenuous for me to suggest you actually do so, because we all make choices under duress or with limited options.
The TAM is saturated. Taking share from Android is difficult. Making more humans use smartphones is difficult. Making more humans is difficult. Extracting more rent is not. So the idea that the security is more important for future revenues than the ability to exploit the userbase doesn't hold up, particularly when there isn't and can't be an alternative with a different security model.