OK, so what else is there to learn?
1,464 karma · joined June 26, 2013
OK, so what else is there to learn?
Of course there are duplicate features, that's an obvious downside to keeping backward compatibility while still allowing improvement.
If two equivalent/overlapping features were introduced in the same C++ version, then, yes it would be an indicator of a faulty design process.
The good news is that we don't need to change the H.264 standard for this.
Supposing that:
- most of the already deployed embedded H.264 decoders support 4:4:4 profiles
- non-chroma-downsampled input content is available
Then, it's only a matter of changing encoder implementations to do exactly as you say.
- run fast (<10s)
- run on your local machine
- run on your local code (including uncomitted diffs)
... whether they're called "integration" or "unit" tests doesn't matter, as they will detect regressions at the earliest possible time.
Unit tests might guarantee smaller code search area (because maybe the failing test only executed 1% of the code), but if running "git stash" makes all the tests pass again, I have a pretty good confidence about where the error lies.
It's the same for almost all hardware: graphics cards, sound cards, all use their own register map (which, to make the matter worse, is often kept secret). Even USB stuff, which is supposed to be already homogeneized (i.e USB classes) often requires sending vendor-specific "quirk" strings to get the hardware working (e.g the list of 'quirks' in the snd-usbmidi Linux kernel module).
The hardware diversity isn't a detail here. It's the root of the "too many abstractions" problem, and I don't think this is something you can avoid. This is why device drivers exist. This is why operating systems try hard to impose APIs on device drivers (ALSA, Direct3D, etc.) so Firefox, MS Word, Half-Life ... can run on future hardware.
This is one reason why the abstraction layers exist (I'm not even talking about memory protection / safety here) : because you don't want to re-release your app every time some vendors makes a new sound card, graphics card, MIDI interface, wi-fi chip, etc. And you don't want to code the support for all this hardware yourself.
- reformat the whole codebase
- build (if needed, e.g a C++ project)
- run all tests
The programming workflow is then:
- edit code
- run the 'check' script
- repeat.
If adding stuff to the end of a class or of an argument list is your most frequent case, you might have a software design problem.
I would love that you be right. And by far, I strongly prefer physical media.
However, physical media is no guarantee either.
- Sometimes, the pain is on purpose: some apps require an online activation, and the corresponding service, 30 years later, is not available anymore.
- Sometimes, it's a lack of foresight from the developers (i.e overzealous Windows version checks, refusing newer versions).
- Sometimes, it's plain dumb stupidity (the installer is a 16-bit windows executable).
If you're not convinced, I suggest you try installing, say, Wipeout XL (for Windows 95) on a recent laptop (spoiler: at this point it's easier to play the PSX version on an emulator).
It necessarily implies some loss of control over the code you (or somebody else) wrote, i.e you're not sure anymore of what the program does - otherwise, you wouldn't be debugging it, right?
If you get into this situation, then indeed, firing up a debugger might be the fastest route to recovery (there are exceptions: e.g sometimes printf-debugging might be more appropriate, because it flattens time, and allows you to visually navigate through history and determine when thing started to went wrong).
But getting into this situation should be the exception rather than the norm. Because whatever your debugging tools are, debugging remains an unpredictable time sink (especially step-by-step debugging, cf. Peter Sommerlad "Interactive debugging is the greatest time waste" ( https://twitter.com/petersommerlad/status/107895802717532979... ) ). It's very hard to estimate how long finding and fixing a bug will take.
Using proper modularity and testing, it's indeed possible to greatly reduce the likelihood of this situation, and when it occurs, to greatly reduce the search area of a bug (e.g the crash occurs in a test that only covers 5% of the code).
I suspect, though, that most of us are dealing with legacy codebases and volatile/undocumented third-party frameworks. Which means we're in this "loss-of-control" situation from the start, and most of the time, our work consist in striving to get some control/understanding back. To make the matter worse, fully getting out of this situation might require an amount of work whose estimate would give any manager a heart attack.
Sharing syringes (e.g between drug users).
Because as soon as they have, they stop being interesting.
My guess: because it has very low precedence, allowing stuff like:
> cout << a + b * c << " is the result\n";
Instead of:
> cout << (a + b * c) << " is the result\n";
Is there any sensible thing to do when this exception is caught, appart from halting the program? If the answer is "no", why have an exception at all?
Is consciousness different from self-awareness? Because we're already using an experimental protocol for testing self-awareness in animals.
How could a C64 port of a NES game released more than 30 years ago could threaten any sale of anything ?
... which makes past-tense release notes "team-centric". In other words, past-tense release notes are about justifying the work that was done (like some kind of work report), rather than being an exhaustive list of changes in the application behavior brought by a new version.
> If commits are written in the past tense and from the user's point of view they can be used pretty directly to create the release notes.
Bad idea IMHO.
Making developers worry about their commit messages potentially being used "pretty directly" as release note lines seems dangerous:
- It implicitly convey the idea that commits and release note lines should have the same granularity. This might be true in some cases for programming error fixes, but it's generally not for features.
- What about confidential stuff? commit messages are going to get a lot less informative if there's technically relevant stuff that programmers can't mention anymore (like the names of other customers, the yet-to-be-announced next product, etc.).
But the point was that Mozart didn't need to be rich to do great music.
Whether he deserved to be rich is another question (more related to morale than economics).
Don't forget the orchestra. Unless you consider it to belong the "live band" category :-)
I suspect the "bad" argument is actually compatible with division of talent and labour. Could you explain the link between this division and income?
> You wouldn't apply it to physicists, engineers, medical specialists, lawyers, politicians [1], financial experts, sports, or software developers. > So why is it fine to apply it to an art?
Because history shows us that "some" art gets done, even when no money is directly involved. And actually, it's the same for physicists, engineers, sports, software developers - not sure about lawyers, policitans, or financial experts.
Now we have to ask ourselves: for all these domains, what's an acceptable amount for "some"?
"Calling a function with parameters is just another form of synchronous message passing, either by-reference or by-value [...] But yes, we already have message-oriented programming languages—if you squint the right way"
Is it also harder for human drivers?
Could you please give an example of this?
Beware of arguments like "had it been free software, it couldn't have been monetized it as it was": this reasonning presupposed a fixed set of business models, and doesn't account for the emergence of new ones (e.g online games with subscription, "free-to-play" games, etc.).
$(BIN)/%.cpp.o: %.cpp
$(CXX) -c $(CXXFLAGS) "$<" -o "$@"
@$(CXX) -c $(CXXFLAGS) "$<" -o "$@.deps" -MP -MM -MT "$@"
-include $(shell test -d $(BIN) && find $(BIN) -name "*.deps")Very interesting article here: https://www.gamedev.net/blogs/entry/2265481-oop-is-dead-long...
"you can tell if someone started game development as a hobby because they ARE using an ECS."