<?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>Sat, 04 Apr 2026 00:07:59 GMT</lastBuildDate><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>8</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>24</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>14</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/corporate-language-compliance-generator</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Corporate Language Compliance</title><link>https://thedailywtf.com/articles/corporate-language-compliance</link><category>Feature Articles</category><pubDate>Wed, 01 Apr 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/corporate-language-compliance</guid><description>&lt;p&gt;As we all know, there are two basic kinds of scientific studies. The first is a ground-breaking paper that changes the way we view the world, and forces us to confront our presuppositions and biases about how we think the world works, and change our perspective. The other tells us what we already know to be true, and makes us feel good. The second kind, of course, is what we&amp;#39;d call &amp;#34;good science&amp;#34;.&lt;/p&gt;
&lt;p&gt;Or, if you want to &lt;a href="#generate"&gt;skip past this straight to the generator at the bottom.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For example, what if I told you that people who are impressed by hyperbolic corporate jargon are dumber than you or I? It&amp;#39;s probably something you already believe is true, but wouldn&amp;#39;t you like a scientist to tell you that it&amp;#39;s true?&lt;/p&gt;
&lt;p&gt;Well, have I got good news for you. If you&amp;#39;re tired of hearing about &amp;#34;growth-hacking paradigms&amp;#34; &lt;a href="https://news.cornell.edu/stories/2026/03/workers-who-love-synergizing-paradigms-might-be-bad-their-jobs"&gt;researchers at Cornell&lt;/a&gt; found that people who are impressed by semantically empty phrases are also bad at making decisions.&lt;/p&gt;
&lt;p&gt;The entire &lt;a href="https://www.researchgate.net/publication/400597536_The_Corporate_Bullshit_Receptivity_Scale_Development_validation_and_associations_with_workplace_outcomes"&gt;paper&lt;/a&gt; is available, if you like charts.&lt;/p&gt;
&lt;p&gt;There are a few key highlights worth reading, though. The paper spends a fair bit of time distinguishing between &amp;#34;jargon&amp;#34; and &amp;#34;bullshit&amp;#34;. Jargon is domain specific language that is impenetrable to &amp;#34;out-group&amp;#34; individuals, while bullshit may be just as impenetrable, but also is &amp;#34;semantically empty and confusing&amp;#34;.&lt;/p&gt;
&lt;p&gt;It also has some ideas about why we drift from useful jargon to bullshit. It starts, potentially, as a way to navigate socially difficult situations by blunting our speech: I can&amp;#39;t say that I think you&amp;#39;re terrible at your job, but I can say you need to actualize the domain more than you currently are. But also, it&amp;#39;s largely attempts to fluff ourselves up, whether it&amp;#39;s trying to contribute to a meeting when we haven&amp;#39;t an idea what we&amp;#39;re talking about, or trying to just sound impressive or noble in public messaging. It seems that the backbone of bullshit is the people who didn&amp;#39;t do the reading for Literature class but insist on holding forth during the classroom discussion, confident they can bullshit their way through.&lt;/p&gt;
&lt;p&gt;Of course, bullshit doesn&amp;#39;t thrive unless you have people willing to fall for it. And when it comes to that, it&amp;#39;s worth quoting the paper directly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bullshit receptivity is linked to a lower analytic thinking, insight, verbal ability, general knowledge, metacognition, and intelligence (Littrell &amp;amp; Fugelsang, 2024; Littrell et al., 2021b; Pennycook et al., 2015; Salvi et al., 2023). It also predicts certain types of poor decision-making and a greater proclivity to both endorse and spread fake news, conspiracy theories, and other epistemically-suspect claims (Čavojová et al., 2019; Iacobucci &amp;amp; De Cicco, 2022; Littrell et al., 2024; Pennycook &amp;amp; Rand, 2020).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The paper cites a study that indicates there&amp;#39;s an aspect of education to this. If you take a bunch of undergrads to an art gallery and present them with fluffed up descriptions of artist intent, they&amp;#39;re more likely to see the works as profound. But if you do the same thing with people who routinely go to art galleries, the bullshit has little effect on them. It also indicates that our susceptibility to bullshit is highly context dependent, and anyone could potentially fall for bullshit in a domain they don&amp;#39;t know enough about.&lt;/p&gt;
&lt;p&gt;Wait, I thought this was about talking about a paper that confirms my biases and makes me feel good? I don&amp;#39;t want to think about how I could succumb to bullshit. That&amp;#39;s terrifying.&lt;/p&gt;
&lt;p&gt;The backbone of the paper is the actual methodology, the analyses of their results, and their carefully crafted bullshit phrases used for the study, which are pretty goddamn great. Or terrible, depending on your perspective.&lt;/p&gt;
&lt;style&gt;
ul { 
   list-style-type: disc; 
   list-style-position: inside; 
   margin-top: 1.5rem;
}
&lt;/style&gt;
&lt;ul&gt;
&lt;li&gt;Our goal is to engage our capabilities by focusing our efforts on executing the
current transmission of our empowerment, driving an innovative growth-
mindset with our change drivers, and coaching energetic frameworks to our
resonating focus.&lt;/li&gt;
&lt;li&gt;Our goal is to engage our conversations by focusing our efforts on
architecting the current vector of our balanced scorecard.&lt;/li&gt;
&lt;li&gt;Working at the intersection of cross-collateralization and blue-sky thinking,
we will actualize a renewed level of cradle-to-grave credentialing and end-
state vision in a world defined by architecting to potentiate on a vertical
landscape.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a few other key things the paper notes. First, unchecked bullshit can turn an environment toxic and drive away competent employees who need to escape it. It also could potentially impact hiring: a bullshit laden workplace may seek out bullshit friendly employees, making the situation worse. What the study does show is that bullshit-receptive employees are more likely to fertilize the field themselves. And there&amp;#39;s also the sad truth: bullshit &lt;em&gt;works&lt;/em&gt;. If you&amp;#39;re looking to fluff yourself up, impress your superiors, and climb the ladder, the careful application of bullshit may get you where you want to go.&lt;/p&gt;
&lt;p&gt;And it&amp;#39;s that last point that brings us to the real point of this article. If you&amp;#39;re here, you&amp;#39;re likely not the most bullshit friendly employee. Clearly, you&amp;#39;re smarter and make better decisions than that. (This is that good science I was talking about- you&amp;#39;re probably more attractive than those people too, though there&amp;#39;s no study to that effect yet.)&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re not using bullshit, you&amp;#39;re leaving powerful tools for self-promotion on the table. But it&amp;#39;s hard to come up with suitably impressive and semantically vacant phrases. Fear not, we&amp;#39;re here to help! Here&amp;#39;s a phrase generator for you, that will come up with endless phrases that you can use in meetings and mission statements to sound far more impressive.&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 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>24</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/corporate-language-compliance</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Joined Up</title><link>https://thedailywtf.com/articles/joined-up</link><category>CodeSOD</category><pubDate>Tue, 31 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/joined-up</guid><description>&lt;p&gt;&lt;strong&gt;Sandra&lt;/strong&gt; from InitAg (&lt;a href="https://thedailywtf.com/articles/brillant-python-programmers"&gt;previously&lt;/a&gt;) works with Bjørn, and Bjørn has some ideas about how database schemas should be organized.&lt;/p&gt;
&lt;p&gt;First, users should never see an auto-incrementing ID. That means you need to use UUIDs. But UUIDs are large and expensive, so they should never be your primary key, use an auto-incrementing ID for that.&lt;/p&gt;
&lt;p&gt;This is not, in and of itself, a radical or ridiculous statement. I&amp;#39;ve worked on many a database that followed similar rules. I&amp;#39;ve also seen &amp;#34;just use a UUID all the time&amp;#34; become increasingly common, especially on distributed databases, where incrementing counters is expensive.&lt;/p&gt;
&lt;p&gt;One can have opinions and disagreements about how we handle IDs in a database, but I wouldn&amp;#39;t call anything a WTF there.&lt;/p&gt;
&lt;p&gt;No, the WTF is how Bjørn would design his cross-reference tables. You know, the tables which exist to permit many-to-many relationships between two other tables? Tables that should just be &lt;code&gt;tableA.id&lt;/code&gt; and &lt;code&gt;tableB.id&lt;/code&gt;?&lt;/p&gt;
&lt;pre&gt;                                     Table &amp;#34;public.foo_bar&amp;#34;
  Column   |          Type          | Collation | Nullable |              Default               
-----------+------------------------+-----------+----------+------------------------------------
 id        | integer                |           | not null | nextval(&amp;#39;foo_bar_id_seq&amp;#39;::regclass)
 foo_id    | integer                |           | not null | 
 bar_id    | integer                |           | not null | 
 uuid      | character varying(128) |           | not null | 
&lt;/pre&gt;
&lt;p&gt;Yes, every row in this table has an ID, which isn&amp;#39;t itself a terrible choice, &lt;em&gt;and&lt;/em&gt; a UUID, despite the fact that the ID of these rows should never end up in output anyway. It exists only to facilitate queries, not store any actual data.&lt;/p&gt;
&lt;p&gt;I guess, what&amp;#39;s the point of having a rule if you don&amp;#39;t follow it unthinkingly at all times?&lt;/p&gt;
&lt;!-- Easy Reader Version: Blind following of rules is like 90% of succeeding in corporate politics. The line between malicious compliance and just regular compliance is really just… do you have malice in your heart when you do it? --&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>18</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/joined-up</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Three Minutes</title><link>https://thedailywtf.com/articles/three-minutes</link><category>CodeSOD</category><pubDate>Mon, 30 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/three-minutes</guid><description>&lt;p&gt;&lt;strong&gt;Angela&lt;/strong&gt;&amp;#39;s team hired someone who was &amp;#34;good&amp;#34; at SQL. When this person started, the team had some regular jobs which ran in the mornings. The jobs were fairly time consuming, and did a lot of database IO. When their current database person left for another job, they hired someone who had a &amp;#34;good grasp&amp;#34; on SQL. We&amp;#39;ll call him Barry.&lt;/p&gt;
&lt;p&gt;Barry started out by checking the morning jobs every day. And over time, the morning jobs started getting slower and slower. That was a concern, but Barry swore he had it under control. Barry did not share that a handful of slow queries- queries which took three or so minutes to run- had suddenly started taking 75+ minutes to run. Barry didn&amp;#39;t think about the fact that a little time with the query planner and some indexes could have probably gotten performance back to where it should have been. Barry saw this problem and decided: &amp;#34;I&amp;#39;ll write a Python script&amp;#34;.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;&lt;span class="hljs-keyword"&gt;import&lt;/span&gt; time
&lt;span class="hljs-keyword"&gt;from&lt;/span&gt; datetime &lt;span class="hljs-keyword"&gt;import&lt;/span&gt; datetime, timedelta
&lt;span class="hljs-keyword"&gt;import&lt;/span&gt; pytz   &lt;span class="hljs-comment"&gt;# for time zone&lt;/span&gt;

current_date = datetime.now()
day_number = current_date.weekday()  &lt;span class="hljs-comment"&gt;# integer value: 0 is Monday&lt;/span&gt;
hub_1_ready = &lt;span class="hljs-literal"&gt;False&lt;/span&gt;
hub_2_ready = &lt;span class="hljs-literal"&gt;False&lt;/span&gt;
hub_1_results = []
hub_2_results = []
job_ran_later = &lt;span class="hljs-literal"&gt;False&lt;/span&gt; &lt;span class="hljs-comment"&gt;# If this job is manually run later in the day, avoid sending a &amp;#34;both hubs failed&amp;#34; email&lt;/span&gt;



&lt;span class="hljs-comment"&gt;# Monday (day_number 0) runs later than the other 6 days&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;if&lt;/span&gt; day_number == &lt;span class="hljs-number"&gt;0&lt;/span&gt;:  
    end_time = datetime.strptime(&lt;span class="hljs-string"&gt;&amp;#34;08:30&amp;#34;&lt;/span&gt;, &lt;span class="hljs-string"&gt;&amp;#34;%H:%M&amp;#34;&lt;/span&gt;) 
    end_time = end_time.time() &lt;span class="hljs-comment"&gt;# get just the time portion&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;else&lt;/span&gt;:
    end_time = datetime.strptime(&lt;span class="hljs-string"&gt;&amp;#34;07:30&amp;#34;&lt;/span&gt;, &lt;span class="hljs-string"&gt;&amp;#34;%H:%M&amp;#34;&lt;/span&gt;)  
    end_time = end_time.time() &lt;span class="hljs-comment"&gt;# get just the time portion&lt;/span&gt;

&lt;span class="hljs-comment"&gt;# If this job is run later in the day than the normaolly scheduled time&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;if&lt;/span&gt; datetime.now(pytz.timezone(&lt;span class="hljs-string"&gt;&amp;#39;US/Central&amp;#39;&lt;/span&gt;)).time() &amp;gt; end_time:
    job_ran_later = &lt;span class="hljs-literal"&gt;True&lt;/span&gt; 


&lt;span class="hljs-comment"&gt;# Starting when Morning jobs are scheduled to kick off, check for completion of both hubs every 3 minutes until end_time. If both hubs are not a Success by end_time, an email is sent&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;while&lt;/span&gt; datetime.now(pytz.timezone(&lt;span class="hljs-string"&gt;&amp;#39;US/Central&amp;#39;&lt;/span&gt;)).time() &amp;lt; end_time:
    h1 = session.sql(&lt;span class="hljs-string"&gt;&amp;#34;SELECT LOG_STATUS FROM PROD_CTRL.CTRL.DRB_EXECUTION_LOG WHERE LOG_PROJECT = &amp;#39;SRC_PROD_1&amp;#39; AND date(log_start_date) = current_date AND date(LOG_END_DATE) = current_date&amp;#34;&lt;/span&gt;).take(&lt;span class="hljs-number"&gt;1&lt;/span&gt;)
    hub_1_results = []
    hub_1_results.append(h1)
    &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; &lt;span class="hljs-built_in"&gt;str&lt;/span&gt;(hub_1_results[&lt;span class="hljs-number"&gt;0&lt;/span&gt;]) == &lt;span class="hljs-string"&gt;&amp;#34;[Row(LOG_STATUS=&amp;#39;SUCCESS&amp;#39;)]&amp;#34;&lt;/span&gt;:
        hub_1_ready = &lt;span class="hljs-literal"&gt;True&lt;/span&gt; 
    

    h2 = session.sql(&lt;span class="hljs-string"&gt;&amp;#34;SELECT LOG_STATUS FROM PROD_CTRL.CTRL.SRC_EXECUTION_LOG WHERE LOG_PROJECT = &amp;#39;SRC_PROD_2&amp;#39; AND date(log_start_date) = current_date AND date(LOG_END_DATE) = current_date&amp;#34;&lt;/span&gt;).take(&lt;span class="hljs-number"&gt;1&lt;/span&gt;)
    hub_2_results = []
    hub_2_results.append(h2)
    &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; &lt;span class="hljs-built_in"&gt;str&lt;/span&gt;(hub_2_results[&lt;span class="hljs-number"&gt;0&lt;/span&gt;]) == &lt;span class="hljs-string"&gt;&amp;#34;[Row(LOG_STATUS=&amp;#39;SUCCESS&amp;#39;)]&amp;#34;&lt;/span&gt;:
        hub_2_ready = &lt;span class="hljs-literal"&gt;True&lt;/span&gt; 
    
    
    &lt;span class="hljs-comment"&gt;# If both hubs are Success, then break out of while loop, even if it&amp;#39;s not end_time yet&lt;/span&gt;
    &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; hub_1_ready == &lt;span class="hljs-literal"&gt;True&lt;/span&gt; &lt;span class="hljs-keyword"&gt;and&lt;/span&gt; hub_2_ready == &lt;span class="hljs-literal"&gt;True&lt;/span&gt;:
        &lt;span class="hljs-keyword"&gt;break&lt;/span&gt;

    time.sleep(&lt;span class="hljs-number"&gt;180&lt;/span&gt;) &lt;span class="hljs-comment"&gt;# Sleep for 3 minutes before trying again&lt;/span&gt;

    


&lt;span class="hljs-keyword"&gt;if&lt;/span&gt;  &lt;span class="hljs-keyword"&gt;not&lt;/span&gt; hub_1_ready &lt;span class="hljs-keyword"&gt;and&lt;/span&gt; &lt;span class="hljs-keyword"&gt;not&lt;/span&gt; hub_2_ready &lt;span class="hljs-keyword"&gt;and&lt;/span&gt; job_ran_later == &lt;span class="hljs-literal"&gt;False&lt;/span&gt;:
    message = &lt;span class="hljs-string"&gt;&amp;#34;Neither Hub_1 nor Hub_2 finished in time for Morning jobs.&amp;#34;&lt;/span&gt;
    context.updateVariable(&lt;span class="hljs-string"&gt;&amp;#39;METL_MESSAGE&amp;#39;&lt;/span&gt;, message)
    &lt;span class="hljs-keyword"&gt;raise&lt;/span&gt; ValueError(&lt;span class="hljs-string"&gt;&amp;#34;send email: &amp;#34;&lt;/span&gt;+message)
&lt;span class="hljs-keyword"&gt;elif&lt;/span&gt; hub_1_ready == &lt;span class="hljs-literal"&gt;False&lt;/span&gt; &lt;span class="hljs-keyword"&gt;and&lt;/span&gt; hub_2_ready == &lt;span class="hljs-literal"&gt;True&lt;/span&gt;:
    message = &lt;span class="hljs-string"&gt;&amp;#34;Hub_1 did not finish in time for Morning jobs.&amp;#34;&lt;/span&gt;
    context.updateVariable(&lt;span class="hljs-string"&gt;&amp;#39;METL_MESSAGE&amp;#39;&lt;/span&gt;, message)
    &lt;span class="hljs-keyword"&gt;raise&lt;/span&gt; ValueError(&lt;span class="hljs-string"&gt;&amp;#34;send email: &amp;#34;&lt;/span&gt;+message)
&lt;span class="hljs-keyword"&gt;elif&lt;/span&gt; hub_1_ready == &lt;span class="hljs-literal"&gt;True&lt;/span&gt; &lt;span class="hljs-keyword"&gt;and&lt;/span&gt; hub_2_ready == &lt;span class="hljs-literal"&gt;False&lt;/span&gt;:
    message = &lt;span class="hljs-string"&gt;&amp;#34;Hub_2 did not finish in time for Morning jobs&amp;#34;&lt;/span&gt;
    context.updateVariable(&lt;span class="hljs-string"&gt;&amp;#39;METL_MESSAGE&amp;#39;&lt;/span&gt;, message)
    &lt;span class="hljs-keyword"&gt;raise&lt;/span&gt; ValueError(&lt;span class="hljs-string"&gt;&amp;#34;send email: &amp;#34;&lt;/span&gt;+message)
&lt;span class="hljs-keyword"&gt;elif&lt;/span&gt; job_ran_later == &lt;span class="hljs-literal"&gt;True&lt;/span&gt;:
    message = &lt;span class="hljs-string"&gt;&amp;#34;This job was run manually later in the day. Check that both Source hubs have completed. If you did not run this job, you can probably ignore this email.&amp;#34;&lt;/span&gt;
    context.updateVariable(&lt;span class="hljs-string"&gt;&amp;#39;METL_MESSAGE&amp;#39;&lt;/span&gt;, message)
    &lt;span class="hljs-keyword"&gt;raise&lt;/span&gt; ValueError(&lt;span class="hljs-string"&gt;&amp;#34;send email: &amp;#34;&lt;/span&gt;+message)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I don&amp;#39;t particularly like any of this. Some of it is just little ugliness, like the fact that &lt;code&gt;job_ran_later&lt;/code&gt; and the closing &lt;code&gt;if&lt;/code&gt; statements could be written to be much more clear. Or the way that, after our main &lt;code&gt;while&lt;/code&gt; loop, which we&amp;#39;ll come back to, we compare boolean variables against boolean literals.&lt;/p&gt;
&lt;p&gt;The core of it is the &lt;code&gt;while&lt;/code&gt; loop, which checks the current time, and while it&amp;#39;s before the target end time, it runs a pair of queries. For each query it runs, it empties an array, then append the results (which we know is only one value, because they &lt;code&gt;take(1)&lt;/code&gt;) to the array. Then they check the first element of the array against an expected string.&lt;/p&gt;
&lt;p&gt;Why the arrays? Who knows. Perhaps at one point they thought they&amp;#39;d keep the results from multiple iterations, then decided against it. Why do the check against the string in the Python code and not the query? No idea, but maybe I don&amp;#39;t have a &amp;#34;good grasp&amp;#34; of SQL. That said, with my bad grasp, I&amp;#39;m pretty sure I could figure out how to do all that in &lt;em&gt;one single query&lt;/em&gt; and not two that are almost identical.&lt;/p&gt;
&lt;p&gt;In any case, if we don&amp;#39;t see what we want in the database, we sleep for three minutes, then try again.&lt;/p&gt;
&lt;p&gt;At the end of the process, we check what happened and output messages and raise exceptions based on what we did see in the database.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s also worth noting that Angela&amp;#39;s team used a pretty reasonable job management system. All of their other scripts doing similar jobs didn&amp;#39;t include retry logic inside themselves- they just failed. That let the job runner decide whether or not to retry, and that allowed all sorts of valuable configuration options that are more fine grained than &amp;#34;sleep for 3 minutes&amp;#34;.&lt;/p&gt;
&lt;!-- Easy Reader Version: The `ValueError("send email: " + message)` worries me: does that preamble to the error trigger logic to send emails? God, I hope not. What a terrible way to pass error messages up the chain. --&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>19</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/three-minutes</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Timely Reminder</title><link>https://thedailywtf.com/articles/timely-reminder</link><category>Error'd</category><pubDate>Fri, 27 Mar 2026 08:05:00 GMT</pubDate><guid>https://thedailywtf.com/articles/timely-reminder</guid><description>&lt;p&gt;There is no particular theme this week, except that I
have noticed many of these contributors are providing &amp;#34;customized&amp;#34;
email addresses. This is a practice which I too have
followed, to detect who is selling my email address to
spammers. I would use a consistent
login id for many web sites, and a decent password generated
by a mental algorithm, with a unique email address for each site.
It worked great until some website wanted to know specifically
what &amp;#34;my&amp;#34; email address is, and I couldn&amp;#39;t remotely remember
which of 300 variant email addresses I had signed up for
their services with.
&lt;/p&gt;

&lt;p&gt;First up, 
&lt;strong&gt;Martin
&lt;/strong&gt; is traveling by air.
&amp;#34;I have heard it&amp;#39;s so beautiful this time of year, so I look
forward to visit @arrCity_SLPH.&amp;#34;  Martin helpfully explains 
&amp;#34;First sentence is in Danish: Your SAS-booking has been confirmed.&amp;#34;
&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/317/sas.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;Dr. Bob Bobbers, PhD
&lt;/strong&gt; would rather drive. 
&amp;#34;Somehow I&amp;#39;m projected to arrive 20 minutes ago. I had started
in one timezone and was finishing in the next timezone
to the east, and when I had connectivity, the ETA was
right, but somehow seems to have stopped computing correctly
when I went offline.&amp;#34;
&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/317/map.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;Caleb B.
&lt;/strong&gt; thinks Amazon&amp;#39;s AI-generated coding practices don&amp;#39;t compute.
&amp;#34;I&amp;#39;ve been working with my kid a lot with her math homework
explaining that the alligator eats the bigger number. I
think someone at Amazon needs to learn it too.&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/317/img_0713.jpeg"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;Andrew
&lt;/strong&gt; knows that there&amp;#39;s a difference between &amp;gt; and ⋝.
&amp;#34;Tried to upload my insurance card back and front.
Apparently I cannot please the webserver.&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/317/fffff.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And finally, 
&lt;strong&gt;Daniel D.
&lt;/strong&gt; has a timely reminder that we should all bear in mind so that nobody else has to: 
&amp;#34;Set your country, set your time zone and they should
match. Google thinks otherwise, offering only one option
(Czechia) for the selected country (Slovakia). The timezone
is correct as the whole Central Europe uses the same
time (CET). But the basic rule of usability is: Don&amp;#39;t make me think!&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/317/screenshot_20260315_150511.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] 
	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>22</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/timely-reminder</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Preformatted</title><link>https://thedailywtf.com/articles/preformatted</link><category>CodeSOD</category><pubDate>Thu, 26 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/preformatted</guid><description>&lt;p&gt;&lt;strong&gt;Amity&lt;/strong&gt; sends us a &amp;#34;weird&amp;#34; replacement, and I regret to inform you, it&amp;#39;s not as weird as it should be.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-php"&gt;&lt;span class="hljs-variable"&gt;$body&lt;/span&gt; = &lt;span class="hljs-title function_ invoke__"&gt;str_replace&lt;/span&gt;([&lt;span class="hljs-string"&gt;&amp;#39;&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;&amp;#39;&lt;/span&gt;, &lt;span class="hljs-string"&gt;&amp;#39;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;#39;&lt;/span&gt;], [&lt;span class="hljs-string"&gt;&amp;#39;&amp;lt;pre&amp;gt;&amp;#39;&lt;/span&gt;, &lt;span class="hljs-string"&gt;&amp;#39;&amp;lt;/pre&amp;gt;&amp;#39;&lt;/span&gt;], &lt;span class="hljs-variable"&gt;$body&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This PHP code scans through a string containing HTML and replaces all the &lt;code&gt;&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;.../&amp;lt;code&amp;gt;&amp;lt;/pre&amp;gt;&lt;/code&gt; tags with just &lt;code&gt;&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&lt;/code&gt;. And yes, that&amp;#39;s a weird thing to do; these mean different things, after all. &lt;code&gt;pre&lt;/code&gt; tells us the text is preformatted and things like extra whitespace and line breaks should be respected. &lt;code&gt;code&lt;/code&gt; tells us the text represents some sort of code. Usually, that involves respecting the formatting, but it also generally involves rendering in a monospace font.&lt;/p&gt;
&lt;p&gt;And this touches upon one of my complaints about this very site. A complaint I don&amp;#39;t complain about much, because I could easily fix it, and also it doesn&amp;#39;t bother me that much, but also, I don&amp;#39;t want to be maintaining our little homegrown CMS more than I have to, so I haven&amp;#39;t done it.&lt;/p&gt;
&lt;p&gt;Quite some time ago, we did a redesign here. It was fairly necessary, as the site old 100% didn&amp;#39;t work on mobile devices. At the time, one habit was &lt;em&gt;en vogue&lt;/em&gt; amongst web developers: clear all the formatting rules from the default browser stylesheet and replace them with your own. I can sympathize with that, I suppose. It&amp;#39;s certainly one way to deal with cross browser rendering quirks: burn everything to the ground and build up from scratch. You&amp;#39;ll still have cross browser quirks, but they&amp;#39;ll all be your fault, and your fault alone. And another &amp;#34;quirk&amp;#34; that showed up in that rebuilding, and a quirk I&amp;#39;ve seen on a depressing number of other sites: make &lt;code&gt;pre&lt;/code&gt; content be in monospace.&lt;/p&gt;
&lt;p&gt;For some reason I don&amp;#39;t fully understand, there was a brief period in CSS styling where people willfully collapsed the distinction between &lt;code&gt;pre&lt;/code&gt; and &lt;code&gt;code&lt;/code&gt;, and just turned them into the same thing. I&amp;#39;m admittedly a bit of a semantic snob (HTML is a DATA format not a PRESENTATION format, it&amp;#39;s still SGML to me).&lt;/p&gt;
&lt;p&gt;In any case, this doesn&amp;#39;t impact you, our dear readers, who instead get a sometimes confounding Markdown comment box with bad editing support. But I post articles here in pure HTML, and while I rarely need a &lt;code&gt;pre&lt;/code&gt; tag, every once in awhile, the default site stylesheet throws me off.&lt;/p&gt;
&lt;!-- Easy Reader Version: Also, the list tags never got their stylesheet set back up at all, so any time I want to use a bulleted list I have to remember to add an inline stylesheet for it to work, otherwise it just looks like badly formatted paragraphs --&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>30</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/preformatted</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Development Tools</title><link>https://thedailywtf.com/articles/development-tools</link><category>CodeSOD</category><pubDate>Wed, 25 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/development-tools</guid><description>&lt;p&gt;A few holiday seasons ago, &lt;strong&gt;Paul S&lt;/strong&gt; was doing the requisite holiday shopping online, looking for those perfectly impersonal but mildly thoughtful gifts that many companies specialize in. This was one of the larger such vendors, well known for its fruit-filled gift baskets. As is not uncommon for our readers, when the site started misbehaving, he pulled up the dev tools. He didn&amp;#39;t solve the problem, but he did learn a &lt;em&gt;lot&lt;/em&gt; about how they were managing their API keys, as this was exposed to the client:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;    &lt;span class="hljs-attr"&gt;env&lt;/span&gt;: {
        &lt;span class="hljs-attr"&gt;APP_AUTH0_GUID&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;ctZZL1BqgKm9kBmDEKAjt0yBeQ47Cpwl XS0xxpLFS5g8o-EUpSu4fi9ecOqN19WnXn-EqI9yaupwme22bKuBd2jH3Kf3QngZ&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_LOGGING_ENABLED&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;true&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_LOGGING_SERVICE_PATH&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;r/api/logging/mbp-ui&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;REACT_APP_MBP_LOGGER_CONSOLE&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;ERROR&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_TIQ_ACCOUNT&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;1800flowers&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_TIQ_PROFILE&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;full&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_TIQ_ENV&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;prod&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_PAYPAL_SDK_URL&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;https://www.paypal.com/sdk/js&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_PAYPAL_CLIENT_ID&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;AcYrxrOkFwUnMKRoJmkOR0N6caopqRNqwNRxy6H-EvZ-IKUz22i-E0uT0uMT7JQZEC33Oy1HCNsgm_le&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_PAYPAL_ENV&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;production&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_PAYPAL_SOURCE&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;PWA&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_VENMO_ENV&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;production&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_VENMO_PROFILE_ID&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;2705494007504552889&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_AUTH_LOGIN_SOURCE&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;undefined&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_SG_BASKET_SCRIPT&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;https://cdn2.smartgiftit.com/scripts/widgets/gift-basket.js&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_AUTH_DOMAIN&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;login.celebrations.com&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_AUTH_AUDIENCE&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;celebrations-prod.1800-flowers.auth0.com&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_STATUS_BAR_ENABLED&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;true&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_WALLET_ENABLED&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;true&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_VERIFY_ADDRESS_HOST&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;api.edq.com&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_VERIFY_ADDRESS_AUTH_TOKEN&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;47d991c9-043e-4073-bee3-a5c8922baa3a&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_FULLSTORY_ORG_ID&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;MXD30&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_GRAPHQL_ENV&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;production&amp;#39;&lt;/span&gt;,
        &lt;span class="hljs-attr"&gt;APP_VISA_CHECKOUT_API_KEY&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#39;B0LQRDVCE0LWKBHR880J14gCRlEjr_UqLhh6V-yYRAmcvD0W8&amp;#39;&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&amp;#39;ve gone ahead and mangled the keys, and given that this was a few holidays ago, I&amp;#39;d &lt;em&gt;hope&lt;/em&gt; the retailer in question has fixed their website. But as you can see, it was pushing API keys &lt;em&gt;for payment processors&lt;/em&gt;, along with potential authentication tokens and internal IDs. Now, I would hope most of these required additional authentication to be useful, and that a malicious actor couldn&amp;#39;t do anything nasty with this information- but that&amp;#39;s a dim hope. Even with the data exposed here, I wonder if someone could flip &lt;code&gt;APP_PAYPAL_ENV&lt;/code&gt; to &amp;#34;development&amp;#34; or &amp;#34;test&amp;#34; and run some transactions through. Or do the same with Venmo.&lt;/p&gt;
&lt;p&gt;This is a React app, based on some of the keys, using Graphql for communicating with the back end, and that hits at the fact that it&amp;#39;s a single-page application. Probably, the developers were trying to build once for the web and for a &amp;#34;website bundled in an app&amp;#34; deployment for smart phones. And the result is that they weren&amp;#39;t thinking about the distinction between &amp;#34;public&amp;#34; and &amp;#34;private&amp;#34; information- they had state to manage,so they managed it. By sending it to the client. Where anyone could see it. But it looked good, they shipped it, and they made sales, so everyone was happy.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;For a time.&lt;/em&gt;&lt;/p&gt;
&lt;!-- Easy Reader Version: A special article for those who think "opening the dev tools" is a hacking tool --&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>6</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/development-tools</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: The Barren Fields</title><link>https://thedailywtf.com/articles/the-barren-fields</link><category>CodeSOD</category><pubDate>Tue, 24 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-barren-fields</guid><description>&lt;p&gt;Today, it&amp;#39;s not exactly the code that was bad. For some time, a government agency had been collecting information from users using fillable PDF forms. The user would submit the form, and then a data entry clerk would copy the text from the form into a database. This, of course, raised the question: &lt;em&gt;why&lt;/em&gt; was someone manually riding the copy/paste button?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sally&lt;/strong&gt; was tasked with automating this. The data is already in a digital format, so it should be easy to use a PDF library to parse out the entered data and insert it into the database. And it &lt;em&gt;almost&lt;/em&gt; was.&lt;/p&gt;
&lt;p&gt;Sally shares with us, not code, but the output of her program which scanned the fields, looking for their names:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;FieldType: Text
FieldName: T5ZA1
FieldNameAlt: T5ZA1
FieldFlags: 25165824
FieldJustification: Left
FieldMaxLength: 3
---
FieldType: Text
FieldName: T5ZA2
FieldNameAlt: T5ZA2
FieldFlags: 25165824
FieldJustification: Left
FieldMaxLength: 2
---
FieldType: Text
FieldName: T5ZA3
FieldNameAlt: T5ZA3
FieldFlags: 25165824
FieldJustification: Left
FieldMaxLength: 4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I could go on, Sally certainly shared many more examples, but you can get the gist. The names were all cryptic five character blobs. They all start with &lt;code&gt;T5Z&lt;/code&gt;, and followed by &amp;#34;letternumber&amp;#34;: &lt;code&gt;A3&lt;/code&gt;, &lt;code&gt;B9&lt;/code&gt;, &lt;code&gt;C2&lt;/code&gt;, etc. It has the vibe of being autogenerated; someone just never considered that they might want clear names for the fields, and just let their editor autonumber them, but that has one counterpoint to it: the letter &amp;#34;O&amp;#34; is never used. &lt;code&gt;T5ZN9&lt;/code&gt; is followed by &lt;code&gt;T5ZP1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sally was left scratching her head. Of course, she was going to have to write some sort of lookup that would convert the PDF&amp;#39;s field names into database field names, but she expected that the PDF would provide at least &lt;em&gt;some sort&lt;/em&gt; of guidance on that front.&lt;/p&gt;
&lt;p&gt;I really enjoy that the alt-text for every field is also the field name, which is a clear accessibility &amp;#34;win&amp;#34;.&lt;/p&gt;
&lt;!-- Easy Reader Version: EZRDR1 --&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>19</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/the-barren-fields</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Completely Readable</title><link>https://thedailywtf.com/articles/completely-readable</link><category>CodeSOD</category><pubDate>Mon, 23 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/completely-readable</guid><description>&lt;p&gt;It is eminently reasonable for companies to have &amp;#34;readability standards&amp;#34; for their code. You&amp;#39;re writing this code &lt;em&gt;for humans&lt;/em&gt; to read, after all, at least in theory. You need to communicate to future inheritors of your code.&lt;/p&gt;
&lt;p&gt;But that doesn&amp;#39;t mean readability standards are &lt;em&gt;good&lt;/em&gt;. &lt;strong&gt;Tony&lt;/strong&gt;&amp;#39;s company, for example, has rules about returning boolean values from functions, and those rules mean you are &lt;em&gt;expected&lt;/em&gt; to write code like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-built_in"&gt;bool&lt;/span&gt; &lt;span class="hljs-title"&gt;Completed&lt;/span&gt; ()&lt;/span&gt;
{
   &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (completed == &lt;span class="hljs-literal"&gt;true&lt;/span&gt;)
   {
   &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; &lt;span class="hljs-literal"&gt;true&lt;/span&gt;;
   }
   &lt;span class="hljs-keyword"&gt;else&lt;/span&gt;
   {
   &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; &lt;span class="hljs-literal"&gt;false&lt;/span&gt;;
   }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It&amp;#39;s more &amp;#34;explicit&amp;#34; this way. Which I certainly would have explicit things to say if I were told I needed to write code this way. Also, what&amp;#39;s with the non-indented &lt;code&gt;return&lt;/code&gt; statements? Is that also part of their coding standards?&lt;/p&gt;
&lt;!-- Easy Reader Version: if (readEasyReader == true) return true; --&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>29</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/completely-readable</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Yeah Yeah I'm The Tax Man</title><link>https://thedailywtf.com/articles/yeah-yeah-i-m-the-tax-man</link><category>Error'd</category><pubDate>Fri, 20 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/yeah-yeah-i-m-the-tax-man</guid><description>&lt;p&gt;
In only a handful of years, four Liverpudlian scruffs clawed their
way from obscurity to unprecedented worldwide celebrity.
&lt;br/&gt;
Yeah, yeah, yeah. &lt;br/&gt;
 Already making a mint from &amp;#34;Money&amp;#34; and
other hits, by 1965 they were MBEs, and suddenly discovered
class solidarity -- with the rest of the singlet-clad bathers
in their grottos of ducats. To be fair, a 97%
marginal rate does make it hard for a lad to break into
the ranks of true generational wealth. 
&lt;br/&gt;So in 1966, George Harrison and his newly-minted toffs released the anti-government protest shriek of the upper class, and even now, we Americans share their pain in this our momen of reckoning with ... the Tax Man.
&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;The Beast in Black
&lt;/strong&gt; first complained 
&amp;#34;I tried to get my W2 (for our non-Murican friends, that&amp;#39;s the statement from your employer showing how much they paid you and how much tax they deducted) from ADP, and apparently their programmers did a number (two) on the form. TRWTF is that the damn form actually works if I add the slash separators to the date components.&amp;#34;
&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/316/errordadpnumbersarentnumbers20260115_1451.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And again he moaned 
&amp;#34;Frankly, I&amp;#39;m a little too scared by this WTF to be snarky; I&amp;#39;d expect a Tax Accounting firm - H&amp;amp;R Block in this case - to not have such basic accounting WTFs. Perhaps they should change their name to H&amp;amp;R Blockhead...?&amp;#34;
&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/316/errordhrblockfees20250320_1142.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;Adam R.
&lt;/strong&gt; remarked 
&amp;#34;It&amp;#39;s tax season again.  I hope their tax return backend is better than their JavaScript frontend that set the tooltip on this image to [object Object].&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/316/screenshot20240316at5.28.08pm.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Frustrated 
&lt;strong&gt;Dustin S.
&lt;/strong&gt; is &lt;em&gt;trying&lt;/em&gt; to comply: 
&amp;#34;I logged into my credit union to download the tax documents for my account, but when I clicked on the link, this is what I got.  Maybe doing taxes by invoice in the U.S. now?&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/316/errord.png"/&gt;
&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And looking to the future, the tax man cometh inevitably for 
&lt;strong&gt;Michael R.
&lt;/strong&gt;, though not today.
&amp;#34;In green: I want to enter a discount for the items I&amp;#39;m selling. The error says:&amp;#34;Invalid discount amount. Please enter a discount of less than €0.00 (packaging costs + taxes).&amp;#34;. Yes, I have also tried to enter -7,41 without any luck.
In blue: It says:&amp;#34;Total amount approx.&amp;#34;. Maybe one of the ebay lawyers figured out they are using float data types and wants to cover their bottoms against the rounding errors?&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/316/ebay.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>4</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/yeah-yeah-i-m-the-tax-man</wfw:comment></item><item><dc:creator>Ellis Morning</dc:creator><title>TDWTF Home Edition: Pt 2</title><link>https://thedailywtf.com/articles/tdwtf-home-edition-pt-2</link><category>Feature Articles</category><pubDate>Thu, 19 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/tdwtf-home-edition-pt-2</guid><description>&lt;p&gt;Read &lt;a href="https://thedailywtf.com/articles/wtf-home-edition"&gt;(Part One&lt;/a&gt; here)&lt;/p&gt;

&lt;p&gt;When &lt;b&gt;Ellis&lt;/b&gt; awoke on Sunday, the unusual cold broke through her drowsiness right away. Her new thermostat was programmed to maintain a lower temperature overnight, but at 6:30AM, it was supposed to climb again, kicking the heat on right when she got out of bed.&lt;/p&gt;

&lt;p style="float:right; padding-left:10px; padding-bottom:10px;"&gt;&lt;a title="Jeffrey Hayes, CC BY 2.0 &amp;lt;https://creativecommons.org/licenses/by/2.0&amp;gt;, via Wikimedia Commons" href="https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Caleb_Joseph_%2851006216437%29.jpg/330px-Caleb_Joseph_%2851006216437%29.jpg"&gt;&lt;img itemprop="image" width="300" alt="Caleb Joseph (51006216437)" src="https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Caleb_Joseph_%2851006216437%29.jpg/330px-Caleb_Joseph_%2851006216437%29.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Why was it so cold? Why was the furnace dead silent? Something must&amp;#39;ve gone wrong again. So soon?&lt;/p&gt;

&lt;p&gt;It sucked to get out of bed when it was dark and cold, but Ellis had no choice. She forced herself to peel back the covers and launch into her morning routine. Her cat shadowed her, helpfully letting her know several times that his plate had no food on it.&lt;/p&gt;

&lt;p&gt;She attended to the cat&amp;#39;s needs first before approaching the thermostat downstairs. The set point was at the overnight setting even though it claimed to be following her programmed schedule. Using the touchscreen interface, she increased the set point manually. The heat cut on just fine from there, thank goodness.&lt;/p&gt;

&lt;p&gt;Through her dehydrated, hungry, uncaffeinated haze, Ellis suddenly remembered the time change. They had &amp;#34;sprung ahead&amp;#34; for Daylight Saving Time. Had her new thermostat joined them in this archaic ritual?&lt;/p&gt;

&lt;p&gt;It had not. Checking its day/time settings, Ellis found the time an hour behind. She pressed her index finger onto the hour, expecting a dial or drop-down or some other such control to appear. Nothing. Hours, minutes, and AM/PM were all fixed. Only the time zone could be changed. It was currently set to &lt;b&gt;EST&lt;/b&gt;. Opening the drop-down menu, none of the options she skimmed over looked promising.&lt;/p&gt;

&lt;p&gt;Her old thermostat (out of support, incompatible with her new HVAC system) had handled time changes all by itself, and had allowed every possible manual adjustment one could wish for. It frustrated Ellis that the latest so-called &amp;#34;smart&amp;#34; thermostat couldn&amp;#39;t manage the same despite being hooked up to the Internet at all times.&lt;/p&gt;

&lt;p&gt;Part of her wanted to keep digging at this, but it was way too early. Ellis was unprepared in every possible way to descend into a troubleshooting rabbit-hole. She had places to be that morning. The heat was working, that was all that really mattered. More importantly, someone from the HVAC company was already scheduled to perform a 1-week follow-up test of her newly-installed system in a couple of days. She could disable the schedule and make manual adjustments until the technician arrived.&lt;/p&gt;

&lt;p&gt;With HVAC having taken center stage in her brainspace for over a month by that point, Ellis desperately needed to give herself this break.&lt;/p&gt;

&lt;p&gt;The technician who arrived was equally mystified. He tried a factory reset of the thermostat, which had no effect. It was determined that future time changes would have to be handled manually by toggling the time zone between &lt;b&gt;EST&lt;/b&gt; and ... &lt;b&gt;Eastern&lt;/b&gt;. An unhelpful label that Ellis&amp;#39; sleepy brain had completely glossed over early on Sunday morning.&lt;/p&gt;

&lt;p&gt;Annoying, but not the end of the world.&lt;/p&gt;

&lt;p&gt;Once the technician tested her system (all good, thankfully) and left, Ellis sat down in front of her laptop to check her usual subreddits. Ah, the &lt;a href="https://en.wikipedia.org/wiki/World_Baseball_Classic"&gt;World Baseball Classic&lt;/a&gt;! Someone had posted a highlight reel of her favorite baseball team&amp;#39;s best pitcher—arguably the best pitcher on the planet—recording 7 strikeouts in a single game. She opened up the video, eager to watch.&lt;/p&gt;

&lt;p&gt;Why the hell is Ellis suddenly telling you about sportsball? Because, in an amazing coincidence, she spied the name of the company that had built her new thermostat, right there on the backstop behind home plate!&lt;/p&gt;

&lt;p&gt;So they had WBC advertising money, but couldn&amp;#39;t pony up for a sensible day/time interface. Ellis suspects she&amp;#39;s in for an interesting couple of decades ... assuming her new system lasts that long.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;P.S. Since Ellis has shamelessly segued her way into sportsball, there&amp;#39;s something else she wants to share: a new player on her favorite team, Jhostynxon Garcia, is nicknamed The Password.&lt;/p&gt;

&lt;p&gt;His younger brother Johanfran, also a baseball player, is called The Username.&lt;/p&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>25</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/tdwtf-home-edition-pt-2</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Representative Line: Greater Than False</title><link>https://thedailywtf.com/articles/greater-than-false</link><category>Representative Line</category><pubDate>Wed, 18 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/greater-than-false</guid><description>&lt;p&gt;Today&amp;#39;s anonymous submitter passes us a single line of JavaScript, and it&amp;#39;s a doozy. This line &lt;em&gt;works&lt;/em&gt;, but that&amp;#39;s through no fault of the developer behind it.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;{arr?.&lt;span class="hljs-property"&gt;length&lt;/span&gt; &amp;amp;&amp;amp; shouldNotShow === &lt;span class="hljs-literal"&gt;false&lt;/span&gt; &amp;gt; &lt;span class="hljs-number"&gt;0&lt;/span&gt; (...)}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pedantically, this is JSX, not pure JavaScript, but the rules still apply.&lt;/p&gt;
&lt;p&gt;So, fun fact in JavaScript: &lt;code&gt;true &amp;gt; 0&lt;/code&gt; is true, and &lt;code&gt;false &amp;gt; 0&lt;/code&gt; is false. Which generally makes sense, but why would you use that here? But this code is worse than it looks, thanks to operator precedence.&lt;/p&gt;
&lt;p&gt;The highest precedence operation is the optional chain- &lt;code&gt;arr?.length&lt;/code&gt;. The second highest operation? &lt;code&gt;&amp;gt;&lt;/code&gt;. So the first part of the comparison that evaluates is &lt;code&gt;false &amp;gt; 0&lt;/code&gt;. Which is false. Do you know what&amp;#39;s next? &lt;code&gt;===&lt;/code&gt;. So we compare &lt;code&gt;shouldNotShow&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;. Then we &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; that with the potentially falsy value from our &lt;code&gt;arr?.length&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s all a mess, and it&amp;#39;s all so we can compare against false, which we could have just done with a &lt;code&gt;!&lt;/code&gt; operator. &lt;code&gt;!(arr?.length &amp;amp;&amp;amp; shouldNotShow)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Our submitter credits this to an offshore team, and this does have the vibe of throwing characters at the problem until it passes the test. Less LLM-guided and more &amp;#34;manually executed Markov chain&amp;#34;. That&amp;#39;s also an accurate description of the rest of the code in this code base: hand crafted Markov chain generation.&lt;/p&gt;
&lt;!-- Easy Reader: A decade ago, I fed a bunch of Trump speeches into a Markov chain and the resulting output was honestly indistinguishable. Who needs LLMs? --&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>29</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/greater-than-false</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Poly Means Many, After All</title><link>https://thedailywtf.com/articles/poly-means-many-after-all</link><category>CodeSOD</category><pubDate>Tue, 17 Mar 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/poly-means-many-after-all</guid><description>&lt;p&gt;&lt;strong&gt;Capybara James&lt;/strong&gt; sends us some code which is totally designed to be modular.&lt;/p&gt;
&lt;p&gt;This particular software accepts many kinds of requests which it then converts into a request for a &lt;code&gt;ListView&lt;/code&gt;. This is a perfect example of where to use polymorphism, so you can write one transform method that operates on any kind of request.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s see how they did it:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-java"&gt;&lt;span class="hljs-meta"&gt;@Component&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-keyword"&gt;class&lt;/span&gt; &lt;span class="hljs-title class_"&gt;ListViewTableRequestTransformer&lt;/span&gt; &lt;span class="hljs-keyword"&gt;implements&lt;/span&gt; &lt;span class="hljs-title class_"&gt;Function&lt;/span&gt;&amp;lt;TableExportRequest, ListViewRequest&amp;gt; {
    &lt;span class="hljs-meta"&gt;@Override&lt;/span&gt;
    &lt;span class="hljs-keyword"&gt;public&lt;/span&gt; ListViewRequest &lt;span class="hljs-title function_"&gt;apply&lt;/span&gt;&lt;span class="hljs-params"&gt;(TableExportRequest request)&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;ListViewRequest&lt;/span&gt;(request.getFilters(), request.getRangeFilters(), request.getSearch(), request.getSort());
    }
}
&lt;span class="hljs-meta"&gt;@Component&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-keyword"&gt;class&lt;/span&gt; &lt;span class="hljs-title class_"&gt;ListViewFormulaRequestTransformer&lt;/span&gt; &lt;span class="hljs-keyword"&gt;implements&lt;/span&gt; &lt;span class="hljs-title class_"&gt;Function&lt;/span&gt;&amp;lt;FormulaExportRequest, ListViewRequest&amp;gt; {
    &lt;span class="hljs-meta"&gt;@Override&lt;/span&gt;
    &lt;span class="hljs-keyword"&gt;public&lt;/span&gt; ListViewRequest &lt;span class="hljs-title function_"&gt;apply&lt;/span&gt;&lt;span class="hljs-params"&gt;(FormulaExportRequest request)&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;ListViewRequest&lt;/span&gt;(request.getFilters(), request.getRangeFilters(), request.getSearch(), request.getSort());
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now admittedly, my first instinct for letting generics just handle this wouldn&amp;#39;t work in Java thanks to type erasure. My excuse is that I&amp;#39;ve been using C++ templates for too long. But what&amp;#39;s not pictured in this code is that &lt;code&gt;TableExportRequest&lt;/code&gt; and &lt;code&gt;FormulaExportRequest&lt;/code&gt; both implement the same base interface, which means polymorphism could still condense this down into a single function: &lt;code&gt;ListViewRequest apply(RequestInterface request)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Duplicated code like this is like cockroaches. You&amp;#39;ve seen two, which means there are &lt;em&gt;many many more&lt;/em&gt; lurking in the codebase. All of the various request types get their own identical method, differing only in signature.&lt;/p&gt;
&lt;p&gt;All my explanation doesn&amp;#39;t sum this up as pithily as Capybara James did, however:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There was an attempt to make the code modular and scalable. An attempt I say.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- Easy Reader Version: getEasyReader(CodeSOD); getEasyReader(Feature); getEasyReader(MandatoryFunDay); --&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>3</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/poly-means-many-after-all</wfw:comment></item></channel></rss>