• 0 Posts
  • 72 Comments
Joined 1 year ago
cake
Cake day: November 13th, 2023

help-circle

  • I’m inclined to agree. I think the best path through would be to focus on laws that benefit multiple minor players that have a seat at the table.

    Antitrust laws in general are a good example. These function at the direct expense of big monopolies, but are exactly what companies need if they want in on what was monopolized. And in the case of breaking a monopoly down, the resulting “baby” companies given more power, growth opportunity, hiring opportunities (job growth) and money making potential than the parent. This can also spur economic growth for all the fat cats out there by creating many new investment and hiring potentials. Overall, if you can get past the monopoly itself (read: take the ball away from your billionaire of choice), everyone else involved stands to benefit.

    There may be other strategies, but I can’t think of any right now. I think the key is to tip the scale in favor of more favorable outcomes, then repeat that a few more times, achieving incremental progress along the way. Doctorow outlines the ideal end state for all this, but it’s up to everyone else to figure out how to get there.

    While I don’t like the idea of embracing capital to improve things, the whole system is currently run this way. Standing with other monied interests that are aligned with the same goal might be the only way to go.


  • Just yesterday, Mrs. Warp Core was trying to enroll with an online service. The self-service email confirmation link refused to function correctly in Firefox on a desktop operating system (Windows in this case). It worked flawlessly on Firefox+iOS. Said link also shuttled the user straight off to the phone app.

    I’ll add that nearly ever other aspect of their public facing web, including the online chat support, worked flawlessly everywhere I tried it. This all just reeked of hostile design.

    When asked about why this is, I simply said:

    The browser provides good security and choice for the user. Apps provide good security and control for the vendor.




  • 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).



  • 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.

    • C++14 was alright, but still wasn’t everything you need. The language has improved a lot since, so take this with a grain of salt. We had to use Boost to really make the most of things and avoid stupid memory management problems through use of smart (ref-counted) pointers. The overhead was worth it.
    • C++ relies heavily on idioms for good code quality that can only be learned from a book and/or the community. “RAII” is a good example here. The language itself is simply too flexible and low-level to force that kind of behavior on you. To make matters worse, idiomatic practices wind up adding substantial weight to manual code review, since there’s no other way to enforce them or check for their absence.
    • I wound up writing a post-processor to make sense of template errors since it had a habit of completely exploding any template use to the fullest possible expression expansion; it was like typedefs didn’t exist. My tool replaced common patterns with expressions that more closely resembled our sourcecode1. This helped a lot with understanding what was actually going wrong. At the same time, it was ridiculous that was even necessary.
    • A team style guide is a hard must with C++. The language spec is so mindbogglingly huge that no two “C++ programmers” possess the same experience with the language. Yes, their skillsets will overlap, but the non-overlapping areas can be quite large and have profound ramifications on coding preferences. This is why my team got into serious disagreements with style and approach without one: there was no tie-breaker to end disagreement. We eventually adopted one after a lot of lost effort and hurt feelings.
    • Coding C++ is less like having a conversation with the target CPU and more like a conversation with the compiler. Templates, 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.
    • At some point you will need 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.
    • C++ assumes that CPU performance and memory management are your biggest problems. You absolutely have to be aware of stack allocation, heap allocation, copies, copy-free, references, pointers, and v-tables, which are needed to navigate the nuances of code generation and how it impacts run-time and memory.
    • Multithreading in C++14 was made approachable through Boost and some primitives built on top of pthreads. Deadlocks and races were a programmer problem; the language has nothing to help you here. My recommendation: take a page from Go’s book. Use a really good threadsafe mutable queue, copy (no references/pointers) everything into it, and use it for moving mutable state between threads until performance benchmarks tell you to do otherwise.
    • Test-driven design and DevOps best-practice is needed to make any C++ project of scale manageable. I cannot stress this enough. Use every automated quality gate you can to catch errors before live/integration testing, as using valgrind and other in-situ tools can be painful (if not impossible).

    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.




  • Common language used to dismiss bad decisions like this:

    • We need to track and meet our metrics for the quarter
    • Engagement for $FEATURE is down, so we have to take measures to get people to take notice
    • It’s opt-in/opt-out, so it’s the right thing to do
    • It’s only a one time thing and then the system remembers1 what the user selected
    • Only new users are affected - our power users will put up with it
    • It’s just a minor inconvenience, really
    • It’s just a website

    1 - Oh, did you turn off cookies or clear your cache? Sorry about that.




  • It has been pretty depressing to me that the tech literate have been so easily lulled into accepting such things in the name of “cool toys” and “security” virtually everywhere in modern life besides the PC/laptop/server spaces.

    From my exposure to supporting said folks with PC related problems, its easy to see the reality here. Phones provide a streamlined experience with zero frills. They don’t want super flexible computing devices, they want appliances. More to the point, the level of care and maintenance needed to have a top-shelf PC experience is time and effort most people would rather not expend. Doing this right was inconvenient to begin with, and left the field wide open for anything that would be easier.



  • Think about it like a diamond-encrusted mouse.

    Oh good grief. Do they really think they can adopt the subscription-for-heated-seats model, and get people to use their high-end computer peripherals as some kind of flex? I just don’t see people holding their “Logitechtm Gamer PC Lease” over anyone else’s head.

    My optimism has me thinking that this CEO is deliberately tilting at windmills in order to appease shareholders, because Logitech has been around long enough to be steady-state (not growing much) at this point.


  • It’s gotta piss them off.

    That’s not unusual, sadly. Sometimes, someone brings in a contractor in attempt to foist change, as they’re not tainted by loyalties or the culture when it comes to saying ugly things. So anger and disruption is the product you’ve actually been hired to deliver; surprise! What pains me the most here is when I see my fellow contractors walk into just such a situation and they wind up worse for wear as a result.

    Edit: the key here is to see this coming and devise a communication plan to temper your client’s desire to stir the pot, and get yourself out of the line of fire, so to speak.