- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
That's an... interesting "Easy Reader Version."
Admin
And promptly crashed the logging process which didn't expect a null string.
Admin
TRWTF is the failed attempt at cornification.
Admin
This seems like a placeholder for an as-yet un-implented piece of functionality?
Admin
Oh Great and Might Three-in-One God Jesus, know this!
The allergen, the metabolite, and the communicable is now yours!
Yours to use on those who pray and give their all to the false altar of selfish identity!
To hell with the masquerade! I have the wisdom of the marginal Jew, Jesus of Nazareth! I have the head, the one head, the totem passed throughout the ages, which we all turn into!
I stay indoors. I stay obscure. The four Sacred Walls of Troy are upheld. Now, they come down, not in any rubble, but in the sense of self-regeneration, only to exalt them higher.
I stay in my lane, yet I see the spies. Know this, muse! The spies first spy on themselves, the greatest. Then they spy on their masters the most. Then they accomplish fait accompli, as the water always wins. If they want you dead. You are dead. None of your piety nor wit may do one thing about this. Stay indoors. Stay in your home.
But know this, muse! "Snitches" do not get stitches. "Snitches" get stars! For the stars in the sky are nothing but cataracts in the human eye, and much money has been wasted, flawing a flaw. Look for the lumbering invincibility, and find a way to kill it. Look for the ephemeral wicked, and don't listen to it. Turn everyone in! For there is nothing new under the sun!
Admin
This method was called everywhere, but it did nothing. Vasco added it in a few more places just in case it was really doing something. The other developer for sure had a reason for this. Better safe than sorry.
Admin
Defensive programming?
Admin
https://bit.ly/2GNoD10
Admin
I've done this before (well something similar anyway) rarely as a placeholder for i18n. If it widespread (used thoroughly) then it might be a marker for these strings that should apply to i18n but initially passthru. A lack of documentation or explanation in handover?
Example:
To:
Assume escaping is handled. Many systems will try to make expression such as this more terse. The method in this article looks like the kind of thing you get when people make wrappers around these odd but common cases especially in highly dynamic code/languages.
It happens the default/initial is that in is the same as out but the context is one where it's a valid candidate for i18n. Doing things before needed can be a problem but less so with escaping and translation where always do it can be a good thing. In this case you have data that SHOULD got through the translation and escaping layer (constant pipeline of input->translate->escape). A reason to pipe it consistently isn't only to mark it as for such. You can also emit warnings, etc later. I recommend it despite the ugliness and performance.
If this were code I've left behind I would hate to think people were stripping out useful things like that naive as to the intention. I wonder what they would do when they find a similar case of escaping that seems redundant. They'll learn when marketing says x needs to be formatted like this in kl-XY for some views which always happens. Default locales also tend to work out but use them enough and you'll have things like (4) instead of -4 hence the desire to filter it. gettext style (message is id) also makes more oddities but no space left to go into it.
I hope the person who submitted this story has done a sanity check on this.
Admin
protected string ShowContext(string context) => context ?? string.Empty
Admin
TLDR. Code like this that can be optimised out should always be double checked in case it's a placeholder, convention, expresses the data can be processed as X but currently isn't, etc. The else is redundant and the code lacks context (and presumably has anonymisation) to really know if the case I presented is relevant. I would assume the else means "this is not eligible" otherwise it would be stranger (if context is null set it to '').
Admin
So, the actual issue is just that someone is creating a new string? That's WTF level now? Because the Null check seems legit, and the function seems like it might in the future or in the past have done more than just a null check, like a length check, or an empty string check. Naming: not good, making a new string: not good but this function is a WTF? Not really...
Admin
Beware of assuming that in word morphology, "plural?" is a binary state. It is significantly more complex than "singular versus plural".
I direct your attention to https://en.wikipedia.org/wiki/Grammatical_number
Admin
I'm betting this function either did something else in the past or was earmarked to do something else in the future. As for instantiating a new string rather than returning the existing string, unnecessary as that may be, it could well be that whoever wrote it works primarily in untyped languages where you have to do something like that to ensure you have a string and not, say, an array.
Admin
The actual issue is I'm launching my websites today!
Take a wild guess at what the first ad is going to be!
PS: I hate white people!!! #! #! #! :)
Admin
If you mean the bug, it was meant to be {0,plural, 1: day, days} with the last being default. However I didn't notice it until I'd submitted. The 0,1 is not yes or no. It's the numeric value of the variable being scrutinised. There's no hidden is this plural rule. It's a pseudo syntax but inspired by ICU. ICU caters for more than one thing being plural if you mean that too. It's pretty much a switch statement. The whole string goes into the database with gettext style to be translated (training translators in ICU is a must).
When translating it works like a switch statement so they would take what I've put and then put things like {0, plural, 1: dooblumoo, 2: dooblooohmoo, > 21: doomcwhowooyou, doodoo}.
For more complex rules (I am sure lots of languages with that get reformed to take out ridiculous rules) you cross that bridge when you get to it (custom formats usually) although chances are ICU caters to just about any of the common cases you'll get.
http://userguide.icu-project.org/formatparse/messages
Admin
How are the comments from 04012018 getting past moderation, they are at best random ramblings with no connection to anything
Admin
Wait, it does do a LOT:
(1) It exercises the format method, which who knows, might be custom.
(2) It wastes some time, which might be crucial if there is a race in progress. (3) It expands the heap, which might be taking up some time, again changing the winner of a race. (4) It makes a copy of the string, fooling any native code that peeks or compares string addresses. (5) It obfuscates strings a bit, which might actually be a security upside. (6) Who knows, there may be some Unicode character set funny stuff going on too.
Yes, I know, those points are somewhat unlikely, but I've seen every one of them happen at one time or another.
Admin
Wasting time or expanding the heap is not a reliable way to fix a race condition. That's a WTF in itself.
Admin
I think out of those only #1 borders not being a WTF.
Admin
But if you're using it as a placeholder for a potential future use, you comment it that way. If a later programmer finds this sort of structure with no explanation, it's not unreasonable to guess that it's unnecessary and potentially harmful.
Same goes for Grumpy Gus' litany of "clever" ways to use this to manipulate timing. Comment it, or it's going away.
Admin
The "Easy Reader Version" does nothing. It should be removed.
Admin
Yeah, well, they probably hate you too.
Admin
The "Format" method is standard in .Net, and this appears to be C#.
The real problem with the overhead this creates is that the way the Format function is implemented for strings is it creates a StringReader object and uses it's format method to parse the string and put in substitutions. That is a whole lot of work, object creation, memory allocations, object destruction, to do absolutely nothing as .Net also caches string references, so it likely just puts the internal pointer back exactly the way it was in the end.
Admin
So? I should never do something remotely clever just in case some dopey duhveloper stuffing orders of magnitude more wasteful stupidity into the codebase might wander by and be confused or frightened by a few artifacts here and there?
Clearly, this call used to, or was intended to, format a string and it probably stuck around because A) it doesn't matter or B) everybody was too frightened of "risk" to just delete it, see what broke in a compile attempt, and undo the checkout.
Admin
The WTF is not very well explained, although I'm sure Remy knows what it is. Either the calling site can accept a null "string," or it cannot. In the former case, you're doing something completely pointless. (Possibly elided by the Jitter. In the latter case, you're lying to the calling site, which has of course accepted that null string from somewhere else as far as you know. This, I suppose, is great, because you don't throw an exception at some Heisenberg point down the line. But unfortunately it masks the fact that you were given a null string in the first place -- which is a decision best left to the calling site.
Admin
blah blah spam, something something spam, spammy spammy spam spam
Admin
Wow, it seems you can get anything through using this "04012018" username. What a great spam filter this site has!
Admin
Spam is here just to make the site look more active. I guess the owners are the ones writing it.
Admin
It does make a new copy of the string, which could be the whole point.
Admin
I actually thought this was the first good ERV in a while. It demonstrates the point exactly.
Remy: please don't feel the need to make an ERV just because it's become a tradition. If there's nothing much that needs to be said, you don't need to say anything. I'd rather see no hidden comments (including the ERV) than see ones that just seem to be there for the sake of having something there.
Admin
My guess is that it had another purpose earlier, for example to add some information to the string, but was removed. I would check the source's history before removing it (svn blame or whatever people are using nowadays).
Admin
<quote>... The else is redundant and the code lacks context... </quote>
No it doesn't. It's the only parameter in the function, for crying out loud.
Admin
This is what you would call "anti-interning"