Technology will make your life easier

I expect they’re talking about this feature:

https://www.kernel.org/doc/gorman/html/understand/understand016.html

2 Likes

Implementing objectively bad solutions involving arbitrary, inflexible, heavy-handed limitations because the client apparently believes that its staff are incapable of managing the feature sanely. This is currently high on the list of things I’m not enjoying about my job. Why can’t you let me give you something that we can both feel good about?!

3 Likes

It appears to be a current management orthodoxy that you shouldn’t employ people competent to produce more than the bare minimum acceptable quality of whatever.

2 Likes

Of course! Otherwise, they’ll be competent to steal your job

I hate corporate

1 Like

In my experience, it’s more “too competent people cost more, and when we accidentally hire one, they go somewhere else” (they leave out the “that pays better” part, for some reason.).

1 Like

I’m really glad my job does not do that. It fits with our motto of “We don’t do shiny.”

I’m a Principal Engineer, and what that seems to mean is that I’m authorised to recognise things that need doing and get them to happen across different products. I got the grade for doing just that, after realising that something nearly all our products do was going to stop working.

The actual work consisted of understanding the issue properly, writing a presentation for my great-grand-boss to explain it to one of his peers, helping the TechOps people who actually implemented the solution (because they were only willing to understand it superficially), and being the “active customer” for it thereafter. There was a problem while we only had servers for the service on a single site, but one of the Oregon wildfires a few years ago got rather close to that site, and suddenly people were willing to put a server in Ireland too.

Tuesday’s problem was largely me being insufficiently cynical. The product I work on provides a C API from a library that lives in-process with its client (none of this is at all webby, but it gets used in implementing web services, and several other kinds of software). I wrote and continue to maintain a big chunk of Perl that takes the headers for that C API, knowledge of formatting conventions and a configuration file, and generates a C# wrapper for that C API. We did not use SWIG because at the time (2004-5) it did not provide for any way of testing the API it created, and we’re kind of fanatical about that.

A developer had added some new functions with associated data types, which happens a few times per week. Most of them are handled automatically, but a few cases can’t be. C allows anonymous unions within structs, but C# does not. The generator can figure that out and create the necessary named C# union, but has no way to tell which member of a union should be used to initialise it in the C# struct constructor. So I had to add that to the configuration file. After that, the wrapper would compile, and so would the main test code, but there’s a separate standalone test program that would not.

The C API has a convention of providing macros to initialise its structures, and the generator reads those macros and uses the information from them to create the C# constructors. It turned out that the developer had released a macro that wasn’t valid C, but also wasn’t being used in his code. It was close enough to right that the generator built a correct C# constructor from it, but the C++CLI compiler had a legitimate complaint, although it did not express it clearly. I stared at this for about an hour on Tuesday, failed to see the problem, then spotted it as I started to explain the context to someone who’s better at spotting details than me. Bah!

4 Likes

I have an inflatable dinosaur for this purpose. Mostly he just hangs out on a pipe, but I take him down and have him review code sometimes. He’s very good at pointing things out, like “you’re not awaiting the call to fail, you moron “ or “you realize the morons at don’t actually guarantee that will return some that can be deserialized into that type?”

10 Likes

I really need that dinosaur. What are their subcontractor rates?

2 Likes

He demands to be paid in chocolate fudge cakes.

In other news, I got an engagement survey asking me to describe my week in three words…

2 Likes

“Glad it’s over”?

2 Likes

That had reminded me of a story I’d read years ago, but at the time I’d been unable to locate it online. Then today I happened upon a print-out of it (circa 2001) in a box in my garage, which enabled me to locate the URL.

(Brownie points to anyone who played and loved that excellent PC game.)

4 Likes

Think I mentioned this before, I’ve been trying to convince a vendor that they’ve got a bug (or three) in their product.

I threw together some test code to demonstrate the issues and sent it over. What followed was over a month of the vendor claiming it worked fine for them.

So there’s been an arduous process of trying to figure out what’s different between their setup and ours. There’s a lot of moving parts with RTOS software but I arrived back at the conclusion that it wasn’t anything I was doing.

While doing that I stumbled across another defect in their reporting system that was very similar to one of the issues I reported and had apparently been fixed.

That was the key. The person who I’d been speaking to had worked on that other defect. Turns out he’d left the fixed file in his setup and forgotten about it until now.

I’m glad we’ve made progress but it does cause me a little bit of concern. I did ask him weeks ago if we were using the same version of the tools and he assured me he was.

3 Likes

One of the things I absolutely loathe about the New Way™ of working that has been adopted in my team at work is that the codebases are no longer under version control. By which I mean, not entirely under version control. Our code is versioned, and everything else is acquired by a dependency manager, based on a (versioned) file which specifies the specific versions of the dependencies to install. There is therefore a (slow) build process to install the code you should be using, which needs to be run in lockstep with any changes to those specs acquired via the VCS. This doesn’t suck too much until you have some reason, in the course of debugging, to modify one or more of those files, as the VCS doesn’t know a damn thing about those changes, and therefore correctly fails to give you any visibility at all. It used to be that if I changed something, the VCS told me I’d changed it, and it was basically impossible for me to forget that it was changed.

Just recently I did something very similar to what you’ve described. I found a bug in a dependency and implemented a workaround. Subsequently other things interrupted me, and I forgot that this fix was not finalised. When I came back to it later and got my custom code working, I deployed the feature to the staging environment, where I observed that it was not working. I then proceeded to waste a lot of time trying to figure out what the difference was, because I had no visibility over that lingering untracked code change.

4 Likes

yeah, that’s painful. Can you, for development purposes, have the dependency code checkout of of their repos, and have them in smashed together repo? git lets you dio that with submodules, which have their own pain points.

(we get around this by importing all our dependencies into our repo, and not allowing you to use versions of them (for a very small number of things, there are major versions available, where the jump from N to N+1 requires substantial effort and is generally not compatable with each other.) that comes with its own pain. )

Today I spent more time than I ever wanted to on learning how to format long strings with linebreaks in a yml file. Turns out it’s trivial (just put in linebreaks), if the file is well-formatted which it was only after I copied it into IntelliJ (these are docker files that are not kept in the project git repository for some arcane reason).

So there went 1 hour.

The rest of my workday was spent working out the different configurations for our local test setup so I would stop making mistakes.

Different use cases:

  • making changes on the master, I need to test against a running server instance build against the master
  • making changes to one of the “hotfix” branches, I need to test against a running server with that hotfix build

Those two seem trivial enough, however I have to rebuild the whole project every time I switch branches because there is some generated stuff deep inside the project that will not let IntelliJ compile a working client if the previous full-build (2-3 min on my machine, 7-10 on everyone else’s) was on the other branch.

However, we have different entities running our software and they upgrade their severs at different times, so right now we have just released a new major version that nobody is running on. The previous release is only used by 2 groups and all the rest (~10) are still running the version before that.

Now these instances have to be able to communicate. Across different major versions.

So we have to have setups to test that

Further use case therefore:

  • run two instances on the master branch
  • run 1 instance on the master branch and 1 instance on a hotfix branch

That last one… I can get a client up and running against the instance that is on the master but I keep running into a wall when I run a client against the hotfix of that setup.

Waaaaah.

My week is over and all I wanted to do was to fix that one test that is failing in that “cross-version-cross-instance” scenario for the past month because someone edited the data and our “recorded” test data flags this as an error.

What I haven’t mentioned in the above rant that for each scenario there is a variety of databases that they can run against and there are mistakes to be made in that setup and… the data I need to fix that test is in one database–distributed across the whole model obviously so impossible to “just copy” and I need that hotfix client to copy the data from where it is into a database that I already know has other flaws I need to fix before being able to copy the thing…

I think I’ll just wait for the new hotfix branch of our current release that will have the correct data in it and will be created sometime next week.

I just had to get that out of my system.

4 Likes

Me again. Sprintwechsel–end of sprint starting new one–is called “Meetwoch” from "lots of meetings on Mittwoch = Wednesday. This was yesterday.

This is how I felt:

I really really think scrum/agile methods help establish better processes for development (and other) teams. And my current team has a pretty good process. But that retrospective yesterday sucked.

I know why. I just need to vent. That was one of the most emotionally draining meetings I had in recent years.

5 Likes

Now I have to do the TOTP dance every time I log in to github (and everyone will by the end of next year). Because Normal People allow their browsers to stay logged in when they finish on a site.

2 Likes

I admit I whitelist certain sites I use a lot…

Especially on devices that I do not expect to ever be used by anyone else.

2 Likes

Never thought you were were a Top of the Pops fan, Roger …

:kissing_smiling_eyes:

2 Likes

I think I may have seen an episode once. (I rely on you and the other Wharties for knowledge of pop culture that was happening when I was younger.)

2 Likes