Yes, but “Proto Indo-European” doesn’t exactly roll off the tongue. /s
Yes, but “Proto Indo-European” doesn’t exactly roll off the tongue. /s
Honestly, this is why I tell developers that work with/for me to build in logging, day one. Not only will you always have clarity in every environment, but you won’t run into cases where adding logging later makes races/deadlocks “go away mysteriously.” A lot of the time, attaching a debugger to stuff in production isn’t going to fly, so “printf debugging” like this is truly your best bet.
To do this right, look into logging modules/libraries that support filtering, lazy evaluation, contexts, and JSON output for perfect SEIM compatibility (enterprise stuff like Splunk or ELK).
Heisenbugs are the worst. My condolences for being tasked with diagnosing one.
Last time I did anything on the job with C++ was about 8 years ago. Here’s what I learned. It may still be relevant.
const
, constexpr
, inline
, volatile
, are all about steering the compiler to generate the code you want. As a consequence, you spend a lot more of your time troubleshooting code generation and compilation errors than with other languages.valgrind
or at least a really good IDE that’s dialed in for your process and target platform. Letting the rest of the team get away without these tools will negatively impact the team’s ability to fix serious problems.1 - I borrowed this idea from working on J2EE apps, of all places, where stack traces get so huge/deep that there are plugins designed to filter out method calls (sometimes, entire libraries) that are just noise. The idea of post-processing errors just kind of stuck after that - it’s just more data, after all.
:: sad upvote noises ::
I needed this laugh. Thanks @[email protected]
PSA:
For anyone who identifies, had a chuckle, but also needs support: it’s out there. Al-Anon) is a fantastic resource for anyone coping with family that has substance abuse issues - not just alcoholism. Don’t go it alone!
the threat of rejection/retribution as a result of refusal to participate.
Exactly. Consider repercussions for not acting like the rest of the group. While your vote is supposed to be private, not everyone is good at lying. And maybe if the local polling place is run by these same people, maybe that privacy is in question?
And to drive home the point, let’s go to the worst case. Imagine choosing to risk a beat-down from someone twice your size and way stronger than you, by breaking rank on a single election. Especially if you’re convinced that vote will get outweighed by every other spouse in the same situation. You might toe the line too.
Oh no, I have to press up
200+ times if we’re counting all the detritus and failure in my command history.
There is an advantage to this approach though: fewer errors. You’re plucking a known working command from a list instead of manually typing a (possibly) broken version of it. Worse yet is when it’s a command where typematic mistakes cause unintended side effects like data loss. So, mashing up
100 times can be pretty smart, especially if you’re not a great typist.
Upvoted for the dancing and singing emoticon. Nice art.
I actually tried to use marketplace a few weeks ago. It was an unmitigated disaster. People either didn’t respond, had stale posts for items, or couldn’t get their act together to have a conversation (even with 12 hours between messages) about how to get shit out of their house. I have never yearned for old-fashioned yard sales so much.
I agree, but I feel like having the toaster itself catch fire could have been mitigated somehow.
I’m actually kind of amazed that the failure mode for “toaster used sideways” is that it just catches fire. That’s one hell of a design flaw.
This man is a menace and must be stopped.
Eh, I’m used to it.
This is basically how Ixion went. The game didn’t need a soundtrack to go this hard, but it absolutely put it over the top.
This is fine.
Good fences make good neighbors.
Corollary: server-side commit hooks make good teammates.
Oh. That’s good.
Java itself is kind of blissful in how restricted and straightforward it is.
Java programs, however, tend to be very large and sprawling code-bases built on even bigger mountains of shared libraries. This is a product of the language’s simplicity, the design decisions present in the standard library, and how the Java community chooses to solve problems as a group (e.g. “dependency injection”). This presents a big learning challenge to people encountering Java projects on the job: there’s a huge amount of stuff to take in. Were Java a spoken language it would be as if everyone talked in a highly formal and elaborate prose all the time.
People tend to conflate these two learning tasks (language vs practice), lumping it all together as “Java is complicated.”
$0.02: Java is the only technology stack where I have encountered a logging plugin designed to filter out common libraries in stack traces. The call depth on J2EE architecture is so incredibly deep at times, this is almost essential to make sense of errors in any reasonable amount of time. JavaScript, Python, PHP, Go, Rust, ASP, C++, C#, every other language and framework I have used professionally has had a much shallower call stack by comparison. IMO, this is a direct consequence of the sheer volume of code present in professional Java solutions, and the complexity that Java engineers must learn to handle.
Some articles showing the knock-on effects of this phenomenon: