<?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>Wed, 15 Jul 2026 09:21:19 GMT</lastBuildDate><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: AAYFN</title><link>https://thedailywtf.com/articles/aayfn</link><category>CodeSOD</category><pubDate>Tue, 14 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/aayfn</guid><description>&lt;p&gt;&lt;strong&gt;Jason M&lt;/strong&gt; sends us some Ruby code.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-ruby"&gt;&lt;span class="hljs-keyword"&gt;def&lt;/span&gt; &lt;span class="hljs-title function_"&gt;bv&lt;/span&gt;(&lt;span class="hljs-params"&gt;prop, tv=&lt;span class="hljs-string"&gt;&amp;#34;Yes&amp;#34;&lt;/span&gt;, fv=&lt;span class="hljs-string"&gt;&amp;#34;No&amp;#34;&lt;/span&gt;, nv=&lt;span class="hljs-string"&gt;&amp;#34;Not Specified&amp;#34;&lt;/span&gt;&lt;/span&gt;)
  v = &lt;span class="hljs-variable language_"&gt;self&lt;/span&gt;.send(prop)
  &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; v === &lt;span class="hljs-literal"&gt;true&lt;/span&gt;
    tv
  &lt;span class="hljs-keyword"&gt;elsif&lt;/span&gt; v === &lt;span class="hljs-literal"&gt;false&lt;/span&gt;
    fv
  &lt;span class="hljs-keyword"&gt;else&lt;/span&gt;
    nv
  &lt;span class="hljs-keyword"&gt;end&lt;/span&gt;
 &lt;span class="hljs-keyword"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The obvious WTF here is the function name and parameter names. &lt;abbr title="Always Abbreviate Your Function Names"&gt;AAYFN&lt;/abbr&gt;(always abbreviate your function names) seems to be the convention here. But it also contains a more Ruby-specific WTF.&lt;/p&gt;
&lt;p&gt;The function name &lt;code&gt;bv&lt;/code&gt; is short for &amp;#34;boolean value&amp;#34;, obviously. &lt;code&gt;tv&lt;/code&gt; is the &amp;#34;true value&amp;#34;, &lt;code&gt;fv&lt;/code&gt; is the false value, and &lt;code&gt;nv&lt;/code&gt; is the null value. So this is really about pretty-printing boolean values and converting them to strings. While the terrible names make it hard to understand, it&amp;#39;s not &lt;em&gt;that hard&lt;/em&gt; to figure out what&amp;#39;s going wrong here. I hate it, don&amp;#39;t get me wrong, but it just makes me sigh with disappointment, not groan.&lt;/p&gt;
&lt;p&gt;No, the thing that makes me groan is &lt;code&gt;v = self.send(prop)&lt;/code&gt;. This is a very Ruby idiom that lets you access a member of the class by name; essentially it&amp;#39;s like doing &lt;code&gt;self.prop&lt;/code&gt;, but since &lt;code&gt;prop&lt;/code&gt; is a variable containing a property name, we have to &lt;code&gt;send&lt;/code&gt; it.&lt;/p&gt;
&lt;p&gt;This is metaprogramming by strings, which is the main reason I end up hating it. But in this specific instance, it offers us a lot of potential issues. First, if &lt;code&gt;prop&lt;/code&gt; is anything not boolean, we just return &amp;#34;Not Specified&amp;#34;, which is incredibly misleading. I&amp;#39;d argue that if we attempt to use it on a non-boolean field we should throw an exception. Which opens the question: if &lt;code&gt;prop&lt;/code&gt; doesn&amp;#39;t &lt;em&gt;exist&lt;/em&gt;, is that a non-boolean field, or is that a &amp;#34;enh, just call it null&amp;#34; situation? Because right now, that &lt;em&gt;will&lt;/em&gt; throw an exception. It&amp;#39;ll also throw an exception if the thing being accessed is a function that takes parameters. These behaviors may be surprising.&lt;/p&gt;
&lt;p&gt;Now, I don&amp;#39;t know the calling pattern. It&amp;#39;s possible that whatever function calls this already has a good list of the allowed boolean values, and will never call this on a &lt;code&gt;prop&lt;/code&gt; that doesn&amp;#39;t exist. Certainly, that&amp;#39;s what &lt;a href="https://rubyguides.dev/reference/core-classes/send-method/#using-send-with-care"&gt;the Ruby docs recommend&lt;/a&gt;. But I&amp;#39;m going to hate it anyway, because this kind of runtime metaprogramming by passing strings around is eternally asking for trouble. And while I haven&amp;#39;t done a huge amount of Ruby, I&amp;#39;ve done enough to know that any non-trivial codebase &lt;em&gt;ends up like this&lt;/em&gt; once the metaprogramming band-aid is taken off.&lt;/p&gt;
&lt;p&gt;Now, if you don&amp;#39;t mind, I&amp;#39;ll go back to doing my metaprogramming with C++ templates, which are simple, clear, and never result in wildly unmaintainable code because you ended up reimplementing LISP in template operations.&lt;/p&gt;
&lt;!-- Easy Reader Version: "Just monkey patch it," seems to be the dominant way to solve problems in Ruby, and I hate it --&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>13</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/aayfn</wfw:comment></item><item><dc:creator>Ellis Morning</dc:creator><title>The Easy No</title><link>https://thedailywtf.com/articles/the-easy-no</link><category>Feature Articles</category><pubDate>Mon, 13 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-easy-no</guid><description>&lt;blockquote&gt;
&lt;p&gt;There were thousand tickets in the backlog, and I was on the trail of a &lt;a href="https://thedailywtf.com/articles/the-hot-fix"&gt;weird printer issue&lt;/a&gt;. I had a suspect, but that wasn&amp;#39;t enough to close the ticket. I&amp;#39;m &lt;strong&gt;Anonymous&lt;/strong&gt;. This is my story.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whenever you hit the Print button, a request launches into the ether. “Print one copy of this file, double-sided.”&lt;/p&gt;
&lt;p&gt;But you can’t just chuck it out there aimlessly. You gotta tell it where to go. So that’s why we have Internet Protocol, or IP. Every computer, every printer, every device on every network has one or more IP addresses for different operations. They’re just like the address you scribble on the envelope holding Grandma’s Christmas card. Send your print request to the right IP, and you’re in business. Send it to the wrong IP, and they’ll be shaking their heads on the other end. “Print? But all I know how to do is tell you the weather!”&lt;/p&gt;
&lt;p&gt;As for what happens next, you’re at the mercy of the program’s error handling. If you’re lucky, they’ll send a detailed error message. If you’re not, they could ignore you, act up in weird ways, or completely self-destruct in a violent crash.&lt;/p&gt;
&lt;p&gt;I was neck-deep in a Tech Support ticket concerning a printer in Human Resources. Not only was Grandma’s Christmas card landing in Pluto, the Plutonians were writing back, in the form of mysterious complaints that were nothing like the documents the printer had been tasked with.&lt;/p&gt;
&lt;p&gt;My troubleshooting hadn’t shot much trouble at all, so I’d bugged some friends for ideas. Reynaldo had been reminded of an old, retired HR program for logging anonymous employee complaints. While our developer friend Megan quit our icy outdoor break spot to dig up dirt from the software side of things, Reynaldo and I went to his cubicle to trace IPs. He suspected a conflict … and that’s just what his command-line requests revealed. We leaned over his laptop together, studying a couple of terminal windows and their cryptic output to his even-more-cryptic inputs.&lt;/p&gt;
&lt;p&gt;“Whenever that printer got set up in HR, it received an IP that was already in use by this server—” he jabbed an index finger at the relevant part of the screen “—which is apparently still up and running, even though I swear it was decommissioned.” Reynaldo frowned. “Who wants to bet that stupid complaint program has some kind of ability to print cached complaints?”&lt;/p&gt;
&lt;p&gt;I frowned, too. “We won’t know for sure unless Megan digs something up.”&lt;/p&gt;
&lt;p&gt;Reynaldo flashed me a look of pure cynicism. It wasn’t an indictment of Megan’s skill, more skepticism toward the idea of anyone having properly documented this mess. We had better odds of hitting a billion-dollar jackpot.&lt;/p&gt;
&lt;p&gt;I sighed. “It’s an easy workaround, at least: assign the printer a new IP. But we’ve got bigger problems here. Why’s this zombie server still up and kicking? Why’d an IP conflict ever occur in the first place?”&lt;/p&gt;
&lt;p&gt;“Don’t get me started on our FUBAR IP allocation and tracking.” Reynaldo’s lowered voice contained plenty of venom. “We’re talking multiple pools to track, multiple spreadsheets that have to be manually edited. Problems that are easy enough to fix! Why spend money on honest-to-goodness network management software?”&lt;/p&gt;
&lt;p&gt;Short-term budgeting preventing long-term improvements: a damned shame we’d both seen all too many times. Being a tech support drone, having an innate desire to help that no amount of baloney could stamp out, I once more found myself longing to fix the unfixable.&lt;/p&gt;
&lt;p&gt;“In my ticket notes, I’ll make noise about a more permanent solution,” I said. “At the very least, some bigwig oughta leap at the chance to save 3 cents of electricity a year by putting the complaint-spewing server out of its misery.”&lt;/p&gt;
&lt;p&gt;I’d already resolved to contact Leila, the new head of HR, about this ticket. She needed to hear about Hothead, the manager-type who, in a fit of frustration, had taken a hair dryer to the same printer and nearly trashed it. I could also tell her about these lingering network vulnerabilities that would continue causing problems for everyone down the line.&lt;/p&gt;
&lt;p&gt;I decided to do it without telling Reynaldo. I had the feeling that if I let him in on it, his eyes would roll clear out of his skull.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Working from Reynaldo’s cube, I assigned the HR printer a new IP address and once again cleared its queue. Then I sent Tony, the ticket holder, a private message asking him to give printing another go. I felt pretty good about his chances, but I’d wait for him to give me the all-clear before closing the ticket.&lt;/p&gt;
&lt;p&gt;With the messaging app still open on my phone, I saw that Megan had invited me to drop by her cube. From Networking Central, I hoofed it up to Developers’ Row.&lt;/p&gt;
&lt;p&gt;Megan’s cube was a familiar spot filled with bright, cartoony posters and figurines, the only splashes of color for miles. The titles and characters drew blanks in my over-the-hill brain. I kept meaning to ask her what they were, why she liked them. Another time, maybe. I found her with her back toward me, leaning intently in her swivel-chair toward the single monitor over her laptop docking station.&lt;/p&gt;
&lt;p&gt;“Now a good time?” I asked under my breath.&lt;/p&gt;
&lt;p&gt;She whirled around, tense, then relaxed with a smile, her gaze livelier than I’d seen it in a while. She picked up a small external memory stick from her desk to proffer my way. “That’s the HR application’s source code!” she murmured in conspiratorial fashion. “Guess where it came from?”&lt;/p&gt;
&lt;p&gt;I smirked. “I know the answer should be ‘a code repository,’ but in this joint, that’s asking too much.”&lt;/p&gt;
&lt;p&gt;“You’re right!” she replied. “It was never in a repo, never in source control. It lived and died on one dev’s local machine, a dev who retired way before I got here. His successor hung onto all the old code from that guy’s machine, just in case. But yeah, we don’t officially support the application anymore.”&lt;/p&gt;
&lt;p&gt;Megan turned around, using her keyboard to tab over to an open window in a code editor. From over her shoulder, I saw line after line of an archaic programming language that the Egyptians might’ve used to build the pyramids.&lt;/p&gt;
&lt;p&gt;“This code’s an undocumented disaster,” she said.&lt;/p&gt;
&lt;p&gt;“There was an IP conflict at that,” I told her. “The print requests were going to a server that’s still running this thing. We assigned the printer a new IP, but the mystery server remains a head-scratcher.”&lt;/p&gt;
&lt;p&gt;“I’ll trace through and figure out what it does when it gets a print request. Improve its error-handling in general,” Megan promised, more excited than daunted by the prospect. “I mean, if it is still up and running, I could tweak, recompile, and redeploy it so it doesn’t—”&lt;/p&gt;
&lt;p&gt;Insistent metallic knocks sounded behind us. “Excuse me!”&lt;/p&gt;
&lt;p&gt;It was the sort of pointed voice that somehow ignored your ears and stabbed into your gut instead. Megan froze, tense. I turned to find a woman at the threshold with the bearing of a vindictive hall monitor, rapping a fist against the cube’s bare metal frame.&lt;/p&gt;
&lt;p&gt;She leveled a withering frown at Megan. “I was hoping for a status update on the Hewville refresh! Did I hear you say you were planning to work on something else?” The question sounded more like a threat.&lt;/p&gt;
&lt;p&gt;This had to be Megan’s boss. Megan remained tense from head to foot. “I—”&lt;/p&gt;
&lt;p&gt;“I need you to focus on your assigned projects. The things you can actually bill your time against.” After delivering the condescending reminder, the boss’ glare shifted my way. “And you are?”&lt;/p&gt;
&lt;p&gt;I shoved unease aside and put on the game face I’d spent decades perfecting. “Tech Support. I meant no harm, ma’am. I was just asking Megan for help with an open support ticket.”&lt;/p&gt;
&lt;p&gt;“She doesn’t have time for that!” the boss scolded. “If you truly need help from this department, then you must escalate your ticket through the proper channels.”&lt;/p&gt;
&lt;p&gt;I already knew how that went: pulling together screenshots, logs, and other detailed information, only to receive half of a sentence fragment a few days later, asking for something I’d sent with the first message. In this case, I knew someone would just wag a finger at me about the HR application being out of support. Thanks but no thanks.&lt;/p&gt;
&lt;p&gt;Megan struggled to muster one last defense. “This program’s still running on a server somewhere!”&lt;/p&gt;
&lt;p&gt;“For changes to existing code, the proper procedure is to file a formal change request through the Project Management Team. The PMT will create a billing code and assign appropriate resources, if they deem it a proper use of development time.” The boss then looked at me like I was a used tissue she was ready to throw in the trash. “If that’s all, I suggest you head back to Tech Support, Mr. … ?”&lt;/p&gt;
&lt;p&gt;No way was I handing her my name on a platter. I tried to glance Megan’s way, but she was staring at her lap. I felt bad leaving her in that lurch, but staying would only make things worse for the both of us.&lt;/p&gt;
&lt;p&gt;“Later,” I said, both a goodbye and a promise.&lt;/p&gt;
&lt;p&gt;I got the hell out of Devsville, slipping down flight after flight of stairs with a lead weight in my chest. For a moment, Megan had brightened in the face of a collaborative challenge. I’d felt a little more alive, too.&lt;/p&gt;
&lt;p&gt;Thank God someone had been there to make sure no one helped each other.&lt;/p&gt;
&lt;p&gt;The same sicknesses plagued the joint year after year. Almighty budgets. Status quo worship. Hierarchy and miles of red tape. Promising young people like Megan had their spirits crushed, and schmucks like me just put their heads down. Still a huge pile of other support tickets waiting for me, after all.&lt;/p&gt;
&lt;p&gt;The frustration and resentment, the desire to do something to fix this, burned in my chest like a bonfire.&lt;/p&gt;
&lt;p&gt;Back at my desk, I found a message from Tony confirming the new printer was behaving at last. Bolstered by my friends’ findings, I closed his ticket with notes about how the resolution was only a band-aid on a gaping wound. I messaged Megan, too, thanking her for trying.&lt;/p&gt;
&lt;p&gt;And with that emotional bonfire still raging, I settled in and typed out a long email to Leila, detailing in full the most recent shenanigans I’d been a part of.&lt;/p&gt;
&lt;p&gt;By the time I finished, I had one bit of good news: Aggie, my old mentor who’d turned manager a few years back, had accepted my meeting request to meet the next afternoon.&lt;/p&gt;
&lt;p&gt;She wasn’t my boss, which meant it was still safe to vent her way. I had every intention. My resentment would no longer let itself be buried under this or that technical hiccup. It was insisting upon action.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;The next day, I walked to the downtown coffee shop well ahead of the appointed time, glad to have the excuse to be somewhere else. Bought myself a drink and sat down where I could watch the door.&lt;/p&gt;
&lt;p&gt;Five minutes late turned into ten … then twenty. No Aggie.&lt;/p&gt;
&lt;p&gt;It was totally unlike her. Sure, she’d canceled last-minute before, but she’d always got in touch with me to let me know.&lt;/p&gt;
&lt;p&gt;Caffeine jitters fueled a fear I couldn’t shake off. I sent PMs and left voicemails on her cell and work phones, asking her to respond when she could. Back at work, I asked around the department, including my boss.&lt;/p&gt;
&lt;p&gt;She’d been AWOL the whole day. No one knew what was up.&lt;/p&gt;
&lt;p&gt;Hours of work still stretched in front of me. I could barely sit in my chair, much less look at my monitor.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Just call me, Aggie,&lt;/i&gt; I willed, staring at the cell phone clutched in my hand.&lt;/p&gt;
&lt;p&gt;She didn’t. Not that afternoon, not that evening. Beneath my fear was this strange gut feeling, this knowing sense that my worries were justified. It was crazy, but there was no talking myself out of it.&lt;/p&gt;
&lt;p&gt;Early the next morning, they roped the whole department into the big conference room. Nobody knew what was going on until a small, ashen group of managers, directors, and directors of directors filed to the front and called for attention.&lt;/p&gt;
&lt;p&gt;I already knew, deep down, what was coming.&lt;/p&gt;
&lt;p&gt;“We’ve we received some very unfortunate news,” one of the senior directors spoke. “Agatha Shaw … passed away in her home after a heart attack.”&lt;/p&gt;
&lt;p&gt;A few gasps escaped the assembly. Otherwise, you could’ve heard a pin drop. Wide-eyed looks of shock surged through us like lightning.&lt;/p&gt;
&lt;p&gt;Aggie.&lt;/p&gt;
&lt;p&gt;My gut had known all along, but my brain still wasn’t having it. Somebody somewhere must have goofed up royal, I thought. Happens all the time in this joint. Aggie had more life and fight in her than I ever did. I—&lt;/p&gt;
&lt;p&gt;“Those of you who reported directly to Ms. Shaw will report to Bill Watson for now,” the director continued. “Dismissed.”&lt;/p&gt;
&lt;p&gt;The brass began showing themselves out.&lt;/p&gt;
&lt;p&gt;The rest of us just sat there, too stunned to move. &lt;i&gt;That’s it?&lt;/i&gt; I marveled. No memorial? No counseling? No time off? Not one drip of sympathy?&lt;/p&gt;
&lt;p&gt;I could only look on helplessly as Bill Watson, my boss, walked right over to me. He put his hand on my shoulder, leaned over, and muttered into my ear: “My office.”&lt;/p&gt;
&lt;p&gt;While my brain reeled, my feet stood me up obediently. They marched me right off to the next chair I dropped into, the one opposite the large desk in Bill’s office.&lt;/p&gt;
&lt;p&gt;He settled in on his side. “It’s a real shame about Aggie. We’re screwed without her.”&lt;/p&gt;
&lt;p&gt;I just sat there, still reeling.&lt;/p&gt;
&lt;p&gt;”My manager is looking for someone to step up in a big way.” Bill nodded in my direction. “You’re ready. You deserve it. Her direct reports are reporting to me for now; over the next few months, I’m transitioning them to you. The promotion will follow, as soon as the next performance review comes around!”&lt;/p&gt;
&lt;p&gt;We were just cogs in that joint. Never before had the point been driven home so viscerally. Righteous rage surged up from within, clearing my brain and shooting strength through my limbs. I jumped out of that chair and glared down at him. “Hell no! Find someone else!”&lt;/p&gt;
&lt;p&gt;I got the hell out of there and dragged myself all the way home to collapse on my couch.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;b&gt;To be continued ...&lt;/b&gt;&lt;/p&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/the-easy-no</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Einfach so</title><link>https://thedailywtf.com/articles/einfach-so</link><category>Error'd</category><pubDate>Fri, 10 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/einfach-so</guid><description>&lt;p&gt;Do you say &amp;#34;a FAQ&amp;#34; or &amp;#34;an eff eh cue&amp;#34;?  Peter says eff eh cue I think.&lt;/p&gt;

&lt;p&gt;&amp;#34;This is a test&amp;#34;
&lt;strong&gt;Peter G.&lt;/strong&gt; harrumphed testily.
&amp;#34;Create an FAQ with exactly nine entries. Nine? Nine.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#67f8e4c8a1e640379d670a4039d1e54b"&gt;&lt;img itemprop="image" border="0" alt="67f8e4c8a1e640379d670a4039d1e54b" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/09/67f8e4c8a1e640379d670a4039d1e54b.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#34;I think I spent over $NaN?&amp;#34; said an anonymous. 
&amp;#34;This was an interesting offer on myminifactory.com with tight expiry date. Didn&amp;#39;t claim.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#9b22730c427144faa646895be1411d53"&gt;&lt;img itemprop="image" border="0" alt="9b22730c427144faa646895be1411d53" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/09/9b22730c427144faa646895be1411d53.jpeg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And a different reader expected a speedy delivery anon.
&amp;#34;It was about 23:10 UTC when I took this screenshot,
the time zone I keep my PC in, yet local
time my pizza was estimated to arrive at 19:05 CST.
Naturally, I should expect to receive my pizza about four
hours ago! Not my typical experience with delivery as of
late, I must say, but a welcome change nonetheless...&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#cd43a695c8e846cf858cc3b72ba77094"&gt;&lt;img itemprop="image" border="0" alt="cd43a695c8e846cf858cc3b72ba77094" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/09/cd43a695c8e846cf858cc3b72ba77094.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Super saver 
&lt;strong&gt;Michael R.&lt;/strong&gt; lamented 
&amp;#34;That hurts, I missed 6 coupons that would have saved
me 0%.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#ec9a5b21636b4b4bad633abdb4393820"&gt;&lt;img itemprop="image" border="0" alt="ec9a5b21636b4b4bad633abdb4393820" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/09/ec9a5b21636b4b4bad633abdb4393820.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;And our 
&lt;strong&gt;dragoncoder047&lt;/strong&gt; ground this out between his teeth.
&amp;#34;Refactored the runtime spritesheet packer in a game engine I
contribute to, and wound up with this extremely helpful error
message. Turns out that the problem was the ggggggggggggggg wasn&amp;#39;t
properly detecting ggggggggg and was putting all the ggggggggggggg&amp;#39;s in
the same ggggggggggggggggggg. I think. Ggggggggggggg!&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#189885dc898f4fe4b7ef095e9f1ef99e"&gt;&lt;img itemprop="image" border="0" alt="189885dc898f4fe4b7ef095e9f1ef99e" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/09/189885dc898f4fe4b7ef095e9f1ef99e.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/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>18</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/einfach-so</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Flushed Out</title><link>https://thedailywtf.com/articles/flushed-out</link><category>Feature Articles</category><pubDate>Thu, 09 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/flushed-out</guid><description>&lt;p&gt;While a project manager is frequently called upon for their planning ability, the real skill we want from project managers is their ability to &lt;em&gt;communicate&lt;/em&gt;. The job of a project manager is to align the team &lt;em&gt;doing&lt;/em&gt; the work, with the organization goals &lt;em&gt;driving&lt;/em&gt; the work, with the management and leadership teams trying to &lt;em&gt;understand&lt;/em&gt; the work, while juggling all the constraints like budgets, timelines, and the endlessly changing expectations for the project. A good project manager is worth their weight in gold. A bad one will &lt;em&gt;cost&lt;/em&gt; their weight in gold.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mark&lt;/strong&gt; was hired on as a contractor, reporting to Tegan. Tegan was fresh out of business school, complete with an MBA and a variety of project-management training certifications. Unfortunately for Mark and the rest of the team, and especially unfortunately for Tegan, she had absolutely no real world experience. To make matters worse, this wasn&amp;#39;t just a software project: they were working on a system which matched newly developed software with newly designed mechanics and custom build control electronics. A group of experienced software engineers, mechanical engineers, and electrical engineers all found themselves reporting to a bright and shiny MBA. It&amp;#39;s a role that she probably could have grown into, but management saw all the acronyms she continuously put after her name, and decided she could just take the whole thing over with no real guidance.&lt;/p&gt;
&lt;p&gt;It went badly pretty much from the beginning. Tegan was &lt;em&gt;not&lt;/em&gt; a talented communicator. For example, Mark&amp;#39;s team needed to know: on what timeline were the electrical engineers going to deliver the first prototypes, so the software team could start running bench tests of their software? Tegan&amp;#39;s response was a fortune cookie message about balancing the complicated pipelines and lanes on the Gantt chart and hitting all of their milestones; like a fortune cookie, it was vague, important sounding, but ultimately empty.&lt;/p&gt;
&lt;p&gt;Of course, the natural reaction amongst the engineers was to just route around the damage: the various teams could talk to each other just fine without going through Tegan. That, unfortunately, did not go over well with management. Tegan, as the project manager, was their insight into the project. They needed her in the loop on everything. And she couldn&amp;#39;t just be &lt;em&gt;informed&lt;/em&gt;, she had an MBA. She needed to be making decisions. But she was unqualified to make those decisions, which meant the project gradually ground to a halt. Tegan&amp;#39;s emails got more vague, her meetings got longer but accomplished less, and after a certain point, she just &lt;em&gt;stopped replying&lt;/em&gt; to key email threads.&lt;/p&gt;
&lt;p&gt;The first few days of radio silence seemed like a gift. But as time passed and Tegan seemed uninterested or unable to reply to any of the questions the team had for her, the project started to flounder. The engineering teams escalated this problem to management. Management presumably went back to Tegan. At some point, feeling the weight of everything going wrong around her, Tegan sent out this email, which is definitely the best and clearest communication she managed during the project. It&amp;#39;s arguably the clearest, and most accurate communication one could make in this situation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Team,&lt;br/&gt;
I understand all the issues but there are complex interrelations that must be worked out. I am currently constipated on each issue and will let you know when there is movement.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tegan&lt;br/&gt;
MBA, CAPM, PMP&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Her email cost the project &lt;em&gt;many&lt;/em&gt; person-hours as all the engineering teams took a break to have a good laugh about the project manager admitting, in writing, that she was full of crap.&lt;/p&gt;
&lt;p&gt;There was, eventually, movement. Tegan moved on to a new position at a different company. Her replacement, Pam, wasn&amp;#39;t a new hire, but instead a transfer from another department. She wasn&amp;#39;t a great project manager, certainly not worth her weight in gold, but she had enough experience to avoid the worst mistakes, and most important: she was good at &lt;em&gt;regular&lt;/em&gt; communication in order to keep things moving.&lt;/p&gt;
&lt;!-- Easy Reader Version: I've worked with many a crappy project manager --&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>10</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/flushed-out</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Module Test</title><link>https://thedailywtf.com/articles/module-test</link><category>CodeSOD</category><pubDate>Wed, 08 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/module-test</guid><description>&lt;p&gt;&lt;strong&gt;TJ&lt;/strong&gt; inherited a NestJS project. The original developers left the team many years ago, but they&amp;#39;ve left their mark in the codebase.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-typescript"&gt;&lt;span class="hljs-comment"&gt;// ProjectsModule.ts&lt;/span&gt;
&lt;span class="hljs-meta"&gt;@Module&lt;/span&gt;({
  &lt;span class="hljs-attr"&gt;controllers&lt;/span&gt;: […],
  &lt;span class="hljs-attr"&gt;providers&lt;/span&gt;: […],
  &lt;span class="hljs-attr"&gt;exports&lt;/span&gt;: […],
})
&lt;span class="hljs-keyword"&gt;export&lt;/span&gt; &lt;span class="hljs-keyword"&gt;class&lt;/span&gt; &lt;span class="hljs-title class_"&gt;ProjectsModule&lt;/span&gt; {}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NestJS is a dependency-injection oriented framework for TypeScript code. It offers &amp;#34;providers&amp;#34; (dependencies that can be injected), &amp;#34;controllers&amp;#34; (as one would expect), and lets you bundle them together into &amp;#34;modules&amp;#34;. Modules can depend on other modules, letting you build a modular and flexible graph of dependencies. This means that the empty module isn&amp;#39;t &lt;em&gt;wrong&lt;/em&gt; here.&lt;/p&gt;
&lt;p&gt;No, for it to be wrong, we need to write some tests:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-typescript"&gt;&lt;span class="hljs-comment"&gt;// ProjectsModule.test.ts&lt;/span&gt;
&lt;span class="hljs-title function_"&gt;describe&lt;/span&gt;(&lt;span class="hljs-string"&gt;&amp;#34;ProjectsModule&amp;#34;&lt;/span&gt;, &lt;span class="hljs-function"&gt;() =&amp;gt;&lt;/span&gt; {
  &lt;span class="hljs-title function_"&gt;it&lt;/span&gt;(&lt;span class="hljs-string"&gt;&amp;#34;can be created&amp;#34;&lt;/span&gt;, &lt;span class="hljs-function"&gt;() =&amp;gt;&lt;/span&gt; {
    &lt;span class="hljs-keyword"&gt;const&lt;/span&gt; projectsModule = &lt;span class="hljs-keyword"&gt;new&lt;/span&gt; &lt;span class="hljs-title class_"&gt;ProjectsModule&lt;/span&gt;()
    &lt;span class="hljs-title function_"&gt;expect&lt;/span&gt;(projectsModule).&lt;span class="hljs-title function_"&gt;toBeTruthy&lt;/span&gt;()
  })
})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since modules are just containers for related code objects, there isn&amp;#39;t much to &lt;em&gt;test&lt;/em&gt; here. While &amp;#34;dynamic modules&amp;#34; which execute code are a thing, they don&amp;#39;t execute that code &lt;em&gt;at construction time&lt;/em&gt; anyway. This test will always pass. It isn&amp;#39;t a test, it doesn&amp;#39;t do anything. It likely doesn&amp;#39;t even get their coverage up, since whatever providers or controllers it&amp;#39;s referencing aren&amp;#39;t covered by this test. It&amp;#39;s a test that tests nothing but the framework it runs on top of.&lt;/p&gt;
&lt;p&gt;&amp;#34;At least there are tests,&amp;#34; TJ writes.&lt;/p&gt;
&lt;!-- Easy Reader Version: TRWTF are the endless web frameworks that do the same things differently. It's the XKCD standards comic, but in Hell. --&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>9</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/module-test</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: On Hold</title><link>https://thedailywtf.com/articles/on-hold</link><category>CodeSOD</category><pubDate>Tue, 07 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/on-hold</guid><description>&lt;p&gt;&amp;#34;&lt;strong&gt;Dragoncoder&lt;/strong&gt;&amp;#34; supports a web application that has a &amp;#34;wait time&amp;#34; for access. I hate that that&amp;#39;s a thing, but I recognize that there are real-world constraints where this might make sense. Still, I hate it. But that&amp;#39;s not the WTF.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;      &lt;span class="hljs-keyword"&gt;var&lt;/span&gt; minutes = &lt;span class="hljs-built_in"&gt;parseInt&lt;/span&gt;( &lt;span class="hljs-number"&gt;12&lt;/span&gt; , &lt;span class="hljs-number"&gt;10&lt;/span&gt;);
      &lt;span class="hljs-keyword"&gt;var&lt;/span&gt; time = &lt;span class="hljs-variable language_"&gt;document&lt;/span&gt;.&lt;span class="hljs-title function_"&gt;getElementById&lt;/span&gt;(&lt;span class="hljs-string"&gt;&amp;#39;waitTime&amp;#39;&lt;/span&gt;);

      &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; ( minutes &amp;lt; &lt;span class="hljs-number"&gt;2&lt;/span&gt;) {
        time.&lt;span class="hljs-property"&gt;innerText&lt;/span&gt; = &lt;span class="hljs-string"&gt;&amp;#34;Your estimated wait time is 12 minute.&amp;#34;&lt;/span&gt;
      } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (minutes &amp;lt; &lt;span class="hljs-number"&gt;60&lt;/span&gt;) {
        time.&lt;span class="hljs-property"&gt;innerText&lt;/span&gt; = &lt;span class="hljs-string"&gt;&amp;#34;Your estimated wait time is 12 minutes.&amp;#34;&lt;/span&gt;
      } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (minutes === &lt;span class="hljs-number"&gt;60&lt;/span&gt;) {
        time.&lt;span class="hljs-property"&gt;innerText&lt;/span&gt; = &lt;span class="hljs-string"&gt;&amp;#34;Your estimated wait time is 0 hour.&amp;#34;&lt;/span&gt;
      } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (minutes &amp;lt; &lt;span class="hljs-number"&gt;120&lt;/span&gt; &amp;amp;&amp;amp; (minutes % &lt;span class="hljs-number"&gt;60&lt;/span&gt; === &lt;span class="hljs-number"&gt;1&lt;/span&gt;)) {
        time.&lt;span class="hljs-property"&gt;innerText&lt;/span&gt; = &lt;span class="hljs-string"&gt;&amp;#34;Your estimated wait time is 0 hour and 12 minute.&amp;#34;&lt;/span&gt;
      } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (minutes &amp;lt; &lt;span class="hljs-number"&gt;120&lt;/span&gt;) {
        time.&lt;span class="hljs-property"&gt;innerText&lt;/span&gt; = &lt;span class="hljs-string"&gt;&amp;#34;Your estimated wait time is 0 hour and 12 minutes.&amp;#34;&lt;/span&gt;
      } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (minutes &amp;gt; (&lt;span class="hljs-number"&gt;60&lt;/span&gt; * &lt;span class="hljs-number"&gt;4&lt;/span&gt;)) {
        time.&lt;span class="hljs-property"&gt;innerText&lt;/span&gt; = &lt;span class="hljs-string"&gt;&amp;#34;Your estimated wait time is more than 4 hours.&amp;#34;&lt;/span&gt;
      } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (minutes % &lt;span class="hljs-number"&gt;60&lt;/span&gt; === &lt;span class="hljs-number"&gt;0&lt;/span&gt;) {
        time.&lt;span class="hljs-property"&gt;innerText&lt;/span&gt; = &lt;span class="hljs-string"&gt;&amp;#34;Your estimated wait time is 0 hours.&amp;#34;&lt;/span&gt;
      } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; {
        time.&lt;span class="hljs-property"&gt;innerText&lt;/span&gt; = &lt;span class="hljs-string"&gt;&amp;#34;Your estimated wait time is 0 hours and 12 minutes.&amp;#34;&lt;/span&gt;
      }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This wait time page is initially rendered by their backend, but after that point, gets served up by a cache at the edge of their CDN. That makes sense, since &amp;#34;have the users hammer your backend while they&amp;#39;re waiting&amp;#34; is a bad idea.&lt;/p&gt;
&lt;p&gt;Note the line &lt;code&gt;var minutes = parseInt( 12 , 10);&lt;/code&gt;. This is rendered from the backend, which is of course my least favorite way to send data from the server side to the client side.&lt;/p&gt;
&lt;p&gt;But that&amp;#39;s not the core problem here. The core problem is: what the hell are they outputting?&lt;/p&gt;
&lt;p&gt;If your wait time is less than 2, or less than 60, we tell you that your wait time is 12 minutes. Or &amp;#34;12 minute&amp;#34;, because who cares about pluralization? If your wait time is exactly 60 minutes, we tell you that your wait time is &amp;#34;0 hour&amp;#34;, which I assume means you&amp;#39;ll have enough time to watch the classic airplane disaster movie, &lt;em&gt;Zero Hour&lt;/em&gt;, which you surely know &lt;em&gt;Airplane!&lt;/em&gt; is a remake of.&lt;/p&gt;
&lt;p&gt;I can only think that the &lt;em&gt;text&lt;/em&gt; is also being generated by logic on the server side- though our submitter doesn&amp;#39;t suggest that&amp;#39;s the case. Though they do wonder why the code couldn&amp;#39;t be something like: &lt;code&gt;Your estimated wait time is: ${Math.floor(wait_time_minutes / 60)} hours and ${wait_time_minutes % 60} minutes&lt;/code&gt;, which is both fewer bytes to send from your cache &lt;em&gt;and&lt;/em&gt; more useful to the end user.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Or maybe we just make this wait time go away.&lt;/em&gt; Again, I don&amp;#39;t know why it&amp;#39;s there, there may be a good real-world constraint that requires it, but… &lt;em&gt;is there&lt;/em&gt;? Is there really?&lt;/p&gt;
&lt;!-- Easy Reader Version: Ticket drop times, I know. I don't know that's what our submitter works on, but even so, I hate these kinds of wait events. Countdown pages annoy me! --&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>28</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/on-hold</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Best of…: Classic WTF: Difficult Personality</title><link>https://thedailywtf.com/articles/classic-wtf-difficult-personality</link><category>Best of…</category><pubDate>Mon, 06 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/classic-wtf-difficult-personality</guid><description>&lt;blockquote&gt;As the US took this weekend to celebrate their complicated relationship with tyranny, we reach back through the archives for another story of tyrants. If you think about it, the Declaration of Independence is basically the same thing as quitting without notice. &lt;a href="https://thedailywtf.com/articles/Difficult-Personality"&gt;Original&lt;/a&gt; --&lt;strong&gt;Remy&lt;/strong&gt;&lt;/blockquote&gt;

&lt;p&gt;It was &lt;b&gt;Steve&lt;/b&gt;&amp;#39;s first week on the job, and he had plenty of questions about the code base and the new features he was supposed to implement. He muddled through for most of the week, but Friday morning he hit a brick wall and needed to talk to Bill, the architect.
&lt;/p&gt;&lt;p&gt;
&amp;#34;Can I meet with you for like an hour to go over things?&amp;#34; Steve asked.
&lt;/p&gt;&lt;p&gt;
&amp;#34;No.&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;Can I get half an hour then? I h-&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;&lt;i&gt;No&lt;/i&gt;. Company meeting, every Friday, &lt;span onclick="cornify_add();return false;" title="click me!"&gt;12-5pm&lt;/span&gt;&lt;script type="text/javascript" src="//www.cornify.com/js/cornify.js"&gt;&lt;/script&gt;. It should be on your calendar. I&amp;#39;ll forward the invite.&amp;#34;
&lt;/p&gt;&lt;p&gt;
Bill also couldn&amp;#39;t free up time in the morning, so that meant Steve was stuck until Monday afternoon. Still, it probably wasn&amp;#39;t all bad. He assumed that since this was a small company, in startup mode, it was going to be one of those meetings that was less meeting and more party. He had heard about one company in town that had a kegger every Friday afternoon.
&lt;/p&gt;&lt;p&gt;
Steve really should have known better. During his interview, the actual technical questions were thin on the ground. It focused more on &amp;#34;soft skills&amp;#34;, like time management. He fielded a lot of questions about how best to manage his time. The other question that really stuck out in his mind was the standard, &amp;#34;Have you ever had to deal with a difficult personality in the workplace? How did you deal with it?&amp;#34; It was memorable, less because the question itself was unusual, but because at least six variations of the same question showed up in the interview.
&lt;/p&gt;&lt;p&gt;
On his very first day, he learned who the difficult personality was: Frank, the boss and grand-high pooba of the dev team. Around 2PM Frank lumberghed &lt;!-- this is my new favorite verb. Honestly, one of the best things about English is how easily words can change parts of speech. Verbing nouns and nouning verbs is just a basic part of the language. I honestly think that's a big part of the reason English has spread so virally. That and the fact that two successive global empires have used English as their lingua franca.--&gt; himself into Steve&amp;#39;s cube. &amp;#34;Yeah, we&amp;#39;ve got a little problem,&amp;#34; Frank said. &amp;#34;I&amp;#39;ve noticed you spending a great deal of time in the break room.&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;Oh, yeah, I was just going back for more coffee,&amp;#34; Steve said with an awkward laugh. &amp;#34;You know how it is with programmers- we&amp;#39;re fueled by caffeine.&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;Yeah, well, if you could just go ahead and make sure you&amp;#39;re at your desk doing work, that would be great.&amp;#34;
&lt;/p&gt;&lt;p&gt;
As it turned out, Frank had gone easy on Steve because it was Steve&amp;#39;s first day. The next day, Steve sat in on Bill&amp;#39;s planning meeting- a 4-hour marathon to organize the development backlog and parcel out work. Halfway through, Bill called for a break. He and a few other co-workers darted outside to gradually commit suicide via cancer, while everybody else hung around the room committing suicide by donut. And then Frank walked in.
&lt;/p&gt;&lt;p&gt;
&amp;#34;What&amp;#39;s happening?&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;It&amp;#39;s um… just a little break,&amp;#34; one of the devs replied. &amp;#34;Bill&amp;#39;s outside.&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;I see.&amp;#34; Frank loitered in the room until Bill returned. The instant Bill&amp;#39;s foot crossed the threshold of the meeting room, Frank&amp;#39;s human facade was stripped away, and a spitting, slavering demon replaced him. He proceeded to dress Bill down, back up and right back down for disrespecting his team, disrespecting the company, disrespecting Frank and Frank&amp;#39;s poor elderly mother with his attitude. He closed with, &amp;#34;They&amp;#39;re &lt;i&gt;developers&lt;/i&gt; and I want them sitting around and developing! Not waiting for you to finish your smoke breaks!&amp;#34;
&lt;/p&gt;&lt;p&gt;
On Thursday, Steve got to drive a meeting to show off the latest batch of features the dev team had completed. When he turned on the projector, Frank asked, &amp;#34;What&amp;#39;s wrong with your computer?&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;Um… nothing?&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;The desktop is wrong! None of the icons are in the right place!&amp;#34;
&lt;/p&gt;&lt;p&gt;
Like most developers, Steve had changed the wallpaper and reorganized his desktop to suit his working style. Unfortunately, his transgression against the default desktop settings set Frank off on a long rant that consumed the entirety of the meeting. Steve was lucky, Frank claimed, that he wasn&amp;#39;t fired on the spot. Standard work was vitally important, and personalization was frowned upon. &amp;#34;It&amp;#39;s vitally important that any developer can use any other developer&amp;#39;s computer- we can&amp;#39;t afford to waste a minute of time just because you needed to be a special little snowflake!&amp;#34;
&lt;/p&gt;&lt;p&gt;
By the time the Friday afternoon meeting rolled around, Steve should have been expecting some kind of Frank-led time management course. Instead, Bill handed him a mop. &amp;#34;New blood gets mop duties. Start in the break room, and then hit the other common areas.&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;Excuse me?&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;Frank&amp;#39;s orders. Every Friday, we spend the afternoon cleaning the office, from top to bottom.&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;There isn&amp;#39;t a cleaning crew?&amp;#34;
&lt;/p&gt;&lt;p&gt;
&amp;#34;Oh, there is,&amp;#34; Bill said. &amp;#34;Frank doesn&amp;#39;t trust them to do a good job.&amp;#34; That weekend, Steve decided to take Frank&amp;#39;s lessons on time management to heart, and immediately left to seek employment that didn&amp;#39;t involve wasting his time.&lt;/p&gt;
&lt;!-- Easy Reader Version: Cleanliness and godliness: both a waste of time? --&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>13</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/classic-wtf-difficult-personality</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Kaids Hen 2025</title><link>https://thedailywtf.com/articles/kaids-hen-2025</link><category>Error'd</category><pubDate>Fri, 03 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/kaids-hen-2025</guid><description>&lt;p&gt;On the recurring transport
beat, this week brings us a handful of wtfs relating to
mass transit. Nothing private.&lt;/p&gt;

&lt;p&gt;&amp;#34;Thank you for traveling with Deutsche Bahn&amp;#34; sneers 
&lt;strong&gt;Philipp H.&lt;/strong&gt; bitterly, explaining 
&amp;#34;The German railroad company sadly is famous for often being
late and also has lots of other issues. While booking
my next trip I&amp;#39;m asked to pick my seats for
the reservation. - Looks like they now stack seats on
each other or on the table. - hopefully the seats
facing the wall at least have a window there. -
winning the jackpot lottery also seems more likely than understanding
their seat numbering system.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#1f2002fe488641a18f86f36d3c3530b0"&gt;&lt;img itemprop="image" border="0" alt="1f2002fe488641a18f86f36d3c3530b0" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/02/1f2002fe488641a18f86f36d3c3530b0.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;&amp;#34;Whöøps!&amp;#34; wröte 
&lt;strong&gt;Adrien K.&lt;/strong&gt; metallically. 
&amp;#34;Other monitors on that train were fine. It&amp;#39;s just this
one which refused to display unicode characters correctly.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#35c86ef3f32645b9b26bbe8c1d48d14a"&gt;&lt;img itemprop="image" border="0" alt="35c86ef3f32645b9b26bbe8c1d48d14a" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/02/35c86ef3f32645b9b26bbe8c1d48d14a.jpeg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#34;Trains slashdotted&amp;#34;
&lt;strong&gt;Peter G.&lt;/strong&gt;
&amp;#34;Looks like the train has been slashdotted...&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#6ce6b2f1c9ea41318bf229c8c9731c3d"&gt;&lt;img itemprop="image" border="0" alt="6ce6b2f1c9ea41318bf229c8c9731c3d" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/02/6ce6b2f1c9ea41318bf229c8c9731c3d.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;Ernesto&lt;/strong&gt; reports a simple typo, included here
because it relates to a story I have long found both sobering and inspiring. 
He relates: &amp;#34;Translated from Italian, this reads &amp;#34;We got to come back a few
years. Exactly back to July 19th, 2989 ...&amp;#34; &lt;a href="https://www.punto-informatico.it/pilota-salva-vita-185-passeggeri-morte/"&gt;
Italian source.&lt;/a&gt; 
The news was about a plane crash with some
deaths, not the best argument for joking. But the author&amp;#39;s
finger slipped a little bit and we&amp;#39;re going back to
the future. The bright side, the article tells how 185
passengers out of 296 survived thanks to the pilots.&amp;#34;
&lt;br/&gt; Despite the tragic loss of life, it is
an astounding story of skill and teamwork. 
If you&amp;#39;re unfamiliar, the 
&lt;a href="https://en.wikipedia.org/wiki/United_Airlines_Flight_232"&gt;English Wikipedia is here.&lt;/a&gt;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#708696118d8d4242922bade1f75bf55a"&gt;&lt;img itemprop="image" border="0" alt="708696118d8d4242922bade1f75bf55a" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/02/708696118d8d4242922bade1f75bf55a.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;On a more light-hearted note, 
&lt;strong&gt;Michael R.&lt;/strong&gt; sent in a photo of a
heavily-modified double-decker Delorean, which proposes
to deliver passengers before they board.  That must have been some
party to inspire repeat visits!
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#a586fca1db4a439b84ce7ad53bd7786a"&gt;&lt;img itemprop="image" border="0" alt="a586fca1db4a439b84ce7ad53bd7786a" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/02/a586fca1db4a439b84ce7ad53bd7786a.jpeg"/&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>15</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/kaids-hen-2025</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: The Most Dangerous Game</title><link>https://thedailywtf.com/articles/the-most-dangerous-game</link><category>CodeSOD</category><pubDate>Thu, 02 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-most-dangerous-game</guid><description>&lt;p&gt;While we talk about bad video game code periodically, we generally avoid it because it&amp;#39;s so specialized and while something like &lt;a href="https://en.wikipedia.org/wiki/Fast_inverse_square_root"&gt;fast inverse square root&lt;/a&gt; is bad code from a &lt;em&gt;maintainability&lt;/em&gt; perspective, it&amp;#39;s great code for abusing floating points to make math fast.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Işıtan Yıldız&lt;/strong&gt; sends us a snippet from a game&amp;#39;s config file. I won&amp;#39;t pick on the specific game, but this isn&amp;#39;t some random build of TuxCart, but a released game sold on multiple platforms. It&amp;#39;s from a small team, but it&amp;#39;s an actual professional product running on many devices. What&amp;#39;s notable about this is the game &lt;em&gt;has multiplayer&lt;/em&gt; elements, which means networking code, which means…&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-c"&gt;net_socks_buffer_size					= &lt;span class="hljs-number"&gt;4096&lt;/span&gt;;				&lt;span class="hljs-comment"&gt;//I wouldn&amp;#39;t change this if I were you&lt;/span&gt;
net_max_message_size					= &lt;span class="hljs-number"&gt;32768&lt;/span&gt;;			&lt;span class="hljs-comment"&gt;//changing this will require restarting the game.  MUST be power of 2, don&amp;#39;t be a dick and make it too big&lt;/span&gt;
net_max_download_frames					= &lt;span class="hljs-number"&gt;16&lt;/span&gt;;				&lt;span class="hljs-comment"&gt;//changing this will require restarting the game.  MUST be power of 2 and smaller than net_max_message_size&lt;/span&gt;
net_udp_packet_size						= &lt;span class="hljs-number"&gt;65536&lt;/span&gt;;			&lt;span class="hljs-comment"&gt;//576 bytes the &amp;#34;recommended&amp;#34; fragment cutoff, ipv6 requires 1080.  The game will check automatically and make sure you aren&amp;#39;t out of range (at least on windows it can do this)&lt;/span&gt;
net_udp_packet_send_buffer_size			= &lt;span class="hljs-number"&gt;4&lt;/span&gt;;				&lt;span class="hljs-comment"&gt;//how many packets it can store before sending (ideally it shouldn&amp;#39;t be storing anything but threads are a b*)&lt;/span&gt;
net_udp_packet_recv_buffer_size			= &lt;span class="hljs-number"&gt;8&lt;/span&gt;;				&lt;span class="hljs-comment"&gt;//how many packets we can receive in 1 frame (8 is defualt, it&amp;#39;ll discard packets that don&amp;#39;t fit... it&amp;#39;ll warn you in the console when this happens)&lt;/span&gt;
net_udp_force_specified_size			= &lt;span class="hljs-literal"&gt;false&lt;/span&gt;;			&lt;span class="hljs-comment"&gt;//overrides what the OS recommends, could disable networking and maybe crash the game? who knows&lt;/span&gt;
net_udp_enable_checksum					= &lt;span class="hljs-literal"&gt;false&lt;/span&gt;;			&lt;span class="hljs-comment"&gt;//probably unnecessary to have UDP checksums, but you can if you want for some reason&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;… it means you can configure your copy of the game to attempt DoS attacks against other players&amp;#39; network stacks.&lt;/p&gt;
&lt;p&gt;I enjoy the warning here: don&amp;#39;t be a dick. You &lt;em&gt;can&lt;/em&gt; set your max message size to any power of 2, but don&amp;#39;t be a &lt;em&gt;dick&lt;/em&gt; about it.&lt;/p&gt;
&lt;p&gt;The networking settings are fun, and I&amp;#39;m glad to know that I can probably cause the game to crash (either my copy or my fellow players&amp;#39; copies). But can I do something &lt;em&gt;dangerous&lt;/em&gt; or even… oh, I don&amp;#39;t know, &lt;em&gt;crazy&lt;/em&gt;? I really hope I can.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-c"&gt;sys_ignore_variable_constraints			= &lt;span class="hljs-literal"&gt;false&lt;/span&gt;;			&lt;span class="hljs-comment"&gt;//DANGEROUS AS F***, leave off goddamnit you&amp;#39;re crazy if you turn this on&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;#39;s the spirit! I want every game to add this config flag IMMEDIATELY. Actually, I&amp;#39;m working on a robot: I&amp;#39;m &lt;em&gt;definitely&lt;/em&gt; going to add that to my robot software. I&amp;#39;m gonna make the robot arm punch through a wall (note: it&amp;#39;s not supposed to punch through walls, and I think a number of people would get very upset with me).&lt;/p&gt;
&lt;!-- Easy Reader Version: DANGEROUS AS FUCK --&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>19</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/the-most-dangerous-game</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Representative Line: A Specific Key</title><link>https://thedailywtf.com/articles/a-specific-key</link><category>Representative Line</category><pubDate>Wed, 01 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/a-specific-key</guid><description>&lt;p&gt;Today&amp;#39;s anonymous submission isn&amp;#39;t really a WTF, but it highlights the hardest problem in computer science: naming things.&lt;/p&gt;
&lt;p&gt;For example, let&amp;#39;s say you saw a method called &lt;code&gt;handleRSAPrivateKeyGeneration&lt;/code&gt;. You&amp;#39;d likely assume that it generates an RSA private key. More specifically, it accepts a &lt;em&gt;request&lt;/em&gt; for a private key and &lt;em&gt;handles&lt;/em&gt; that request. It&amp;#39;s right there in the name.&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;handleRSAPrivateKeyGeneration&lt;/span&gt;&lt;span class="hljs-params"&gt;(
        &lt;span class="hljs-meta"&gt;@RequestParam(value = &amp;#34;algorithm&amp;#34;, defaultValue = &amp;#34;EC&amp;#34;)&lt;/span&gt; KeyAlgorithm algorithm,…
)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Except this function accepts an algorithm as a parameter. That&amp;#39;s not bad design; it makes sense to inject implementations like that. Though in this case, it looks like it&amp;#39;s injecting a key that can be used to look up the actual implementation, which I like less, but I don&amp;#39;t know the rest of the implementation, so we can let it slide.&lt;/p&gt;
&lt;p&gt;So there&amp;#39;s no WTF here. It&amp;#39;s a badly named function that may not return an &lt;em&gt;RSA&lt;/em&gt; key, but does return a valid cryptographic key. By default it generates an elliptic curve key. Presumably as an armored key, since it returns a &lt;code&gt;String&lt;/code&gt;- and the armor usually supplies enough of a hint that consumers can infer the key type. Our submitter tells us that this function is part of a Java Spring controller, and returns a string because the result is displayed in a web page.&lt;/p&gt;
&lt;p&gt;No WTF, but it does highlight how sometimes being &lt;em&gt;too specific&lt;/em&gt; with your name can make the name less clear. &lt;code&gt;handlePrivateKeyGeneration&lt;/code&gt; would be a better name, since we don&amp;#39;t know exactly what kind of private key it&amp;#39;s generating.&lt;/p&gt;
&lt;p&gt;Names, as always, remain hard.&lt;/p&gt;
&lt;!-- Easy Reader Version: Though don't get me started on getting PK8 keys formatted the right way for one of the libraries I use- there's a whole fight over the way it's armored and represented that means I spent like 2 days trying to get an API to accept the key- a key that was 100% valid and good, but just stored in the wrong armor. --&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>16</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/a-specific-key</wfw:comment></item><item><dc:creator>Ellis Morning</dc:creator><title>The Hot Fix</title><link>https://thedailywtf.com/articles/the-hot-fix</link><category>Feature Articles</category><pubDate>Tue, 30 Jun 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-hot-fix</guid><description>&lt;blockquote&gt;
&lt;p&gt;Everybody has a nemesis. A dark mirror of yourself, a challenge that is everything you hate. If you&amp;#39;ve ever worked tech-support, you know what that is: printer issues.&lt;br/&gt;
I&amp;#39;m &lt;strong&gt;Anonymous&lt;/strong&gt;, and you last saw me in the case of &lt;a href="https://thedailywtf.com/articles/the-ghost-cursor"&gt;The Ghost Cursor&lt;/a&gt;. This is my story.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As the days marched on, the chill in the air turned from bracing to painful. God had hoofed it down to Florida for the winter, and this year, he&amp;#39;d stolen Hope away with him. Between leaden skies and dirty slush, gale-force winds sent snow tearing down city streets to sandblast one and all into their constituent atoms.&lt;/p&gt;
&lt;p&gt;In that timeless slog, one year ended and another began, barely noticed. The short days and bitter cold made my foot-and-bus commute almost unbearable. Only the promise of warmth and caffeine at the other end got me through. A cup of joe at my desk, then a glance at my caseload, something I approached with a weird mix of curiosity and dread.&lt;/p&gt;
&lt;p&gt;That morning, a fresh ticket had just come my way: The new printer in HR keeps printing gibberish.&lt;/p&gt;
&lt;p&gt;Another printer. Why was it always printers? I dialed up the source, a guy named Tony, and made my introductions. “What do you mean by &amp;#39;gibberish?&amp;#39;”&lt;/p&gt;
&lt;p&gt;“It&amp;#39;d be easier to show you in person,” Tony replied, his voice jittery. “Could you stop by my cube right away?”&lt;/p&gt;
&lt;p&gt;“Sure thing.”&lt;/p&gt;
&lt;p&gt;I hung up, tossed the last dregs of coffee down my throat, and stood from my chair. At the same moment, a slight silver-haired woman made tracks down the open passageway a few feet away from me. She clutched her laptop and a stack of folders to her chest, making a beeline toward who-knew-what.&lt;/p&gt;
&lt;p&gt;My first pleasant surprise of the day. I couldn&amp;#39;t help calling out to her. “Aggie! How&amp;#39;s it goin&amp;#39;?”&lt;/p&gt;
&lt;p&gt;When I&amp;#39;d first gotten my start in Tech Support, Agnes Shaw had been one of the department&amp;#39;s top reps. She knew every system quirk, every trick to pull, every right thing to say to leave a smile on someone&amp;#39;s face. I&amp;#39;d come up under her wing, sought her advice a million times.&lt;/p&gt;
&lt;p&gt;And then they&amp;#39;d offered Aggie a promotion, with a fancy title and salary to boot. She&amp;#39;d taken it.&lt;/p&gt;
&lt;p&gt;That was years ago, now. I wasn&amp;#39;t her direct report, so I only caught glimpses of her now and then. It was a shame.&lt;/p&gt;
&lt;p&gt;Aggie halted in her tracks, dazed and startled, before looking my way. A second later, she smiled. “Hello! Doing just fine, yourself?”&lt;/p&gt;
&lt;p&gt;“Same as ever.” But my spirits had lifted. Knowing there was no time to waste, I darted over to conversational distance. “You&amp;#39;re a hard one to get ahold of.”&lt;/p&gt;
&lt;p&gt;She shrugged her shoulders with a wistful expression.&lt;/p&gt;
&lt;p&gt;“Why don&amp;#39;t we step out for a smoke?” It seemed like we both needed it. “When are you free?”&lt;/p&gt;
&lt;p&gt;“Not today. Meetings all day.” Aggie glanced askance. “It&amp;#39;s not appropriate for me to go out there, anyway. You need a place where you can vent freely.”&lt;/p&gt;
&lt;p&gt;“Spoken like a true manager,” I scolded with a smirk. “Listen, we haven&amp;#39;t caught up in ages. Could we step out for coffee sometime?”&lt;/p&gt;
&lt;p&gt;A warm glow peeked through her distraction. “I&amp;#39;d like that! Find an open spot on my schedule and book it, OK? I gotta run!” With a look of apology, Aggie backed away and rushed down the passage flanked by cubicles and filing cabinets.&lt;/p&gt;
&lt;p&gt;Aggie made these offers all the time. Then, just before the appointed hour, something always came up that required a rain check. Well, I didn&amp;#39;t care. I darted back to my desk, woke up my sleeping machine, and pulled up the office calendar to request a meeting the next day, right when I usually needed a dose of caffeine to make it through an otherwise endless afternoon. It was on Aggie to confirm or reschedule.&lt;/p&gt;
&lt;p&gt;Meanwhile, I had a date with HR.&lt;/p&gt;
&lt;p&gt;Human Resources. Normally, those words gave me an instant case of the willies. Μost of the people there were the sort of drones who couldn&amp;#39;t hack Accounting or Finance in business school. But Leila … Leila was different. I couldn&amp;#39;t help thinking about her. Back when I&amp;#39;d fielded a support ticket up in C-Town, an issue caused by the very CEO who&amp;#39;d filed the ticket, Leila had helped me keep my head attached to my neck. It seemed like maybe, just maybe, she really did want to improve this sorry joint the way she claimed.&lt;/p&gt;
&lt;p&gt;I entered the nearest stairwell and plodded down a couple flights of concrete steps. Within those narrow confines, I brought myself back to reality. Leila was one executive among dozens on the org-chart. She wouldn&amp;#39;t have a blessed thing to do with a low-level case like this. I had to stay on my toes in HR, no matter what friends I thought I&amp;#39;d made.&lt;/p&gt;
&lt;p&gt;I pushed open the stairwell door and entered a carpeted space lined with filing cabinets, supply closets, and office machines. Sharp florescent lighting revealed an older man in a tailored suit only a few feet away, frowning as he took a hair dryer to the insides of a large printer that&amp;#39;d seen better days and now begged for oblivion.&lt;/p&gt;
&lt;p&gt;As the stairwell door swung shut behind me, I froze. No matter how many years you piled up in this joint, it never ran out of new things to throw at you. This had to be the printer I was there to fix—more like save from yet another abusive higher-up who&amp;#39;d require kid-glove handling.&lt;/p&gt;
&lt;p&gt;First things first. I had no idea if I&amp;#39;d gotten there in time to save the printer, but damned if I wouldn&amp;#39;t try. Like a lifeguard diving in after a drowning victim, I rushed over to the outlet where the hair dryer was plugged in. Adding to the insanity, it was the wrong sort of outlet for a hair dryer, which needed a GFCI to run safely. I ripped the plug from the outlet and threw it aside.&lt;/p&gt;
&lt;p&gt;The roar of the dryer faded, leaving stunned silence in its wake.&lt;/p&gt;
&lt;p&gt;Burning with righteous fire, I spun around to face the perp. The HR big-shot faced me, too, brandishing his hair dryer like a revolver. Wide-eyed passersby fringed the scene like extras in a B-Western.&lt;/p&gt;
&lt;p&gt;Kicking anything or anyone when they were down was the sort of thing that stabbed through my armor of veteran cynicism, riling me up with righteous anger. But an outburst would only make things worse. For the good of all, I swallowed it, forcing a polite lie past gritted teeth. “Just wanted to make sure you could hear me, sir.”&lt;/p&gt;
&lt;p&gt;Like hell.&lt;/p&gt;
&lt;p&gt;“Tech Support,” I introduced myself. “This the printer that ain&amp;#39;t working?”&lt;/p&gt;
&lt;p&gt;Hothead&amp;#39;s glaring frustration shifted away from his victim, toward me. “Yes, and I&amp;#39;ve had it! It must be moisture inside the machine.”&lt;/p&gt;
&lt;p&gt;God, help me. Oh, right: Florida.&lt;/p&gt;
&lt;p&gt;“Good thinking, sir,” I said. “But I&amp;#39;m less worried about moisture and more worried about melting sensitive electronics with all that heat.”&lt;/p&gt;
&lt;p&gt;His eyes went wide, like the notion had never entered his brain.&lt;/p&gt;
&lt;p&gt;Slowly, I knelt to pick up the hair dryer&amp;#39;s plug. Unchallenged, I rose and started winding the power cord around my left hand, inching closer to him in the process. Once I was standing in front of him, I proffered the wire bundle.&lt;/p&gt;
&lt;p&gt;“Hold onto that for me, sir, if you don&amp;#39;t mind.” Phrasing things as favors made them go down smoother. Now to dig up a workaround that would get this guy out of everyone&amp;#39;s hair. “Is there some other printer you can use for now?”&lt;/p&gt;
&lt;p&gt;His open hand clamped over the wire as his expression soured. “Yes, but it&amp;#39;s a pain to walk over there!”&lt;/p&gt;
&lt;p&gt;“I understand, sir. It&amp;#39;s something. Don&amp;#39;t worry about this one. I&amp;#39;ll take it from here.”&lt;/p&gt;
&lt;p&gt;Hothead walked off without another word. The spell broke; the onlookers found places to be.&lt;/p&gt;
&lt;p&gt;With relief and dread, I approached the printer, fearing I&amp;#39;d be performing last rites. But as I checked it over inside and out, I found an incredible lack of melted parts. When I plugged it in and started it up, everything loaded just fine. Using the printer&amp;#39;s onboard interface, I performed every available test print. They all worked.&lt;/p&gt;
&lt;p&gt;Snatched from Death&amp;#39;s doorstep. “Hang in there,” I muttered, patting the machine&amp;#39;s plastic case. “I&amp;#39;m doing everything I can.”&lt;/p&gt;
&lt;p&gt;Like making sure Leila got an earful about this. Later.&lt;/p&gt;
&lt;p&gt;Before leaving the scene, I had a good look high and low. Ceiling tile and carpet were clean. No leaks, no spills. Even the heated indoor air lacked enough water molecules to give Hothead or anyone else the idea that “excess moisture” might&amp;#39;ve been the problem. Time to chase down the ticket-holder and see if the problem was already resolved.&lt;/p&gt;
&lt;p&gt;A couple of passersby pointed me toward a distant corner of HR, where I found a cube-desk buried under reports, folders, and other well-intentioned clutter. A man was sitting in an office chair facing the cube&amp;#39;s entrance, squeezing a rubber stress ball.&lt;/p&gt;
&lt;p&gt;“You Tony?” I entered the cube, offering my hand.&lt;/p&gt;
&lt;p&gt;He stood, shook, then immediately returned to the reassurance of his toy. “Sorry. My boss is, uh, tough like that.”&lt;/p&gt;
&lt;p&gt;“Hothead&amp;#39;s your boss? Jesus. He almost single-handedly iced that printer. Well, maybe &amp;#39;iced&amp;#39; ain&amp;#39;t the word for it.” I folded my arms. “You know who&amp;#39;s gonna hear about it? The new head of HR. When I close this ticket, I&amp;#39;ll drop her a line about what happened.”&lt;/p&gt;
&lt;p&gt;Tony&amp;#39;s eyes went wide. “Really? Thank you! I know I&amp;#39;m supposed to go up the chain, but …” He edged closer, lowering his voice. “Sometimes it&amp;#39;s the chain that&amp;#39;s the problem, y&amp;#39;know?”&lt;/p&gt;
&lt;p&gt;Something I&amp;#39;d run into only a million times. “I know. Can&amp;#39;t do much about it most of the time, but I can here, so I will.”&lt;/p&gt;
&lt;p&gt;Tony nodded. “Thanks again.”&lt;/p&gt;
&lt;p&gt;“Don&amp;#39;t mention it. Anyway, the printer. Your ticket said it was new? Looks pretty darn old to me.”&lt;/p&gt;
&lt;p&gt;“It&amp;#39;s new over here,” Tony explained. “They just it brought down and set it up for us.”&lt;/p&gt;
&lt;p&gt;“Can you try printing now?” I asked. “Let&amp;#39;s see what happens.”&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Later that morning, I stopped by the usual smoke-break spot between office buildings. As wind and snow coursed through the alley, I recapped the morning&amp;#39;s events for my friends Megan and Reynaldo. Then I pulled a stack of folded-up paper from my trench coat pocket, splitting it in half to hand them several pages apiece. At last, I dug through my pockets for my sorely-needed cigarettes and lighter. While I carefully shielded the lighter&amp;#39;s flame from the wind to light the cigarette clenched in my teeth, they studied the printouts with looks that quickly turned baffled.&lt;/p&gt;
&lt;p&gt;”I don&amp;#39;t feel safe working with Cheryl?” Reynaldo read aloud.&lt;/p&gt;
&lt;p&gt;”John keeps staring at me in the break room. I&amp;#39;ve told him twice.” Megan&amp;#39;s eyes found mine. “What the hell? Every print request does this?”&lt;/p&gt;
&lt;p&gt;“Every print job except for test prints,” I replied. “We&amp;#39;re lucky the poor thing starts up at all after Hothead gave it the salon treatment.”&lt;/p&gt;
&lt;p&gt;Megan smirked, handing back her pages before hugging herself against the cold. “Sounds to me like it might be a network issue.” She glanced Reynaldo&amp;#39;s way for confirmation.&lt;/p&gt;
&lt;p&gt;Our veteran network admin was too busy frowning at the stack of paper he rifled through to notice. “What have you tried?” he asked me.&lt;/p&gt;
&lt;p&gt;I helped myself to a long, warming drag. “The printer already spent some time turned off and unplugged.” Hothead had seen to that. “Since it&amp;#39;s old, figured I&amp;#39;d reinstall the drivers, clear the print queue. Didn&amp;#39;t help.” I shrugged. “Megan&amp;#39;s right. Since it doesn&amp;#39;t happen with test prints, it seems like something fishy&amp;#39;s happening when the print requests coming through the network.”&lt;/p&gt;
&lt;p&gt;Reynaldo frowned in thoughtful silence for a while, then glanced between us. “Do you remember that system for submitting HR complaints anonymously through the intranet?”&lt;/p&gt;
&lt;p&gt;Forcing my brain-pointer back into memory spaces I usually steered clear of, it came back to me a little, through a thick fog. “Few years back? Before your time,” I added for Megan&amp;#39;s benefit. “Never paid it much mind. Never really believed those gripes would actually be anonymous.”&lt;/p&gt;
&lt;p&gt;“Yeah, that&amp;#39;s crazy!” Megan said. “Who would trust that?”&lt;/p&gt;
&lt;p&gt;I hefted the printouts she&amp;#39;d returned to me, each page loaded with more beef than a Texas ranch. “That&amp;#39;s who.”&lt;/p&gt;
&lt;p&gt;“They retired that program ages ago,” Reynaldo said. “The server was decommissioned—at least, so I thought.” He dropped his cigarette butt to the slush-covered asphalt and crushed it underfoot, sighing heavily with a knowing look. “Let&amp;#39;s go trace some IPs.”&lt;/p&gt;
&lt;p&gt;“Swell!” I was about to grind my partially-smoked cigarette against the brick wall behind me to save it for later when I caught the hopeful look in Megan&amp;#39;s eye.&lt;/p&gt;
&lt;p&gt;“Can I help, too?” she asked.&lt;/p&gt;
&lt;p&gt;What fool would say no?&lt;/p&gt;
&lt;p&gt;“We may need a good developer at that,” I said. “C&amp;#39;mon!”&lt;/p&gt;

&lt;p&gt;&lt;b&gt;To be continued…&lt;/b&gt;&lt;/p&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>29</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/the-hot-fix</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Off the Path</title><link>https://thedailywtf.com/articles/off-the-path</link><category>CodeSOD</category><pubDate>Mon, 29 Jun 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/off-the-path</guid><description>&lt;p&gt;File path separators are a common pain point when writing cross platform software. Of course, not every programming language has a graceful API for handling that. For example, prior to C++ 17, you had to do some &lt;code&gt;#ifdef&lt;/code&gt; preprocessor magic to handle that. Which people usually did (or they&amp;#39;d use the Boost suite of libraries).&lt;/p&gt;
&lt;p&gt;Code like this wouldn&amp;#39;t be out of place or incorrect:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;if&lt;/span&gt; defined(WIN32) || defined(_WIN32) &lt;/span&gt;
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;define&lt;/span&gt; PATH_SEPARATOR &lt;span class="hljs-string"&gt;&amp;#34;\\&amp;#34;&lt;/span&gt; &lt;/span&gt;
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;else&lt;/span&gt; &lt;/span&gt;
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;define&lt;/span&gt; PATH_SEPARATOR &lt;span class="hljs-string"&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;/span&gt;
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;endif&lt;/span&gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do I like it? No. But now I&amp;#39;ve got a pre-processor constant that I can use to assemble my paths in a way that will work across different file path conventions.&lt;/p&gt;
&lt;p&gt;Of course, that&amp;#39;s the &amp;#34;normal&amp;#34; solution. You could, if you wanted, to it completely wrong. That&amp;#39;s what &lt;strong&gt;Xian&lt;/strong&gt;&amp;#39;s predecessor did.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-cpp"&gt;&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;ifdef&lt;/span&gt; UNIX&lt;/span&gt;
           filename += &lt;span class="hljs-string"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;;
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;else&lt;/span&gt;&lt;/span&gt;
           filename += &lt;span class="hljs-string"&gt;&amp;#34;\\&amp;#34;&lt;/span&gt;;
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;endif&lt;/span&gt;&lt;/span&gt;
           filename += (*exSeq)[i].path;
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;ifdef&lt;/span&gt; WIN32&lt;/span&gt;
           &lt;span class="hljs-built_in"&gt;ReplaceAll&lt;/span&gt;(filename, &lt;span class="hljs-string"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;, &lt;span class="hljs-string"&gt;&amp;#34;\\&amp;#34;&lt;/span&gt;);
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;else&lt;/span&gt;&lt;/span&gt;
           &lt;span class="hljs-built_in"&gt;ReplaceAll&lt;/span&gt;(filename, &lt;span class="hljs-string"&gt;&amp;#34;\\&amp;#34;&lt;/span&gt;, &lt;span class="hljs-string"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;);
&lt;span class="hljs-meta"&gt;#&lt;span class="hljs-keyword"&gt;endif&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If we&amp;#39;re compiling for unix, append a &amp;#34;/&amp;#34; to the filename. Otherwise, append a &amp;#34;\&amp;#34;. Then we append a path out of an array. Then, if we&amp;#39;re on Windows, find all the &amp;#34;/&amp;#34; in our filename and replace them with &amp;#34;\&amp;#34;. Otherwise, find all the &amp;#34;\&amp;#34; in our filename and replace them with &amp;#34;/&amp;#34;.&lt;/p&gt;
&lt;p&gt;Instead of defining a constant and using it everywhere you need to construct paths, this code was copy/pasted everywhere you needed to append a path separator onto your string. Well, almost everywhere. Clearly, we don&amp;#39;t know that the contents of &lt;code&gt;(*exSeq)[i].path&lt;/code&gt; are correct for our target operating system, hence we have to do the &lt;code&gt;ReplaceAll&lt;/code&gt; call to sanitize it. Why didn&amp;#39;t we sanitize the portion we&amp;#39;re appending instead of the whole &lt;code&gt;filename&lt;/code&gt; (which presumably is already sanitized?)? A better question: is this running inside of a loop? It looks like it is, based on the &lt;code&gt;[i]&lt;/code&gt; array access there.&lt;/p&gt;
&lt;p&gt;Multiple developers have copy/pasted this code into multiple places. Not one of them gave a shot at refactoring it. And somehow, there are still code paths that output the wrong path separator sometimes, though at least modern Windows is forgiving about that.&lt;/p&gt;
&lt;!-- Easy Reader Version: And nobody properly supports the Files-11 path syntax anyway. Though tagging files with versions was cool. https://en.wikipedia.org/wiki/Files-11 --&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>37</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/off-the-path</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Fi fa foe</title><link>https://thedailywtf.com/articles/fi-fa-foe</link><category>Error'd</category><pubDate>Fri, 26 Jun 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/fi-fa-foe</guid><description>&lt;p&gt;First up this week is a little story about a fifafail. I do wonder if this was a failure of the television station, or whether &lt;a href="https://bobdahacker.com/blog/fifa-hack"&gt;there was something more to it than that&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Hercules&lt;/strong&gt; wrote to alert us to these World Cup shenanigans, explaing 
&amp;#34;At least the flags were correct. And yes, this was
live TV. The host got the country names correctly, and
even called out that the written text was wrong&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#5503f1d7141948f88f4650c17468ff46"&gt;&lt;img itemprop="image" border="0" alt="5503f1d7141948f88f4650c17468ff46" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/06/25/5503f1d7141948f88f4650c17468ff46.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;m very open in my job search but I did
limit it to France. The search has been working well
for months, but this morning I got a bevy of
new interesting propositions. It seems France is much bigger than
it was yesterday.&amp;#34; Apparently
&lt;strong&gt;WorkerNumber29200&lt;/strong&gt;
is surprised by the expansionist nature of an imperialist coloniser. Plus ça change, Worker. 
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#f05fd09185bd4f2ebeacc92de9609131"&gt;&lt;img itemprop="image" border="0" alt="f05fd09185bd4f2ebeacc92de9609131" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/06/25/f05fd09185bd4f2ebeacc92de9609131.jpeg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;We have a couple of wtfs from Github.  First 
&lt;strong&gt;Hans K.&lt;/strong&gt;
&amp;#34;would love to find a, so I could fix
this GitHub Dependabot issue.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#4d41995a2e7a423cbf8de6e960b876c4"&gt;&lt;img itemprop="image" border="0" alt="4d41995a2e7a423cbf8de6e960b876c4" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/06/25/4d41995a2e7a423cbf8de6e960b876c4.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And
&lt;strong&gt;Peter S.&lt;/strong&gt; figures that 
&amp;#34;GitHub has trouble doing basic math -- or they have an
unpublished proof that 0=1&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#e954781458d64f6da02bfad014efc854"&gt;&lt;img itemprop="image" border="0" alt="e954781458d64f6da02bfad014efc854" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/06/25/e954781458d64f6da02bfad014efc854.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Finally 
&lt;strong&gt;Michele&lt;/strong&gt; has just encountered one of the most maddening phenomena on Amazon recently.
&amp;#34;Searching for a cheap USB-C fast charger. Got
a list of expensive CDs of obscure artists.&amp;#34;  All of them AI-generated, like the &lt;a href="https://lcamtuf.coredump.cx/blog/whys2.jpg"&gt;100000 Whys&lt;/a&gt; books?
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#cdf7c2baae7541a9ad8e90b9c4ecb0c4"&gt;&lt;img itemprop="image" border="0" alt="cdf7c2baae7541a9ad8e90b9c4ecb0c4" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/06/25/cdf7c2baae7541a9ad8e90b9c4ecb0c4.jpeg"/&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/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>15</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/fi-fa-foe</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>The Roadmap</title><link>https://thedailywtf.com/articles/the-roadmap</link><category>Feature Articles</category><pubDate>Thu, 25 Jun 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-roadmap</guid><description>&lt;p&gt;When &lt;strong&gt;Gary&lt;/strong&gt; was called in for a meeting with a few of his managers- because of course he had several- he thought it was going to be for an &amp;#34;attaboy&amp;#34;, because things had been going really well for the past few months.&lt;/p&gt;
&lt;p&gt;Gary had inherited a mess, and taken over a nightmare application. It was the kind of application that &lt;em&gt;should&lt;/em&gt; be a simple CRUD-style data-driven app, but somehow despite only having 20ish entities it managed, someone had generated 500+ controllers for managing them. Most of those controllers were copy/pasted code with minor changes in the &lt;code&gt;WHERE&lt;/code&gt; clause of a SQL query.&lt;/p&gt;
&lt;p&gt;And that was just the code. The infrastructure was similarly a mess, with duplicate resources provisioned in their cloud host. There was no CI/CD, no unit tests to speak of, no deployment process that wasn&amp;#39;t &amp;#34;manually copy these files and pray&amp;#34;. And uptime? You&amp;#39;ve heard about &amp;#34;five nines&amp;#34;, but this product was lucky to get even &lt;em&gt;one&lt;/em&gt; nine. Especially because the manual deployment process meant a few hours of downtime.&lt;/p&gt;
&lt;p&gt;And that was just the infrastructure. The backlog was similarly messy. There were lots of tasks- many thousands- but not a single one had a priority. Most of the tasks were something like, &amp;#34;Fix database timeouts&amp;#34;, or &amp;#34;Bug 531&amp;#34; with no description to explain what they were. At best, some of the &amp;#34;new feature&amp;#34; tasks linked to a Google Doc that explained a software roadmap that had been last updated in 2020.&lt;/p&gt;
&lt;p&gt;So with no guidance, Gary and the rest of his team got to work. Cloud costs were massive. Just cutting the duplicate resources would help, but with actual &lt;em&gt;planning&lt;/em&gt; it wasn&amp;#39;t hard to find even bigger wins. In total, Gary got the cloud costs down 60%- essentially saving the company a small multiple of his salary every year.&lt;/p&gt;
&lt;p&gt;With that out of the way, getting a CI/CD pipeline running was next. Within a few weeks, manual deployments were gone. Everything was automated. Downtime nearly vanished. And now, with all the cost savings in cloud resources, for a fraction of what they were paying, it was easy to automate provisioning test environments for each new feature.&lt;/p&gt;
&lt;p&gt;So Gary was very ready for some congratulations when he sat down with management. He was prepared to discuss all the wins he and the rest of the developers on the project had gotten over the past few months.&lt;/p&gt;
&lt;p&gt;&amp;#34;I&amp;#39;m sure you know why we&amp;#39;re sitting down,&amp;#34; Manager the First said when they settled into the conference room.&lt;/p&gt;
&lt;p&gt;&amp;#34;I&amp;#39;m sure,&amp;#34; said Manager the Second.&lt;/p&gt;
&lt;p&gt;&amp;#34;We have some concerns about your performance,&amp;#34; Manager the Third said.&lt;/p&gt;
&lt;p&gt;&amp;#34;My performance?&amp;#34; Gary asked.&lt;/p&gt;
&lt;p&gt;&amp;#34;Yes,&amp;#34; said Manager the First. &amp;#34;Let me pull up the backlog.&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;And the roadmap,&amp;#34; said Manager the Second.&lt;/p&gt;
&lt;p&gt;&amp;#34;Yes, I&amp;#39;m getting that up too, thank you.&amp;#34; The trio of managers struggled with pulling up the appropriate pages, and after about 15 minutes, gave up. Instead, they discussed their complaint without visual aids. &amp;#34;You haven&amp;#39;t completed any of the tasks on the roadmap. Bug 673 has been open since you started on the team. None of the roadmap milestones have been touched. There&amp;#39;s absolutely no progress.&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;Okay, but that document was wildly out of date,&amp;#34; Gary said. &amp;#34;Instead I put cycles into solving the actual problems we&amp;#39;re having. I&amp;#39;ve saved the company a huge amount of money. I&amp;#39;ve gotten our development cycle time down to a fraction of what it was. And we have basically no downtime!&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;That&amp;#39;s all very nice, I&amp;#39;m sure,&amp;#34; said Manager the Third. &amp;#34;But none of that was on our roadmap.&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;Well, maybe we should set up a meeting to go over the roadmap,&amp;#34; Gary said. &amp;#34;Because a lot of the tasks on there don&amp;#39;t make much sense right now-&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;I don&amp;#39;t think that&amp;#39;s a good use of time,&amp;#34; Manager the Second said. &amp;#34;Large meetings are expensive. Just stick to the roadmap, please.&amp;#34;&lt;/p&gt;
&lt;p&gt;With that, the meeting ended. Gary went back to work…&lt;/p&gt;
&lt;p&gt;… updating his resume.&lt;/p&gt;
&lt;!-- Easy Reader Version: Stick to the roadmap --&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>30</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/the-roadmap</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Authorized Logger</title><link>https://thedailywtf.com/articles/authorized-logger</link><category>CodeSOD</category><pubDate>Wed, 24 Jun 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/authorized-logger</guid><description>&lt;p&gt;&lt;strong&gt;Gretchen&lt;/strong&gt;&amp;#39;s company recently got purchased by Initech. Specifically, they were bought for their dev team, of all things. They had a few software products that were high performers, and Initech wanted that secret sauce. They bought the company, and then split the dev team up and migrated the developers to new products.&lt;/p&gt;
&lt;p&gt;That actually worked out okay for Gretchen, most of the time. For a few projects, the dev team was given some requirements and a free hand to figure out how to deliver them. They were free to reuse code that existed or rewrite entirely, based on their own judgement. They were free to pick the tools they wanted to use, and the results worked out well.&lt;/p&gt;
&lt;p&gt;But there were some projects that… were a different story. After those successes, Gretchen got moved onto a project that was 90% firefighting. The app had code like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;req.&lt;span class="hljs-property"&gt;body&lt;/span&gt;.&lt;span class="hljs-property"&gt;externalId&lt;/span&gt; = !!req.&lt;span class="hljs-property"&gt;body&lt;/span&gt;.&lt;span class="hljs-property"&gt;externalId&lt;/span&gt; ? req.&lt;span class="hljs-property"&gt;body&lt;/span&gt;.&lt;span class="hljs-property"&gt;externalId&lt;/span&gt; + &lt;span class="hljs-string"&gt;&amp;#34;&amp;#34;&lt;/span&gt; : &lt;span class="hljs-string"&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;How&amp;#39;s that for some null handling.&lt;/p&gt;
&lt;p&gt;The whole thing can&amp;#39;t run on a version of NodeJS newer than 14: a version that last got an update in 2023.&lt;/p&gt;
&lt;p&gt;&amp;#34;The code follows no conventions,&amp;#34; Gretchen writes, &amp;#34;there&amp;#39;s no logging.&amp;#34;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;&lt;span class="hljs-built_in"&gt;exports&lt;/span&gt;.&lt;span class="hljs-property"&gt;create&lt;/span&gt; = &lt;span class="hljs-function"&gt;(&lt;span class="hljs-params"&gt;req, res&lt;/span&gt;) =&amp;gt;&lt;/span&gt; {
  logger.&lt;span class="hljs-title function_"&gt;debug&lt;/span&gt;(&lt;span class="hljs-string"&gt;&amp;#39;creating new staffClient&amp;#39;&lt;/span&gt;);
  logger.&lt;span class="hljs-title function_"&gt;debug&lt;/span&gt;(req.&lt;span class="hljs-property"&gt;body&lt;/span&gt;)
  &lt;span class="hljs-comment"&gt;// let staffClient = new StaffClient({});&lt;/span&gt;

  &lt;span class="hljs-comment"&gt;// // run through and create all fields on the model&lt;/span&gt;
  &lt;span class="hljs-comment"&gt;// for(var k in req.body) {&lt;/span&gt;
  &lt;span class="hljs-comment"&gt;//   if(req.body.hasOwnProperty(k)) {&lt;/span&gt;
  &lt;span class="hljs-comment"&gt;//     staffClient[k] = req.body[k];&lt;/span&gt;
  &lt;span class="hljs-comment"&gt;//   }&lt;/span&gt;
  &lt;span class="hljs-comment"&gt;// }&lt;/span&gt;


  &lt;span class="hljs-title class_"&gt;StaffClient&lt;/span&gt;.&lt;span class="hljs-title function_"&gt;query&lt;/span&gt;().&lt;span class="hljs-title function_"&gt;insert&lt;/span&gt;(req.&lt;span class="hljs-property"&gt;body&lt;/span&gt;)
  .&lt;span class="hljs-title function_"&gt;returning&lt;/span&gt;(&lt;span class="hljs-string"&gt;&amp;#39;*&amp;#39;&lt;/span&gt;)
  .&lt;span class="hljs-title function_"&gt;then&lt;/span&gt;(&lt;span class="hljs-function"&gt;&lt;span class="hljs-params"&gt;staffClient&lt;/span&gt; =&amp;gt;&lt;/span&gt; {
    &lt;span class="hljs-keyword"&gt;if&lt;/span&gt;(staffClient) {
      res.&lt;span class="hljs-title function_"&gt;send&lt;/span&gt;({&lt;span class="hljs-attr"&gt;success&lt;/span&gt;: &lt;span class="hljs-literal"&gt;true&lt;/span&gt;, staffClient})
    } &lt;span class="hljs-keyword"&gt;else&lt;/span&gt; {
      res.&lt;span class="hljs-title function_"&gt;send&lt;/span&gt;({ &lt;span class="hljs-attr"&gt;success&lt;/span&gt;: &lt;span class="hljs-literal"&gt;false&lt;/span&gt;, &lt;span class="hljs-attr"&gt;message&lt;/span&gt;: &lt;span class="hljs-string"&gt;&amp;#34;Could not save StaffClient&amp;#34;&lt;/span&gt;})
    }
  });
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, you may say to yourself, &amp;#34;What do you mean there&amp;#39;s no logging? I see it right there!&amp;#34; There is a logger utility class, and do you know what it prints when you call &lt;code&gt;logger.debug(&amp;#34;some message&amp;#34;)&lt;/code&gt;? It prints &lt;code&gt;DEBUG&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This code handles an HTTP request, and stuffs the body of the request into the database; here&amp;#39;s hoping that it&amp;#39;s a well formed request. Somebody&amp;#39;s got a lot of faith in their front end. WHat&amp;#39;s interesting about this one is they&amp;#39;ve tried &lt;em&gt;two different ways&lt;/em&gt; of copying the request object into the database, the first one focusing on making sure they only copied non-inherited properties, and the second just YOLOing the data into the database.&lt;/p&gt;
&lt;p&gt;Now, this particular segment goes through their ORM to write data into the database. But not &lt;em&gt;all&lt;/em&gt; the code does that. Many places write data through direct SQL, and guess what happens there: SQL injection vulnerabilities.&lt;/p&gt;
&lt;p&gt;You may also notice that this function doesn&amp;#39;t do any authorization checks, which is fine, that should be configured in the middleware. &lt;em&gt;Should&lt;/em&gt; be- but isn&amp;#39;t. Most endpoints have no authorization checks at all. Even the endpoints that do, like their admin API, have copies of the same endpoint &lt;em&gt;with no authentication configured&lt;/em&gt;.&lt;/p&gt;
&lt;!-- Easy Reader Version: Don't worry, the authentication is also janky. --&gt;
&lt;style&gt;.comment { border: none; }&lt;/style&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>4</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/authorized-logger</wfw:comment></item></channel></rss>