<?xml version="1.0" encoding="utf-8" standalone="no"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0"><channel><title>The Daily WTF</title><link>http://thedailywtf.com/</link><description>Curious Perversions in Information Technology</description><lastBuildDate>Tue, 21 Apr 2026 22:58:13 GMT</lastBuildDate><item><dc:creator>Remy Porter</dc:creator><title>Turning Thirty</title><link>https://thedailywtf.com/articles/turning-thirty</link><category>Feature Articles</category><pubDate>Tue, 21 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/turning-thirty</guid><description>&lt;p&gt;&lt;strong&gt;Eric O&lt;/strong&gt; worked for a medical device company. The medical device industry moves slowly, relative to other technical industries. Medical science and safety have their own cadence, and at a certain point, iterating faster doesn&amp;#39;t matter much.&lt;/p&gt;
&lt;p&gt;Eric was working on a new feature on a system that had been in use for thirteen years. This new feature interacted with a database which stored information about racks of test tubes, and Eric&amp;#39;s tests meant creating several entries for racks of test tubes. And that&amp;#39;s when Eric discovered that the database only allowed thirty racks. Add any more, it would just roll right back over to one.&lt;/p&gt;
&lt;p&gt;This was odd. The database was small- less than 40MB, even in production- and there were automatic tasks to purge old data for compliance purposes. Why a hard limit of thirty?&lt;/p&gt;
&lt;p&gt;Eric had only been at the company for a year, so he asked one of the more senior team members, Lester. &amp;#34;Oh yeah, that was before my time. You should probably ask Carl.&amp;#34;&lt;/p&gt;
&lt;p&gt;Later that day, Eric happened to bump into Carl around the coffee maker, and asked the question. &amp;#34;Oh, yeah, I do vaguely remember something about that. It was in the requirements for the product. I thought it was weird, but didn&amp;#39;t think too much about it. You should probably ask Elise, she&amp;#39;s been here like twenty years.&amp;#34;&lt;/p&gt;
&lt;p&gt;Well, now it was getting curious. Eric went over to the &amp;#34;old building&amp;#34;, as it was named, the original office for the company on the other side of the parking lot. Most of the offices had moved to the new building a decade earlier, and it mostly served as fabrication and storage, but a few offices remained.&lt;/p&gt;
&lt;p&gt;Elise was on the third floor, down a poorly lit hallway, sitting in an office with water-stained acoustical tile in its ceiling. &amp;#34;Oh, yeah, I put that into the requirements document. It&amp;#39;s funny, I thought it was weird too, but the system you&amp;#39;re working on was a replacement for an older system. Our requirements were derived from those. Let me think… Irving worked on that, but he&amp;#39;s dead, god rest him. Penny is retired. Oh, you know, Humbert is still around. He didn&amp;#39;t work on that, but he worked on some of the systems that came before that. He&amp;#39;s upstairs and on the other side of the building.&amp;#34;&lt;/p&gt;
&lt;p&gt;Eric went upstairs and to the other side of the building. The fourth floor had been last remodeled circa 1985, and the ugly industrial paint on the wall was made even uglier by the fact that someone had replaced most of the flourescent tubes with LEDs. &lt;em&gt;Most&lt;/em&gt;. The mismatched color temperature started Eric down the path of a headache.&lt;/p&gt;
&lt;p&gt;Humbert was in an office similar to Elise&amp;#39;s. On his desk was a plaque commemerating 40 years of service with the company. Eric asked about the limitation, and Humbert laughed.&lt;/p&gt;
&lt;p&gt;&amp;#34;You&amp;#39;re working on the latest version of a product that initially started on an old PDP-11 running &lt;a href="https://thedailywtf.com/articles/a_case_of_the_mumps"&gt;MUMPS&lt;/a&gt;. I mean, the first versions, anyway. We ran to desktop computers as fast as we could. I wrote a version for DOS in… oh… &amp;#39;86? I knew none of the facilities we worked with had more than ten or fifteen racks of tubes, and I needed somehow to limit the size of the database so it all fit on a single 5 1/4&amp;#34; floppy disk. I picked thirty, because it seemed like a good round number. Honestly, I&amp;#39;m shocked that the limit still exists.&amp;#34;&lt;/p&gt;
&lt;p&gt;So was Eric. There had been several ground-up-rewrites since 1986, before the one Eric maintained had been released thirteen years ago. Each one of them had chosen to maintain the same limitation, without ever considering why it existed. The rule had simply been copied, mindlessly, for 40 years.&lt;/p&gt;
&lt;p&gt;&amp;#34;I&amp;#39;m kind of impressed,&amp;#34; Eric said to Humbert, &amp;#34;in a horrified way.&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;Me too, kid, me too.&amp;#34;&lt;/p&gt;
&lt;!-- Easy Reader Version: I've worked on systems like this, and I expect that someone at some point did a weird workaround to make it possible to have "subracks", where you could divide each real rack into thirty subracks, thus allowing you to have more than the abritrary limit usually allowed. --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/proget-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [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.&lt;a href="https://inedo.com/proget?utm_source=tdwtf&amp;amp;utm_medium=footer&amp;amp;utm_content=PlebsFooter"&gt;Learn more.&lt;/a&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>23</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/turning-thirty</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Good Etiquette</title><link>https://thedailywtf.com/articles/good-etiquette</link><category>CodeSOD</category><pubDate>Mon, 20 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/good-etiquette</guid><description>&lt;p&gt;&amp;#34;Here, you&amp;#39;re a programmer, take this over. It&amp;#39;s business critical.&amp;#34;&lt;/p&gt;
&lt;p&gt;That&amp;#39;s what &lt;strong&gt;Felicity&lt;/strong&gt;&amp;#39;s boss told her when he pointed her to a network drive containing an Excel spreadsheet. The Excel spreadsheet contained a pile of macros. The person who wrote it had left, and nobody knew how to make it work, but the macros in question were absolutely business vital.&lt;/p&gt;
&lt;p&gt;Also, it&amp;#39;s in French.&lt;/p&gt;
&lt;p&gt;We&amp;#39;ll take this one in chunks. The indentation is as in the original.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-vbscript"&gt;&lt;span class="hljs-keyword"&gt;Public&lt;/span&gt; &lt;span class="hljs-keyword"&gt;Sub&lt;/span&gt; ExporToutVersBaseDonnées(ClasseurEnCours As Workbook)
&lt;span class="hljs-keyword"&gt;Call&lt;/span&gt; AffectionVariables(ToutesLesCellulesNommées)
&lt;span class="hljs-keyword"&gt;Call&lt;/span&gt; AffectationBaseDonnées(BaseDonnées)
BaseDonnées.Activate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The procedures &lt;code&gt;AffectionVariables&lt;/code&gt; and &lt;code&gt;AffectationBaseDonnées&lt;/code&gt; populate a pile of global variables. &amp;#34;base de données&amp;#34; is French for database, but don&amp;#39;t let the name fool you- anything referencing &amp;#34;base de données&amp;#34; is referencing another Excel file located on a shared server. There are, in total, four Excel files that must live on a shared server, and two more which must be in a hard-coded path on the user&amp;#39;s computer.&lt;/p&gt;
&lt;p&gt;Oh, and the shared server is referenced not by a hostname, but by IP address- which is why the macros were breaking on everyone&amp;#39;s computer; the IP address changed.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s continue.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-vbscript"&gt;&lt;span class="hljs-comment"&gt;&amp;#39;Vérifier si la ligne existe déjà.&lt;/span&gt;
        &lt;span class="hljs-keyword"&gt;If&lt;/span&gt; ClasseurEnCours.Sheets(&lt;span class="hljs-string"&gt;&amp;#34;DATA&amp;#34;&lt;/span&gt;).Range(&lt;span class="hljs-string"&gt;&amp;#34;Num_Fichier&amp;#34;&lt;/span&gt;) = &lt;span class="hljs-number"&gt;0&lt;/span&gt; &lt;span class="hljs-keyword"&gt;Then&lt;/span&gt;
        Num_Fichier = BaseDonnées.Sheets(&lt;span class="hljs-number"&gt;1&lt;/span&gt;).Range(&lt;span class="hljs-string"&gt;&amp;#34;Dernier_Fichier&amp;#34;&lt;/span&gt;).Value + &lt;span class="hljs-number"&gt;1&lt;/span&gt;
Insérer_Ligne: &lt;span class="hljs-comment"&gt;&amp;#39;(étiquette Goto) insérer une ligne&lt;/span&gt;
    Application.&lt;span class="hljs-keyword"&gt;GoTo&lt;/span&gt; Reference:=&lt;span class="hljs-string"&gt;&amp;#34;Dernière_Ligne&amp;#34;&lt;/span&gt;
            Selection.EntireRow.Insert
&lt;span class="hljs-comment"&gt;&amp;#39;Copie les cellules (colonne A à colonne FI) de la ligne au-dessus de la ligne insérée.&lt;/span&gt;
            &lt;span class="hljs-keyword"&gt;With&lt;/span&gt; ActiveCell
                    .Offset(&lt;span class="hljs-number"&gt;-1&lt;/span&gt;, &lt;span class="hljs-number"&gt;0&lt;/span&gt;).Range(&lt;span class="hljs-string"&gt;&amp;#34;A1:FM1&amp;#34;&lt;/span&gt;).Copy
&lt;span class="hljs-comment"&gt;&amp;#39;Colle le format de la cellule précédemment copiée à la cellule active puis libère les données du presse papier&lt;/span&gt;
                    .PasteSpecial
                    .Range(&lt;span class="hljs-string"&gt;&amp;#34;A1:FM1&amp;#34;&lt;/span&gt;).Value = &lt;span class="hljs-string"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;span class="hljs-comment"&gt;&amp;#39;Se repositionne au début de la ligne insérée.&lt;/span&gt;
                    .Range(&lt;span class="hljs-string"&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;).&lt;span class="hljs-keyword"&gt;Select&lt;/span&gt;
            &lt;span class="hljs-keyword"&gt;End&lt;/span&gt; &lt;span class="hljs-keyword"&gt;With&lt;/span&gt;
            Application.CutCopyMode = &lt;span class="hljs-literal"&gt;False&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Uh oh, &lt;code&gt;Insérer_Ligne&lt;/code&gt; is a label for a &lt;code&gt;Goto&lt;/code&gt; target. Not to be confused by the &lt;code&gt;Application.GoTo&lt;/code&gt; call on the next line- that just selects a range in the spreadsheet.&lt;/p&gt;
&lt;p&gt;After that little landmine, we copy/paste some data around in the sheet.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s the &lt;code&gt;If&lt;/code&gt; side of the conditional, let&amp;#39;s look at the &lt;code&gt;else&lt;/code&gt; clause:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-vbscript"&gt;        &lt;span class="hljs-keyword"&gt;Else&lt;/span&gt;
Cherche_Numéro_Fichier: &lt;span class="hljs-comment"&gt;&amp;#39; Chercher la ligne ou le numéro de fichier est égale à NumFichier.&lt;/span&gt;
                        &lt;span class="hljs-keyword"&gt;While&lt;/span&gt; ActiveCell.Value &amp;lt;&amp;gt; Num_Fichier
                &lt;span class="hljs-keyword"&gt;If&lt;/span&gt; ActiveCell.Row = Range(&lt;span class="hljs-string"&gt;&amp;#34;Etiquettes&amp;#34;&lt;/span&gt;).Row &lt;span class="hljs-keyword"&gt;Then&lt;/span&gt;
                    &lt;span class="hljs-keyword"&gt;GoTo&lt;/span&gt; Insérer_Ligne
                &lt;span class="hljs-keyword"&gt;End&lt;/span&gt; &lt;span class="hljs-keyword"&gt;If&lt;/span&gt;
                ActiveCell.Offset(&lt;span class="hljs-number"&gt;-1&lt;/span&gt;, &lt;span class="hljs-number"&gt;0&lt;/span&gt;).Range(&lt;span class="hljs-string"&gt;&amp;#34;a1:a1&amp;#34;&lt;/span&gt;).&lt;span class="hljs-keyword"&gt;Select&lt;/span&gt;
            &lt;span class="hljs-keyword"&gt;Wend&lt;/span&gt;
            &lt;span class="hljs-comment"&gt;&amp;#39;Vérifier le numéro d&amp;#39;indice de la ligne active.&lt;/span&gt;
                &lt;span class="hljs-keyword"&gt;If&lt;/span&gt; Cells(ActiveCell.Row, &lt;span class="hljs-number"&gt;165&lt;/span&gt;).Value &amp;lt;&amp;gt; ClasseurEnCours.Sheets(&lt;span class="hljs-string"&gt;&amp;#34;DATA&amp;#34;&lt;/span&gt;).Range(&lt;span class="hljs-string"&gt;&amp;#34;Dernier_Indice&amp;#34;&lt;/span&gt;) &lt;span class="hljs-keyword"&gt;Then&lt;/span&gt;
                    ActiveCell.Offset(&lt;span class="hljs-number"&gt;-1&lt;/span&gt;, &lt;span class="hljs-number"&gt;0&lt;/span&gt;).Range(&lt;span class="hljs-string"&gt;&amp;#34;A1:A1&amp;#34;&lt;/span&gt;).&lt;span class="hljs-keyword"&gt;Select&lt;/span&gt;
                    &lt;span class="hljs-keyword"&gt;GoTo&lt;/span&gt; Cherche_Numéro_Fichier
                &lt;span class="hljs-keyword"&gt;End&lt;/span&gt; &lt;span class="hljs-keyword"&gt;If&lt;/span&gt;
            ActiveCell.Offset(&lt;span class="hljs-number"&gt;0&lt;/span&gt;, &lt;span class="hljs-number"&gt;0&lt;/span&gt;).Range(&lt;span class="hljs-string"&gt;&amp;#34;A1:FM1&amp;#34;&lt;/span&gt;).Value = &lt;span class="hljs-string"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
        &lt;span class="hljs-keyword"&gt;End&lt;/span&gt; &lt;span class="hljs-keyword"&gt;If&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We start with another label, and… then we have a &lt;code&gt;Goto&lt;/code&gt;. A &lt;code&gt;Goto&lt;/code&gt; which jumps us back into the &lt;code&gt;If&lt;/code&gt; side of the conditional. A &lt;code&gt;Goto&lt;/code&gt; inside of a while loop, a while loop that&amp;#39;s marching around the spreadsheet to search for certain values in the cell.&lt;/p&gt;
&lt;p&gt;After the loop, we have &lt;em&gt;another&lt;/em&gt; &lt;code&gt;Goto&lt;/code&gt; which will possibly jump us up to the start of the &lt;code&gt;else&lt;/code&gt; block.&lt;/p&gt;
&lt;p&gt;The procedure ends with some cleanup:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-vbscript"&gt;&lt;span class="hljs-comment"&gt;&amp;#39;----- &lt;/span&gt;
&lt;span class="hljs-comment"&gt;&amp;#39; Do some stuff on the active cell and the following cells on the column&lt;/span&gt;
.-----
BaseDonnées.Close &lt;span class="hljs-literal"&gt;True&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;Set&lt;/span&gt; BaseDonnées = &lt;span class="hljs-literal"&gt;Nothing&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;End&lt;/span&gt; &lt;span class="hljs-keyword"&gt;Sub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I do not know what this function does, and the fact that the code is largely in a language I don&amp;#39;t speak isn&amp;#39;t the obstacle. I have no idea what the loops and the gotos are trying to do. I&amp;#39;m not even a &amp;#34;never use &lt;code&gt;Goto&lt;/code&gt; ever ever ever&amp;#34; person; in a language like VBA, it&amp;#39;s sometimes the best way to handle errors. But this bizarre time-traveling flow control boggles me.&lt;/p&gt;
&lt;p&gt;&amp;#34;Etiquettes&amp;#34; is French for &amp;#34;labels&amp;#34;, and it may be bad etiquette but I&amp;#39;ve got some four letter labels for this code.&lt;/p&gt;
&lt;!-- Easy Reader Version: GOTO considered harmful? Yeah, to my *sanity* --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/proget-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	ProGet’s got you covered with security and access controls on your NuGet feeds. &lt;a href="https://inedo.com/proget/private-nuget-server?utm_source=tdwtf&amp;amp;utm_medium=footer&amp;amp;utm_content=GotYouCoveredFooter&amp;amp;utm_campaign=Cyclops2020"&gt;Learn more.&lt;/a&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>13</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/good-etiquette</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Having a Beastly Time</title><link>https://thedailywtf.com/articles/having-a-beastly-time</link><category>Error'd</category><pubDate>Fri, 17 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/having-a-beastly-time</guid><description>&lt;p&gt;It&amp;#39;s time again for a reader special, and once again it&amp;#39;s all &lt;strong&gt;The Beast In Black&lt;/strong&gt; (there must be a story to that nick, no?).&lt;/p&gt;

&lt;p&gt;&amp;#34;MySQL is not better than your SQL,&amp;#34; he pontificated, 
&amp;#34;especially when
it comes to the Workbench Migration Wizard&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#7369002fc20e41b89b64ed7f32ef3641"&gt;&lt;img itemprop="image" border="0" alt="7369002fc20e41b89b64ed7f32ef3641" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/7369002fc20e41b89b64ed7f32ef3641.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#34;Sadly,&amp;#34; says he, 
&amp;#34;Not even gmail/chromium either.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#149c9109443f4521b1a38b91bd0bcc22"&gt;&lt;img itemprop="image" border="0" alt="149c9109443f4521b1a38b91bd0bcc22" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/149c9109443f4521b1a38b91bd0bcc22.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#34;Updated software is available, but there are no updates!&amp;#34; he puzzled.
&amp;#34;Clicking Install Now just throws
that dialog right back in my face. I&amp;#39;m re-cursing.&amp;#34; Zero, one, does it really make a difference?
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#e9ea57c886984dc8a106df503a2fd923"&gt;&lt;img itemprop="image" border="0" alt="e9ea57c886984dc8a106df503a2fd923" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/e9ea57c886984dc8a106df503a2fd923.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#34;Questions&amp;#34;
&lt;strong&gt;The Beast in Black&lt;/strong&gt;
&amp;#34;I do, in fact, have a question...&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#f5c83f7bc02644a895f1f9aa5ec368a1"&gt;&lt;img itemprop="image" border="0" alt="f5c83f7bc02644a895f1f9aa5ec368a1" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/f5c83f7bc02644a895f1f9aa5ec368a1.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;One of the foundational guides to my [lyle, not bib] engineering career
was John Bentley&amp;#39;s &lt;em&gt;Programming Pearls&lt;/em&gt;. These are not those.
&lt;br/&gt;
&amp;#34;Veni, vidi: vc. No pearls of wisdom here, just litter.&amp;#34; says
&lt;strong&gt;The Beast&lt;/strong&gt;.
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#4e13a188deb94473abcc6148d106458c"&gt;&lt;img itemprop="image" border="0" alt="4e13a188deb94473abcc6148d106458c" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/4e13a188deb94473abcc6148d106458c.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;div&gt;
	[Advertisement] &lt;b&gt;Plan Your .NET 9 Migration with Confidence&lt;/b&gt;&lt;br/&gt;Your journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. &lt;b&gt;&lt;a href="https://inedo.com/support/whitepapers/dotnet-guide?utm_campaign=dotnet&amp;amp;utm_source=tdwtf-footer"&gt;Download Free Guide Now!&lt;/a&gt;&lt;/b&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;</description><slash:comments>12</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/having-a-beastly-time</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: We'll Hire Better Contractors Next Time, We Promise</title><link>https://thedailywtf.com/articles/we-ll-hire-better-contractors-next-time-we-promise</link><category>CodeSOD</category><pubDate>Thu, 16 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/we-ll-hire-better-contractors-next-time-we-promise</guid><description>&lt;p&gt;&lt;strong&gt;Nona&lt;/strong&gt; writes: &amp;#34;this is the beginning of a 2100 line function.&amp;#34;&lt;/p&gt;
&lt;p&gt;That&amp;#39;s bad. Nona didn&amp;#39;t send us the entire JavaScript function, but sent us just the three early lines, which definitely raise concerns:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;&lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (res.&lt;span class="hljs-property"&gt;length&lt;/span&gt; &amp;gt; &lt;span class="hljs-number"&gt;0&lt;/span&gt;) {
  &lt;span class="hljs-keyword"&gt;await&lt;/span&gt; (&lt;span class="hljs-keyword"&gt;function&lt;/span&gt; (&lt;span class="hljs-params"&gt;&lt;/span&gt;) {
    &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; &lt;span class="hljs-keyword"&gt;new&lt;/span&gt; &lt;span class="hljs-title class_"&gt;Promise&lt;/span&gt;(&lt;span class="hljs-function"&gt;(&lt;span class="hljs-params"&gt;resolve, reject&lt;/span&gt;) =&amp;gt;&lt;/span&gt; {
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We await a synchronous function which retuns a promise, passing a function to the promise. As a general rule, you don&amp;#39;t construct promises directly, you let asynchronous code generate them and pass them around (or await them). It&amp;#39;s not a thing you &lt;em&gt;never&lt;/em&gt; do, but it&amp;#39;s certainly suspicious. It gets more problematic when Nona adds:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This function happens to contain multiple code repetition snippets, including these three lines.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;#39;s right, this little block appears multiple times in the function, &lt;em&gt;inside&lt;/em&gt; of anonymous function getting passed to the &lt;code&gt;Promise&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;No, the code does not work in its current state. It&amp;#39;s unclear what the 2100 line function was supposed to do. And yes, this was written by lowest-bidder third-party contractors.&lt;/p&gt;
&lt;p&gt;Nona adds:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I am numb at this point and know I gotta fix it or we lose contracts&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Management made the choice to &amp;#34;save money&amp;#34; by hiring third parties, and now Nona&amp;#39;s team gets saddled with all the crunch to fix the problems created by the &amp;#34;savings&amp;#34;.&lt;/p&gt;
&lt;!-- Easy Reader Version: "lowest bidder" plans to make as much, if not more profit, than the highest bidder- they just plan to spend way less doing it. --&gt;&lt;div&gt;
	[Advertisement] &lt;b&gt;Plan Your .NET 9 Migration with Confidence&lt;/b&gt;&lt;br/&gt;Your journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. &lt;b&gt;&lt;a href="https://inedo.com/support/whitepapers/dotnet-guide?utm_campaign=dotnet&amp;amp;utm_source=tdwtf-footer"&gt;Download Free Guide Now!&lt;/a&gt;&lt;/b&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;</description><slash:comments>14</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/we-ll-hire-better-contractors-next-time-we-promise</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Three Letter Acronyms, Four Letter Words</title><link>https://thedailywtf.com/articles/three-letter-acronyms-four-letter-words</link><category>CodeSOD</category><pubDate>Wed, 15 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/three-letter-acronyms-four-letter-words</guid><description>&lt;p&gt;&lt;strong&gt;Candice&lt;/strong&gt; (&lt;a href="https://thedailywtf.com/articles/negative-creep"&gt;previously&lt;/a&gt;) has another WTF to share for us.&lt;/p&gt;
&lt;p&gt;We&amp;#39;re going to start by just looking at one fragment of a class defined in this C++ code: &lt;code&gt;TLAflaList&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Every type and variable has a three-letter-acronym buried in its name. The specific meaning of most of the acronyms are mostly lost to time, so &amp;#34;TLA&amp;#34; is as good as any other three random letters. No one knows what &amp;#34;fla&amp;#34; is.&lt;/p&gt;
&lt;p&gt;What drew Candice&amp;#39;s attention was that there was a type called &amp;#34;list&amp;#34;, which implies they&amp;#39;re maybe not using the standard library and have reinvented a wheel. Another data point arguing in favor of that is that the class had a method called &lt;code&gt;getNumElements&lt;/code&gt;, instead of something more conventional like &lt;code&gt;size&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s look at that function:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;&lt;span class="hljs-function"&gt;&lt;span class="hljs-type"&gt;size_t&lt;/span&gt; &lt;span class="hljs-title"&gt;TLAflaList::getNumElements&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt;
&lt;/span&gt;{
	&lt;span class="hljs-keyword"&gt;return&lt;/span&gt; mv_FLAarray.&lt;span class="hljs-built_in"&gt;size&lt;/span&gt;();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In addition to the meaningless three-letter-acronyms which start every type and variable, we&amp;#39;re also adding on a lovely bit of hungarian notation, throwing &lt;code&gt;mv_&lt;/code&gt; on the front for a member variable. The variable is called &amp;#34;array&amp;#34;, but &lt;em&gt;is&lt;/em&gt; it? Let&amp;#39;s look at that definition.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;&lt;span class="hljs-keyword"&gt;class&lt;/span&gt; &lt;span class="hljs-title class_"&gt;TLAflaList&lt;/span&gt;
{
	…
	&lt;span class="hljs-keyword"&gt;private&lt;/span&gt;:
		TLAflaArray_t mv_FLAarray;
		…
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Okay, that gives me a lot more nonsense letters but I still have no idea what that variable is. Where&amp;#39;s that type defined? The good news, it&amp;#39;s in the same header.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;&lt;span class="hljs-keyword"&gt;typedef&lt;/span&gt; std::vector&amp;lt;INtabCRMprdinvusage_t*&amp;gt; TLAflaArray_t;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So it&amp;#39;s not a list or an array, it&amp;#39;s a vector. A vector of bare pointers, which definitely makes me worry about inevitable use-after-free errors or memory leaks. Who owns the memory that those pointers are referencing?&lt;/p&gt;
&lt;p&gt;&amp;#34;IN&amp;#34; in the type name is an old company, good ol&amp;#39; Initrode, which got acquired a decade ago. &amp;#34;tab&amp;#34; tells us that it&amp;#39;s meant to be a database table. We can guess at the rest.&lt;/p&gt;
&lt;p&gt;This isn&amp;#39;t a codebase, it&amp;#39;s a bad Scrabble hand. It&amp;#39;s also a trainwreck. Confusing, disorganized, and all of that made worse by piles of &lt;code&gt;typedef&lt;/code&gt;s that hide what you&amp;#39;re actually doing and endless acronyms that make it impossible to read.&lt;/p&gt;
&lt;p&gt;One last detail, which I&amp;#39;ll let Candice explain:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I started scrolling down the class definition - it took longer than it should have, given that the company coding style is to double-space the overwhelming majority of lines.  (Seriously; I&amp;#39;ve seen single character braces sandwiched by two lines of nothing.)  On the upside, this was one of the classes with just one public block and one private block - some classes like to ping-pong back and forth a half-dozen times.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- ERV: WTFBBQ TMAMCUAIR? --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/proget-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	ProGet’s got you covered with security and access controls on your NuGet feeds. &lt;a href="https://inedo.com/proget/private-nuget-server?utm_source=tdwtf&amp;amp;utm_medium=footer&amp;amp;utm_content=GotYouCoveredFooter&amp;amp;utm_campaign=Cyclops2020"&gt;Learn more.&lt;/a&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>18</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/three-letter-acronyms-four-letter-words</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>A Hole in Your Plan</title><link>https://thedailywtf.com/articles/a-hole-in-your-plan</link><category>Feature Articles</category><pubDate>Tue, 14 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/a-hole-in-your-plan</guid><description>&lt;p&gt;&lt;strong&gt;Theresa&lt;/strong&gt; works for a company that handles a fair bit of personally identifiable information that can be tied to health care data, so for them, security matters. They need to comply with security practices laid out by a variety of standards bodies and be able to demonstrate that compliance.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s a dirty secret about standards compliance, though. Most of these standards are trying to avoid being overly technically prescriptive. So frequently, they may have something like, &amp;#34;a process must exist for securely destroying storage devices before they are disposed of.&amp;#34; Maybe it will include some examples of what you could do to meet this standard, but the important thing is that you have to have a &lt;em&gt;process&lt;/em&gt;. This means that if you whip up a Word document called &amp;#34;Secure Data Destruction Process&amp;#34; and tell people they should follow it, you can check off that box on your compliance. Sometimes, you need to validate the process; sometimes you need to have other processes which ensure this process is being followed. What you need to do and to what complexity depends on the compliance structure you&amp;#39;re beholden to. Some of them are surprisingly flexible, which is a polite way of saying &amp;#34;mostly meaningless&amp;#34;.&lt;/p&gt;
&lt;p&gt;Theresa&amp;#39;s company has a process for safely destroying hard drives. They even validated it, shortly after its introduction. They even have someone who checks that the process has been followed. The process is this: in the basement, someone set up a cheap drill press, and attached a wooden jig to it. You slap the hard drive in the jig, turn on the drill, and brrrrzzzzzz- poke a hole through the platters making the drive unreadable.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s just one problem with that process: the company recently switched to using SSDs. The SSDs are in a carrier which makes them share the same form factor as old-style spinning disk drives, but that&amp;#39;s just a thin plastic shell. The actual electronics package where the data is stored is quite small. Small enough, and located in a position where the little jig attached to the drill guarantees that the drill won&amp;#39;t even touch the SSD at all.&lt;/p&gt;
&lt;p&gt;For months now, whenever a drive got decommissioned, the IT drone responsible for punching a hole through it has just been drilling through plastic, and nothing else. An unknown quantity of hard drives have been sent out for recycling with PII and health data on them. But it&amp;#39;s okay, because &lt;em&gt;the process was followed&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The compliance team at the company will update the process, probably after six months of meetings and planning and approvals from all of the stakeholders. Though it may take longer to glue together a new jig for the SSDs.&lt;/p&gt;
&lt;!-- Easy Reader Version: On the flip side, some standards are weirdly prescriptive, like requiring a hardware firewall between sections of the network, down to the specific brands allowed. --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/buildmaster-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	&lt;a href="https://inedo.com/BuildMaster?utm_source=tdwtf&amp;amp;utm_medium=footerad&amp;amp;utm_term=2018&amp;amp;utm_content=Self_Service&amp;amp;utm_campaign=Buildmaster_Footer"&gt;BuildMaster&lt;/a&gt; allows you to create a self-service release management platform that allows different teams to manage their applications. &lt;a href="https://inedo.com/BuildMaster/download?utm_source=tdwtf&amp;amp;utm_medium=footerad&amp;amp;utm_term=2018&amp;amp;utm_content=Self_Service&amp;amp;utm_campaign=Buildmaster_Footer"&gt;Explore how!&lt;/a&gt; 
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>41</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/a-hole-in-your-plan</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Non-cogito Ergo c_str</title><link>https://thedailywtf.com/articles/non-cogito-ergo-c-str</link><category>CodeSOD</category><pubDate>Mon, 13 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/non-cogito-ergo-c-str</guid><description>&lt;p&gt;&lt;strong&gt;Tim&lt;/strong&gt; (&lt;a href="https://thedailywtf.com/articles/expressing-a-leak"&gt;previously&lt;/a&gt;) supports a relatively ancient C++ application. And that creates some interesting conundrums, as the way you wrote C++ in 2003 is not the way you would write it even a few years later. The standard matured quickly.&lt;/p&gt;
&lt;p&gt;Way back in 2003, it was still common to use C-style strings, instead of the C++ &lt;code&gt;std::string&lt;/code&gt; type. It seems silly, but people had Strong Opinions™ about using standard library types, and much of your C++ code was probably interacting with C libraries, so yeah, C-strings stuck around for a long time.&lt;/p&gt;
&lt;p&gt;For Tim&amp;#39;s company, however, the migration away from C-strings was in 2007.&lt;/p&gt;
&lt;p&gt;So they wrote this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;&lt;span class="hljs-keyword"&gt;if&lt;/span&gt;( ! &lt;span class="hljs-built_in"&gt;strncmp&lt;/span&gt;( pdf-&amp;gt;&lt;span class="hljs-built_in"&gt;symTabName&lt;/span&gt;().&lt;span class="hljs-built_in"&gt;c_str&lt;/span&gt;(), prefix.&lt;span class="hljs-built_in"&gt;c_str&lt;/span&gt;(), &lt;span class="hljs-built_in"&gt;strlen&lt;/span&gt;( prefix.&lt;span class="hljs-built_in"&gt;c_str&lt;/span&gt;() ) ) ) {
    &lt;span class="hljs-comment"&gt;// do stuff&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is doing a &amp;#34;starts with&amp;#34; check. &lt;code&gt;strncmp&lt;/code&gt;, &lt;code&gt;strlen&lt;/code&gt; are both functions which operate on C-strings. So we compare the &lt;code&gt;symTabName&lt;/code&gt; against the &lt;code&gt;prefix&lt;/code&gt;, but only look at as many characters as are in the prefix. As is common, &lt;code&gt;strncmp&lt;/code&gt; returns 0 if the two strings are equal, so we negate that to say &amp;#34;if the &lt;code&gt;symTabName&lt;/code&gt; starts with &lt;code&gt;prefix&lt;/code&gt;, do stuff&amp;#34;.&lt;/p&gt;
&lt;p&gt;In C code, this is very much how you would do this, though you might contemplate turning it into a function. Though maybe not.&lt;/p&gt;
&lt;p&gt;In C++, in 2007, you &lt;em&gt;do not&lt;/em&gt; have a built-in &lt;code&gt;starts_with&lt;/code&gt; function- you have to wait until the C++20 standard for that- but you have some string handling functions which could make this more clear. As Tim points out, the &amp;#34;correct&amp;#34; answer is: &lt;code&gt;if(pdf-&amp;gt;symTabName().find(prefix) != 0UL)&lt;/code&gt;. It&amp;#39;s more readable, it doesn&amp;#39;t involve poking around with &lt;code&gt;char*&lt;/code&gt;s, and also isn&amp;#39;t spamming that extra whitespace between every parenthesis and operator.&lt;/p&gt;
&lt;p&gt;Tim writes: &amp;#34;String handling in C++ is pretty terrible, but it doesn&amp;#39;t have to be this terrible.&amp;#34;&lt;/p&gt;
&lt;!-- Easy Reader Version: Strings were a mistake. We shouldn't use text to communicate anymore. Let LLMs do that, we can just use pure numbers and mathematics. --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/proget-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	ProGet’s got you covered with security and access controls on your NuGet feeds. &lt;a href="https://inedo.com/proget/private-nuget-server?utm_source=tdwtf&amp;amp;utm_medium=footer&amp;amp;utm_content=GotYouCoveredFooter&amp;amp;utm_campaign=Cyclops2020"&gt;Learn more.&lt;/a&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>24</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/non-cogito-ergo-c-str</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Youth is Wasted on the Junge</title><link>https://thedailywtf.com/articles/youth-is-wasted-on-the-junge</link><category>Error'd</category><pubDate>Fri, 10 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/youth-is-wasted-on-the-junge</guid><description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;#34;My thoughts exactly&amp;#34; muttered 
&lt;strong&gt;Jason H.&lt;/strong&gt;
&amp;#34;I was in a system that avoids check constraints and
the developers never seemed to agree to a T/F or
Y/N or 1/0 for indicator columns. All data in a
column will use the same pattern but different columns in
the same table will use different patterns so I&amp;#39;m not
sure why I was surprised when I came across the
attached. Sort the data descending and you have the shorthand
for what I uttered.&amp;#34; How are these all unique?
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#4af53c55b8564b34a6f12916571c92fd"&gt;&lt;img itemprop="image" border="0" alt="4af53c55b8564b34a6f12916571c92fd" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/4af53c55b8564b34a6f12916571c92fd.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
&amp;#34;I&amp;#39;d better act quickly!&amp;#34;
&lt;strong&gt;Hugh Scenic&lt;/strong&gt; almost panicked.
&amp;#34;This Microsoft Rewards offer might
expire (in just under 74 years)!&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#50a5533b37f54e6ebbfc460136507205"&gt;&lt;img itemprop="image" border="0" alt="50a5533b37f54e6ebbfc460136507205" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/50a5533b37f54e6ebbfc460136507205.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;#34;Copy-copy-copy&amp;#34; repeated 
&lt;strong&gt;Gordon&lt;/strong&gt;.
&amp;#34;Not sure I want the team to be in touch
- my query might be best left unanswered.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#617f1082b64f442aa146e47115c5b6fa"&gt;&lt;img itemprop="image" border="0" alt="617f1082b64f442aa146e47115c5b6fa" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/617f1082b64f442aa146e47115c5b6fa.jpeg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
&amp;#34;Was Comcast&amp;#39;s episode guide data hacked by MAGA?&amp;#34;
&lt;strong&gt;Barry M.&lt;/strong&gt;
wondered. &amp;#34;This is
not the usual generic description of Real Time.&amp;#34; 
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#6af551a6d02e417eb4d0fb3470f8fbb1"&gt;&lt;img itemprop="image" border="0" alt="6af551a6d02e417eb4d0fb3470f8fbb1" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/6af551a6d02e417eb4d0fb3470f8fbb1.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;#34;&lt;strong&gt;Holiday Workshop for Children&lt;/strong&gt;
learning how to write web pages, apparently,&amp;#34; notes self-named 
&lt;strong&gt;Youth P.&lt;/strong&gt;
&amp;#34;You need a new category - because it is no
error to involve young people in a
web design workshop during their holidays. A little bit of
a surprise was that it will happen in a local
museum, and that children between 8 and 12 are the
target audience - should they really already think about their
work future?&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#c3cced1e818d499ea652a80a7d1cbc71"&gt;&lt;img itemprop="image" border="0" alt="c3cced1e818d499ea652a80a7d1cbc71" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/04/05/c3cced1e818d499ea652a80a7d1cbc71.jpeg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;div&gt;
	[Advertisement] &lt;b&gt;Plan Your .NET 9 Migration with Confidence&lt;/b&gt;&lt;br/&gt;Your journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. &lt;b&gt;&lt;a href="https://inedo.com/support/whitepapers/dotnet-guide?utm_campaign=dotnet&amp;amp;utm_source=tdwtf-footer"&gt;Download Free Guide Now!&lt;/a&gt;&lt;/b&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;</description><slash:comments>9</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/youth-is-wasted-on-the-junge</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Take a Percentage</title><link>https://thedailywtf.com/articles/take-a-percentage</link><category>CodeSOD</category><pubDate>Thu, 09 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/take-a-percentage</guid><description>&lt;p&gt;When looking at the source of a major news site, today&amp;#39;s anonymous submitter sends us this very, very mild, but also very funny WTF:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-html"&gt;	&lt;span class="hljs-tag"&gt;&amp;lt;&lt;span class="hljs-name"&gt;div&lt;/span&gt; &lt;span class="hljs-attr"&gt;class&lt;/span&gt;=&lt;span class="hljs-string"&gt;&amp;#34;g-vhs g-videotape g-cinemagraph&amp;#34;&lt;/span&gt; &lt;span class="hljs-attr"&gt;id&lt;/span&gt;=&lt;span class="hljs-string"&gt;&amp;#34;g-video-178_article_slug-640w&amp;#34;&lt;/span&gt;
		 &lt;span class="hljs-attr"&gt;data-type&lt;/span&gt;=&lt;span class="hljs-string"&gt;&amp;#34;videotape&amp;#34;&lt;/span&gt; &lt;span class="hljs-attr"&gt;data-asset&lt;/span&gt;=&lt;span class="hljs-string"&gt;&amp;#34;https://somesite.com/videos/file.mp4&amp;#34;&lt;/span&gt; &lt;span class="hljs-attr"&gt;data-cinemagraph&lt;/span&gt;=&lt;span class="hljs-string"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class="hljs-attr"&gt;data-allow-multiple-players&lt;/span&gt;=&lt;span class="hljs-string"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
		 &lt;span class="hljs-attr"&gt;data-vhs-options&lt;/span&gt;=&lt;span class="hljs-string"&gt;&amp;#39;{&amp;#34;ratio&amp;#34;:&amp;#34;560:320&amp;#34;}&amp;#39;&lt;/span&gt;
		 &lt;span class="hljs-attr"&gt;style&lt;/span&gt;=&lt;span class="hljs-string"&gt;&amp;#34;padding-bottom: 57.14285714285714%&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look, I know that percentage was calculated by JavaScript, or maybe the backend, or maybe calculated by a CSS pre-processor. No human typed that. There&amp;#39;s nothing to gain by adding a rounding operation. There&amp;#39;s nothing truly &lt;em&gt;wrong&lt;/em&gt; with that line of code.&lt;/p&gt;
&lt;p&gt;But I can&amp;#39;t help but think about the comedic value in controlling your page layout down to sub-sub-sub-sub-sub-sub-sub-sub-pixel precision. This code will continue to have pixel accuracy out to screens with quadrillions of pixels, making it incredibly future proof.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s made extra funny by calling the video player &lt;code&gt;VHS&lt;/code&gt; and suggesting the appropriate ratio is 560 pixels by 320- which is not &lt;em&gt;quite&lt;/em&gt; 16:9, but is a frequent letterbox ratio on DVD prints of movies.&lt;/p&gt;
&lt;p&gt;In any case, I eagerly await a 20-zetta-pixel displays, so I can read the news in its intended glory.&lt;/p&gt;
&lt;!-- Easy Reader Version: I bet the person responsible has memorized all the digits of pi --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/buildmaster-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	&lt;a href="https://inedo.com/BuildMaster?utm_source=tdwtf&amp;amp;utm_medium=footerad&amp;amp;utm_term=2018&amp;amp;utm_content=Confidence&amp;amp;utm_campaign=Buildmaster_Footer"&gt;Utilize BuildMaster&lt;/a&gt; to release your software with confidence, at the pace your business demands. &lt;a href="https://inedo.com/BuildMaster/download?utm_source=tdwtf&amp;amp;utm_medium=footerad&amp;amp;utm_term=2018&amp;amp;utm_content=Confidence&amp;amp;utm_campaign=Buildmaster_Footer"&gt;Download&lt;/a&gt; today!  
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>19</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/take-a-percentage</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Two Conversions</title><link>https://thedailywtf.com/articles/two-conversions</link><category>CodeSOD</category><pubDate>Wed, 08 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/two-conversions</guid><description>&lt;p&gt;The father of the &amp;#34;billion dollar mistake&amp;#34; &lt;a href="https://en.wikipedia.org/wiki/Tony_Hoare"&gt;left us&lt;/a&gt; last month. His pointer is finally null. Speaking of null handling, &lt;strong&gt;Randy&lt;/strong&gt; says he was &amp;#34;spelunking&amp;#34; through his codebase and found this pair of functions, which handles null.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-java"&gt;&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; String &lt;span class="hljs-title function_"&gt;getDataString&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt; {
    &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (dataString == &lt;span class="hljs-literal"&gt;null&lt;/span&gt;) {
        &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; Constants.NOT_AVAILABLE;
    }
    &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; asUnicode(dataString);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I assume &lt;code&gt;Constants.NOT_AVAILABLE&lt;/code&gt; is an empty string, or something similar. It&amp;#39;s reasonable to convert a null into something like that. I don&amp;#39;t know where this fits in the overall stack; I&amp;#39;m of the mind that you should retain the null until you absolutely can&amp;#39;t anymore; like it or not, a &lt;code&gt;null&lt;/code&gt; means something different than an empty string. Or, if we&amp;#39;re going that far, we should be talking about using &lt;code&gt;Optional&lt;/code&gt; or nullable types.&lt;/p&gt;
&lt;p&gt;But that call to &lt;code&gt;asUnicode&lt;/code&gt; seems curious. What&amp;#39;s happening in there?&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-java"&gt;&lt;span class="hljs-keyword"&gt;private&lt;/span&gt; String &lt;span class="hljs-title function_"&gt;asUnicode&lt;/span&gt;&lt;span class="hljs-params"&gt;(String rawValue)&lt;/span&gt; {
    &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (rawValue != &lt;span class="hljs-literal"&gt;null&lt;/span&gt;) {
        &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; HtmlUtils.htmlUnescape(rawValue);
    }
    &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; {
        &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; rawValue;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This function, which is only called from &lt;code&gt;getDataString&lt;/code&gt;, checks for a null. Which we know it won&amp;#39;t get, but it checks anyway. If it isn&amp;#39;t null, we unescape it. If it is null, we return that null.&lt;/p&gt;
&lt;p&gt;Well, I suppose that fits my rule of &amp;#34;retaining the null&amp;#34;, but like, in the worst way you could do it. It honestly feels like, if the &amp;#34;swap the null for an empty string&amp;#34; happens anywhere, it should happen &lt;em&gt;here&lt;/em&gt;. If I ask for the unescaped version of a null string, an empty string is a reasonable return. That makes more sense that doing it in a property getter.&lt;/p&gt;
&lt;p&gt;This code isn&amp;#39;t a trainwreck, but it makes things confusing. Maybe it&amp;#39;s because I&amp;#39;ve been doing a &lt;em&gt;lot&lt;/em&gt; of refactoring lately, but confusing code with unclear boundaries between functions is a raw nerve for me right now, and this particular example is stepping on that nerve.&lt;/p&gt;
&lt;p&gt;While we&amp;#39;re talking about unclear boundaries, I object to the idea that this class is storing &lt;code&gt;dataString&lt;/code&gt; as an HTML escaped string that we unescape any time we want to look at it. It implies that there&amp;#39;s some confusion about which representation is the canonical one: unescaped or escaped. We should store &lt;em&gt;the canonical&lt;/em&gt; one, which I think is unescaped. We should only escape it at the point where we&amp;#39;re sending it into an HTML document (or similar). Convert &lt;em&gt;at the module boundary&lt;/em&gt;, not just any time you want to look at a string.&lt;/p&gt;
&lt;!-- Easy Reader Version: "convert at module boundaries" seems like too tall a demand for a lot of developers --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/buildmaster-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	&lt;a href="https://inedo.com/BuildMaster?utm_source=tdwtf&amp;amp;utm_medium=footerad&amp;amp;utm_term=2018&amp;amp;utm_content=Confidence&amp;amp;utm_campaign=Buildmaster_Footer"&gt;Utilize BuildMaster&lt;/a&gt; to release your software with confidence, at the pace your business demands. &lt;a href="https://inedo.com/BuildMaster/download?utm_source=tdwtf&amp;amp;utm_medium=footerad&amp;amp;utm_term=2018&amp;amp;utm_content=Confidence&amp;amp;utm_campaign=Buildmaster_Footer"&gt;Download&lt;/a&gt; today!  
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>15</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/two-conversions</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Proper Property Validation</title><link>https://thedailywtf.com/articles/proper-property-validation</link><category>CodeSOD</category><pubDate>Tue, 07 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/proper-property-validation</guid><description>&lt;p&gt;&lt;strong&gt;Tim H&lt;/strong&gt; inherited some code which has objects that have many, many properties properties on them. Which is bad. That clearly has no cohesion. But it&amp;#39;s okay, there&amp;#39;s a validator function which confirms that object is properly populated.&lt;/p&gt;
&lt;p&gt;The conditions and body of the conditionals have been removed, so we can see what the flow of the code looks like.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;&lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
    &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {

    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {

    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (...) {
        
    }
} &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; {
  &lt;span class="hljs-comment"&gt;// default&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It&amp;#39;s important to note that this conditional doesn&amp;#39;t validate &lt;em&gt;every&lt;/em&gt; property on the object. Just most of them.&lt;/p&gt;
&lt;p&gt;Even with autocomplete I feel like this is going to make you wear out your &amp;#34;{&amp;#34; key.&lt;/p&gt;
&lt;!-- Easy Reader Version: Too many properties --&gt;
&lt;style&gt;.comment { border: none; }&lt;/style&gt;&lt;div&gt;
	[Advertisement] Picking up &lt;b&gt;NuGet&lt;/b&gt; is easy. Getting good at it takes time. &lt;a href="https://inedo.com/support/whitepapers/nuget-guide?utm_source=tdwtf&amp;amp;utm_medium=Footerad&amp;amp;utm_campaign=nuget"&gt;Download our guide to learn the best practice of NuGet for the Enterprise.&lt;/a&gt;

&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;</description><slash:comments>26</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/proper-property-validation</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: The Update Route</title><link>https://thedailywtf.com/articles/the-update-route</link><category>CodeSOD</category><pubDate>Mon, 06 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-update-route</guid><description>&lt;p&gt;Today&amp;#39;s anonymous submission is one of the entries where I look at it and go, &amp;#34;Wait, that&amp;#39;s totally wrong, that could have never worked.&amp;#34; And then I realize, that&amp;#39;s &lt;em&gt;why&lt;/em&gt; it was submitted: it was absolutely broken code which got to production, &lt;em&gt;somehow&lt;/em&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;&lt;span class="hljs-title class_"&gt;Collection&lt;/span&gt;.&lt;span class="hljs-title function_"&gt;updateOne&lt;/span&gt;(query, update, &lt;span class="hljs-keyword"&gt;function&lt;/span&gt;(&lt;span class="hljs-params"&gt;err, result, next&lt;/span&gt;)=&amp;gt;{
&lt;span class="hljs-keyword"&gt;if&lt;/span&gt;(err) &lt;span class="hljs-title function_"&gt;next&lt;/span&gt;(err)
...
})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So, &lt;code&gt;Collection.updateOne&lt;/code&gt; is an API method for MongoDB. It takes three parameters: a filter to find the document, an update to perform on the document, and then an object containing other parameters to control how that update is done.&lt;/p&gt;
&lt;p&gt;So this code is simply &lt;em&gt;wrong&lt;/em&gt;. But it&amp;#39;s worse than that, because it&amp;#39;s wrong in a stupid way.&lt;/p&gt;
&lt;p&gt;When creating routes using ExpressJS, you define a route and a callback to handle the route. The callback takes a few parameters: the request the browser sent, the result we&amp;#39;re sending back, and a next function, which lets you have multiple callbacks attached to the same route. By invoking &lt;code&gt;next()&lt;/code&gt; you&amp;#39;re passing control to the &lt;em&gt;next&lt;/em&gt; callback in the chain.&lt;/p&gt;
&lt;p&gt;So what we have here is either an absolute brain fart, or more likely, a find-and-replace failure. A route handling callback got mixed in with database operations (which, as an aside, if your route handling code is anywhere near database code, you&amp;#39;ve also made a &lt;em&gt;horrible&lt;/em&gt; mistake). The result is a line of code that doesn&amp;#39;t work. And then someone released this non-working code into production.&lt;/p&gt;
&lt;p&gt;Our submiter writes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This blew up our logs today, has been in the code since 2019. I removed it in a handful of other places too.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Which raises the other question: why didn&amp;#39;t this blow up the logs &lt;em&gt;earlier&lt;/em&gt;?&lt;/p&gt;
&lt;!-- Easy Reader Version: Obviously diseased code released in 2019. Is this where COVID came from? --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/proget-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	ProGet’s got you covered with security and access controls on your NuGet feeds. &lt;a href="https://inedo.com/proget/private-nuget-server?utm_source=tdwtf&amp;amp;utm_medium=footer&amp;amp;utm_content=GotYouCoveredFooter&amp;amp;utm_campaign=Cyclops2020"&gt;Learn more.&lt;/a&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>8</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/the-update-route</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Clever domain name here</title><link>https://thedailywtf.com/articles/clever-domain-name-here</link><category>Error'd</category><pubDate>Fri, 03 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/clever-domain-name-here</guid><description>&lt;p&gt;
&lt;/p&gt;

&lt;p&gt;An anonymous cable-puller wrote 
&amp;#34;Reading a long specification manual.
The words &amp;#34;shall&amp;#34; and &amp;#34;shall not&amp;#34; have specific meaning,
and throughout the document are in bold italic. Looks
like someone got a bit shall-ow with their search-and-replace
skills.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#2"&gt;&lt;img itemprop="image" border="0" alt="2" src="https://d3hvi6t161kfmf.cloudfront.net/images/24/q1/318/search_and_replace1.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Picki 
&lt;strong&gt;jeffphi
&lt;/strong&gt; attends to details.
&amp;#34;Apparently this recruiter doesn&amp;#39;t have a goal or metric
around proper brace selection and matching.&amp;#34; You&amp;#39;re hired.
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#0"&gt;&lt;img itemprop="image" border="0" alt="0" src="https://d3hvi6t161kfmf.cloudfront.net/images/24/q1/318/recruitingbraces1.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;UGG.LI admins
&lt;/strong&gt; highlighted
&amp;#34;even KFC hat Breakpoints deployed in Prod now ...&amp;#34;
I wanted to say something funny about Herren Admins&amp;#39; Handle
but reminded myself of John Scalzi&amp;#39;s quote about the
failure case of smartass so I refrained. You might be funnier than I.
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#1"&gt;&lt;img itemprop="image" border="0" alt="1" src="https://d3hvi6t161kfmf.cloudfront.net/images/24/q1/318/kfs_creakpoinrt1.jpeg"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Smarter still,
&lt;strong&gt;Steve
&lt;/strong&gt; says 
&amp;#34;A big company like Google surely has a huge QA staff and AI bots to make sure embarrassing typos don&amp;#39;t slip through, right? You wouldn&amp;#39;t want to damage you reputation...&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#3"&gt;&lt;img itemprop="image" border="0" alt="3" src="https://d3hvi6t161kfmf.cloudfront.net/images/24/q1/318/yougoogle1.jpeg"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I&amp;#39;ll bet 
&lt;strong&gt;Pascal
&lt;/strong&gt; didn&amp;#39;t expect this, eh?
&amp;#34;Delivered, but On the way, Searching for a driver, but Asdrubal&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#4"&gt;&lt;img itemprop="image" border="0" alt="4" src="https://d3hvi6t161kfmf.cloudfront.net/images/24/q1/318/202603151b1.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/proget-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [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.&lt;a href="https://inedo.com/proget?utm_source=tdwtf&amp;amp;utm_medium=footer&amp;amp;utm_content=PlebsFooter"&gt;Learn more.&lt;/a&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>11</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/clever-domain-name-here</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: One Case</title><link>https://thedailywtf.com/articles/one-case</link><category>CodeSOD</category><pubDate>Thu, 02 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/one-case</guid><description>&lt;p&gt;I feel like we&amp;#39;ve gotten a few SQL case statement abuses recently, but a properly bad one continues to tickle me. &lt;strong&gt;Ken C&lt;/strong&gt; sends us one that, well:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sql"&gt;&lt;span class="hljs-keyword"&gt;SELECT&lt;/span&gt; &lt;span class="hljs-keyword"&gt;CASE&lt;/span&gt; h.DOCUMENTTYPE
        &lt;span class="hljs-keyword"&gt;WHEN&lt;/span&gt; &lt;span class="hljs-number"&gt;2&lt;/span&gt; &lt;span class="hljs-keyword"&gt;THEN&lt;/span&gt; &lt;span class="hljs-number"&gt;3&lt;/span&gt; &lt;span class="hljs-keyword"&gt;WHEN&lt;/span&gt; &lt;span class="hljs-number"&gt;3&lt;/span&gt; &lt;span class="hljs-keyword"&gt;THEN&lt;/span&gt; &lt;span class="hljs-number"&gt;4&lt;/span&gt; &lt;span class="hljs-keyword"&gt;WHEN&lt;/span&gt; &lt;span class="hljs-number"&gt;4&lt;/span&gt; &lt;span class="hljs-keyword"&gt;THEN&lt;/span&gt; &lt;span class="hljs-number"&gt;5&lt;/span&gt;
        &lt;span class="hljs-keyword"&gt;WHEN&lt;/span&gt; &lt;span class="hljs-number"&gt;5&lt;/span&gt; &lt;span class="hljs-keyword"&gt;THEN&lt;/span&gt; &lt;span class="hljs-number"&gt;6&lt;/span&gt; &lt;span class="hljs-keyword"&gt;WHEN&lt;/span&gt; &lt;span class="hljs-number"&gt;6&lt;/span&gt; &lt;span class="hljs-keyword"&gt;THEN&lt;/span&gt; &lt;span class="hljs-number"&gt;7&lt;/span&gt; &lt;span class="hljs-keyword"&gt;WHEN&lt;/span&gt; &lt;span class="hljs-number"&gt;7&lt;/span&gt; &lt;span class="hljs-keyword"&gt;THEN&lt;/span&gt; &lt;span class="hljs-number"&gt;8&lt;/span&gt;
        &lt;span class="hljs-keyword"&gt;ELSE&lt;/span&gt; h.DOCUMENTTYPE
    &lt;span class="hljs-keyword"&gt;END&lt;/span&gt; &lt;span class="hljs-keyword"&gt;AS&lt;/span&gt; DocumentType,
    h.DOCNMBR &lt;span class="hljs-keyword"&gt;AS&lt;/span&gt; DocNmbr,
    h.FULLPOLICY &lt;span class="hljs-keyword"&gt;AS&lt;/span&gt; FullPolicy,
    h.BATCHID &lt;span class="hljs-keyword"&gt;AS&lt;/span&gt; BatchId,
    h.OrigBatchId,
    h.UPDATEDDATE &lt;span class="hljs-keyword"&gt;AS&lt;/span&gt; UpdatedDate,
    h.CUSTOMERNO &lt;span class="hljs-keyword"&gt;AS&lt;/span&gt; CustomerNo,
    h.PROJECTID &lt;span class="hljs-keyword"&gt;AS&lt;/span&gt; ProjectID,
    h.AMOUNT &lt;span class="hljs-keyword"&gt;AS&lt;/span&gt; Amount
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On one hand, I can&amp;#39;t say &amp;#34;just add one&amp;#34;, because clearly sometimes they don&amp;#39;t want to add one. On the other hand, there&amp;#39;s an element of looking at this and knowing: well, something absolutely stupid has happened here. Maybe it was two disjoint databases getting merged. Maybe it was just once upon a time, when this database was a spreadsheet, the user responsible did a weird thing. Maybe some directive changed the document type numbering. Hell, maybe that &lt;code&gt;ELSE&lt;/code&gt; clause never gets triggered, and we actually could just do arithmetic.&lt;/p&gt;
&lt;!-- Easy Reader Version: I don't know, isn't this kinda close to how Russell derived integers from sets? IDK, I didn't actually read Russell. --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/buildmaster-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	&lt;a href="https://inedo.com/BuildMaster?utm_source=tdwtf&amp;amp;utm_medium=footerad&amp;amp;utm_term=2018&amp;amp;utm_content=Self_Service&amp;amp;utm_campaign=Buildmaster_Footer"&gt;BuildMaster&lt;/a&gt; allows you to create a self-service release management platform that allows different teams to manage their applications. &lt;a href="https://inedo.com/BuildMaster/download?utm_source=tdwtf&amp;amp;utm_medium=footerad&amp;amp;utm_term=2018&amp;amp;utm_content=Self_Service&amp;amp;utm_campaign=Buildmaster_Footer"&gt;Explore how!&lt;/a&gt; 
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>31</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/one-case</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Corporate Language Compliance Generator</title><link>https://thedailywtf.com/articles/corporate-language-compliance-generator</link><category>Feature Articles</category><pubDate>Wed, 01 Apr 2026 08:00:00 GMT</pubDate><guid>https://thedailywtf.com/articles/corporate-language-compliance-generator</guid><description>&lt;p&gt;You&amp;#39;ve already &lt;a href="https://thedailywtf.com/articles/corporate-language-compliance"&gt;read the longer&lt;/a&gt; version. You need a quick phrase of corpo-speak to distract and confuse your rivals. Here&amp;#39;s the generator for doing that: &lt;/p&gt;

&lt;div style="border: 1px solid black; text-align: center"&gt;
        &lt;h3 id="generated"&gt;&lt;/h3&gt;
        &lt;button id="generate"&gt;Generate&lt;/button&gt;
    &lt;/div&gt;
    &lt;script&gt;
        class Replacement
{
    constructor(text)
    {
        this.tokens = text.split(" ");
    }
}

class Rule
{
    constructor()
    {
        this.replacements = [];
    }

    addReplacement(text)
    {
        const opts = text.split("|");
        opts.forEach((o) =&gt; this.replacements.push(new Replacement(o)));
    }

    choose()
    {
        return this.replacements[Math.floor(Math.random()*this.replacements.length)];
    }
}

class Grammar
{
    constructor()
    {
        this.rules = {};
    }

    setStart(token)
    {
        this.start = token;
    }

    addRule(token,text) 
    {
        if (!this.rules[token])
        {
            this.rules[token] = new Rule();
        }
        this.rules[token].addReplacement(text);
        return this;
    }

    addRules(token,sepText)
    {
        sepText.split("|").forEach(text =&gt; {
            this.addRule(token, text);
        });
    }

    generate(token)
    {
        if (this.rules[token])
        {
            const nextVal = this.rules[token].choose();
            let res = [];
            nextVal.tokens.forEach(token =&gt; {
                res = res.concat(this.generate(token));
            });
            return res;
        }
        return [token];
    }

    phrase()
    {
        return this.generate(this.start);
    }
}
class UI
{
    constructor(grammar)
    {
        this.button = document.getElementById("generate");
        this.content = document.getElementById("generated");
        const callback = () =&gt; {
            const text = grammar.phrase();
            let joined = text.join(" ");
            joined = joined.replace(/ ,/g, ",");
            this.content.innerHTML = joined;
        }
        this.button.addEventListener("click", callback);
        callback();
    }
}
    &lt;/script&gt;
    &lt;script&gt;
        let g = new Grammar();
        g
            .addRule("!mission", "Our goal|Our objective|Our stance|Our culture|Our mission|Our ethos|Our call to arms|Our essence|Our scent")
            .addRule("!missions", "!mission|!mission and !submission")
            .addRule("!visions", "vision|perspective|orientation|clear-sight|foresight|over-the-horizon planning|clear-eyed self-assessments")
            .addRule("!submission", "raison 'd etre|purpose|customer-focused soul|!withs powered !visions")
            .addRule("!is_that", "is that by|is by|demands that|expands over our")
            .addRule("!prep", "in|with|onto|into|without")
            .addRule("!bleeding", "technology|values|timelines|commitment|redundancy|credentialing")
            .addRule("!withs", "AI|creativity|the ubermensch|prestige|the latest technology|user-enabling|bleeding edge !bleeding|blockchain|NFTs")
            .addRule("!action", "leveraging|powering|working|engaging|bandwidth-widening|agentifying|vision questing|covering all the bases|solving|absorbing|communing|joining")
            .addRule("!action", "actioning|emoting|crafting|forging|manifesting|demonstrating|advocating|willing|engaging Nietzschean will-to-powering")
            .addRule("!action", "pressure testing|getting in the tent|saving|drumming our own beat|enabling|blue-skying")
            .addRule("!target", "core competencies|synergies|cross-collateralization|blue-sky thinking|best practices|vision|impact|target|low hanging fruit")
            .addRule("!target", "foundation|ideation|idea generation|lead generation|pull|bank accounts|shareholder-value|new domains|the whales")
            .addRule("!target_mods", "cradle-to-grave|balanced|cross back|high-value|high-impact|maximalizing|throughput-maxxing|reinvented|collaborational|optimized")
            .addRule("!target_mods", "withholding|full-ecosystem|cross-functional|network-oriented|cross-paradigm|growth-hacking|disruption|appropriate|gravitational")
            .addRule("!targets", "!target|!adjective !target|!target_mods !target|!target and !targets")
            .addRule("!adjective", "open|wide|smart|enabled|agentic|AI-first|AI-forward|fifth-sigma|forward looking|future-proof|optimized|four-quadrant")
            .addRule("!adjective", "vast|moatified|inverted|AI-enabled|LLM-driven|agent-driven|paradigmatic|pragmatic|blue-sky|open doored|window-oriented|maximizing")
            .addRule("!adverb", "markedly|vastly|smartly|synergistically|agentically|cooly|vapidly|rapidly|overwhelmingly|abstractly|inherently|value-balancingly")
            .addRule("!adverb", "disruptively")
            .addRule("!actions", "!action|!adverb !action")
            .addRule("!objects", "the world|the economy|the market|society|best practices|the info-sphere|cyberspace|the dating scene|high-value market segments|the eschaton|anime consumers|the poorly hydrated|Warhammer fanatics|executive assistants|stake holders|investor value|the median consumer")
            .addRule("!objects", "future generations|high quality sandwiches|thought-leaders|visionaries|the reckless ones|Big Brother|paradigms")
            .addRule("!objects", "the infodome|the terror dome|gorgeous lights|city-pop albums|heart transplants|financial envelope")
            .addRule("!by_phrase", "By !actions !targets we are !actions !prep !objects")
            .addRule("!by_phrase", "By !actions !prep !targets we are !actions !objects")
            .addRule("!by_phrase", "By !actions !prep !targets with !withs we are !actions !objects")
            .addRule("!miss_phrase", "!missions !is_that !action !prep !targets !adverb !action !target")
            .addRule("!miss_phrase", "!missions is !action !objects by !actions !targets")
            .addRule("!with_phrase", "With !withs , we are !actions !objects to !action !targets")
            .addRule("!with_phrase", "!missions !is_that with !withs we are !actions !objects")
            .addRule("!are_phrase", "We are !objects !action !targets|We are !actions !prep !objects|We are !withs !prep !targets")
            .addRule("!phrase", "!by_phrase|!miss_phrase|!with_phrase|!are_phrase")
        g.setStart("!phrase");
        let ui = new UI(g);
    &lt;/script&gt;
&lt;p&gt;Now, admittedly, this generator may &lt;em&gt;use&lt;/em&gt; a grammar for generating phrases, but it&amp;#39;s not an English grammar, and the result is that sometimes it has problems with verb agreement and other prosaic English rules. I say, lean into it. Let someone challenge your bad grammar, and then look down your nose at them, and say: &amp;#34;I&amp;#39;m blue-skying the infosphere across new domains, you wouldn&amp;#39;t get it.&amp;#34;&lt;/p&gt;
&lt;!-- Easy Reader Version: Yes, I slapped the JavaScript into the page itself, and the API is stuffed into a global variable you can access via the dev tools. I trust you to abuse the heck out of that. --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/proget-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. &lt;a href="https://inedo.com/proget/private-nuget-server?utm_source=tdwtf&amp;amp;utm_medium=footer&amp;amp;utm_content=PlebsFooter&amp;amp;utm_campaign=Cyclops2020"&gt;Learn more.&lt;/a&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>16</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/corporate-language-compliance-generator</wfw:comment></item></channel></rss>