Computer
New Claude Model Runs 30-Hour Marathon To Create 11,000-Line Slack Clone
Read more of this story at Slashdot.
Landlords Are Demanding Tenants' Workplace Login Details To Verify Their Income
Read more of this story at Slashdot.
Microsoft Launches 'Vibe Working' in Excel and Word
Read more of this story at Slashdot.
China Opens World's Highest Bridge, Breaking Its Own Record
Read more of this story at Slashdot.
'No Driver, No Hands, No Clue': Waymo Pulled Over For Illegal U-turn
Read more of this story at Slashdot.
Saudi Takeover of EA in $55 Billion Deal Raises Serious Concerns
Read more of this story at Slashdot.
Professor Warns CS Graduates are Struggling to Find Jobs
Read more of this story at Slashdot.
Ladybird Browser Gains Cloudflare Support to Challenge the Status Quo
Read more of this story at Slashdot.
CodeSOD: Contracting Space
A ticket came in marked urgent. When users were entering data in the header field, the spaces they were putting in kept getting mangled. This was in production, and had been in production for sometime.
Mike P picked up the ticket, and was able to track down the problem to a file called Strings.java. Yes, at some point, someone wrote a bunch of string helper functions and jammed them into a package. Of course, many of the functions were re-implementations of existing functions: reinvented wheels, now available in square.
For example, the trim function.
/** * @param str * @return The trimmed string, or null if the string is null or an empty string. */ public static String trim(String str) { if (str == null) { return null; } String ret = str.trim(); int len = ret.length(); char last = '\u0021'; // choose a character that will not be interpreted as whitespace char c; StringBuffer sb = new StringBuffer(); for (int i = 0; i < len; i++) { c = ret.charAt(i); if (c > '\u0020') { if (last <= '\u0020') { sb.append(' '); } sb.append(c); } last = c; } ret = sb.toString(); if ("".equals(ret)) { return null; } else { return ret; } }Now, Mike's complaint is that this function could have been replaced with a regular expression. While that would likely be much smaller, regexes are expensive- in performance and frequently in cognitive overhead- and I actually have no objections to people scanning strings.
But let's dig into what we're doing here.
They start with a null check, which sure. Then they trim the string; never a good sign when your homemade trim method calls the built-in.
Then, they iterate across the string, copying characters into a StringBuffer. If the current character is above unicode character 20- the realm of printable characters- and if the last character was a whitespace character, we copy a whitespace character into the output, and then the printable character into the output.
What this function does is simply replace runs of whitespace with single whitespace characters.
"This string" becomes "This string"Badly I should add. Because there are plenty of whitespace characters which appear above \u0020- like the non-breaking space (\u00A0), and many other control characters. While you might be willing to believe your users will never figure out how to type those, you can't guarantee that they'll never copy/paste them.
For me, however, this function does something far worse than being bad at removing extraneous whitespace. Because it has that check at the end- if I handed it a perfectly good string that is only whitespace, it hands me back a null.
I can see the argument- it's a bad input, so just give me back an objectively bad result. No IsNullOrEmpty check, just a simple null check. But I still hate it- turning an actual value into a null just bothers me, and seems like an easy way to cause problems.
In any case, the root problem with this bug was simply developer invented requirements: the users never wanted stray spaces to be automatically removed in the middle of the string. Trimmed yes, gutted no.
No one tried to use multiple spaces for most of the history of the application, thus no one noticed the problem. No one expected it to not work. Hence the ticket and the panic by users who didn't understand what was going on.
.comment { border: none; } [Advertisement] Picking up NuGet is easy. Getting good at it takes time. Download our guide to learn the best practice of NuGet for the Enterprise.AI-Powered Stan Lee Hologram Debuts at LA Comic Con
Read more of this story at Slashdot.
Some Athletes are Trying the Psychedelic Ibogaine to Treat Brain Injuries
Read more of this story at Slashdot.
Culture Magazine Urges Professional Writers to Resist AI, Boycott and Stigmatize AI Slop
Read more of this story at Slashdot.
Wall Street Journal Decries 'The Rise of Conspiracy Physics'
Read more of this story at Slashdot.
Switzerland Approves Digital ID In Narrow Vote, UK Proposes One Too
Read more of this story at Slashdot.
Tim Berners-Lee Urges New Open-Source Interoperable Data Standard, Protections from AI
Read more of this story at Slashdot.
Facebook and Instagram Offer UK Users an Ad-Stopping Subscription Fee
Read more of this story at Slashdot.
Will AI Mean Bring an End to Top Programming Language Rankings?
Read more of this story at Slashdot.
Researchers (Including Google) are Betting on Virtual 'World Models' for Better AI
Read more of this story at Slashdot.
Million-Year-Old Skull Rewrites Human Evolution, Scientists Claim
Read more of this story at Slashdot.
California Now Has 68% More EV Chargers Than Gas Nozzles, Continues Green Energy Push
Read more of this story at Slashdot.