Feed aggregator
Russia Restricts Calls Via WhatsApp and Telegram
Read more of this story at Slashdot.
CodeSOD: An Array of Parameters
Andreas found this in a rather large, rather ugly production code base.
private static void LogView(object o) { try { ArrayList al = (ArrayList)o; int pageId = (int)al[0]; int userId = (int)al[1]; // ... snipped: Executing a stored procedure that stores the values in the database } catch (Exception) { } }This function accepts an object of any type, except no, it doesn't, it expect that object to be an ArrayList. It then assumes the array list will then store values in a specific order. Note that they're not using a generic ArrayList here, nor could they- it (potentially) needs to hold a mix of types.
What they've done here is replace a parameter list with an ArrayList, giving up compile time type checking for surprising runtime exceptions. And why?
"Well," the culprit explained when Andreas asked about this, "the underlying database may change. And then the function would need to take different parameters. But that could break existing code, so this allows us to add parameters without ever having to change existing code."
"Have you heard of optional arguments?" Andreas asked.
"No, all of our arguments are required. We'll just default the ones that the caller doesn't supply."
And yes, this particular pattern shows up all through the code base. It's "more flexible this way."
.comment { border: none; } [Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.First Antidote For Carbon Monoxide Poisoning 'Cleans' Blood In Minutes
Read more of this story at Slashdot.
How the Unraveling of Two Pentagon Projects May Result In a Costly Do-Over
Read more of this story at Slashdot.
Kodak Warns It May Go Out of Business
Read more of this story at Slashdot.
Google's Gemini AI Will Get More Personalized By Remembering Details Automatically
Read more of this story at Slashdot.
New York Sues Zelle Parent Company, Alleging It Enabled Fraud
Read more of this story at Slashdot.
Pebble Time 2 Reboot Gets a Redesign
Read more of this story at Slashdot.
Polestar Sets Production Car Record For Longest Drive On a Single Charge
Read more of this story at Slashdot.
Apple Plots Expansion Into AI Robots, Home Security and Smart Displays
Read more of this story at Slashdot.
Countrywide Natural Experiment Links Built Environment To Physical Activity
Read more of this story at Slashdot.
Samsung Launches World's First Micro RGB TV
Read more of this story at Slashdot.
Young Americans Push Playback Beyond 1x as Platforms Widen Speed Controls
Read more of this story at Slashdot.
Microsoft Makes Pull Print Generally Available
Read more of this story at Slashdot.
China's Lead in Open-Source AI Jolts Washington and Silicon Valley
Read more of this story at Slashdot.
Temperature Records Broken as Extreme Heat Grips Parts of Europe
Read more of this story at Slashdot.
US Embeds Trackers in AI Chip Shipments To Catch Diversions To China
Read more of this story at Slashdot.
Cats Develop Dementia In a Similar Way To Humans
Read more of this story at Slashdot.
ULA Launches First National Security Mission On Vulcan Centaur Rocket
Read more of this story at Slashdot.
CodeSOD: Raise VibeError
Ronan works with a vibe coder- an LLM addicted developer. This is a type of developer that's showing up with increasing frequency. Their common features include: not reading the code the AI generated, not testing the code the AI generated, not understanding the context of the code or how it integrates into the broader program, and absolutely not bothering to follow the company coding standards.
Here's an example of the kind of Python code they were "writing":
if isinstance(o, Test): if o.requirement is None: logger.error(f"Invalid 'requirement' in Test: {o.key}") try: raise ValueError("Missing requirement in Test object.") except ValueError: pass if o.title is None: logger.error(f"Invalid 'title' in Test: {o.key}") try: raise ValueError("Missing title in Test object.") except ValueError: passAn isinstance check, is already a red flag. Even without proper type annotations and type checking (though you should use them) any sort of sane coding is going to avoid situations where your method isn't sure what input it's getting. isinstance isn't a WTF, but it's a hint at something lurking off screen. (Yes, sometimes you do need it, this may be one of those times, but I doubt it.)
In this case, if the Test object is missing certain fields, we want to log errors about it. That part, honestly, is all fine. There are potentially better ways to express this idea, but the idea is fine.
No, the obvious turd in the punchbowl here is the exception handling. This is pure LLM, in that it's a statistically probable result of telling the LLM "raise an error if the requirement field is missing". The resulting code, however, raises an exception, immediately catches it, and then does nothing with it.
I'd almost think it's a pre-canned snippet that's meant to be filled in, but no- there's no reason a snippet would throw and catch the same error.
Now, in Ronan's case, this has a happy ending: after a few weeks of some pretty miserable collaboration, the new developer got fired. None of "their" code ever got merged in. But they've already got a few thousand AI generated resumes out to new positions…
[Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.