<?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, 12 Aug 2026 03:25:05 GMT</lastBuildDate><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Public Private Partnership</title><link>https://thedailywtf.com/articles/public-private-partnership</link><category>CodeSOD</category><pubDate>Tue, 11 Aug 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/public-private-partnership</guid><description>&lt;p&gt;&lt;strong&gt;Eric O&lt;/strong&gt; was trawling through an API for handling concurrency, and found this little mismatch between the comment and the definition:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; &lt;span class="hljs-doctag"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; private Status, because while this object needs to be able to set the status, consumers should only be able to check it, lest everything break.&lt;/span&gt;
&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; &lt;span class="hljs-doctag"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; StatusType Status {
    &lt;span class="hljs-keyword"&gt;get&lt;/span&gt; {
        &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; _status;
    }
    &lt;span class="hljs-keyword"&gt;set&lt;/span&gt; {
        &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (&lt;span class="hljs-keyword"&gt;value&lt;/span&gt; != _status) {
            RaisePropertyChanged(&lt;span class="hljs-string"&gt;&amp;#34;Status&amp;#34;&lt;/span&gt;);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It&amp;#39;s very important we make this property private, lest clients abuse it, and unleash dragons, chaos, and other potential horrors. Given that this happens inside of a concurrency API, I can only imagine what could go wrong when you mess this up. So sure, the comment makes sense.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;definition&lt;/em&gt; on the other hand, doesn&amp;#39;t agree.&lt;/p&gt;
&lt;p&gt;In practice, it&amp;#39;s probably fine to do it this way, and at least the comment will show up in the documentation. If a consumer of the API misbehaves, they&amp;#39;ll at least see that the docs suggest this is private.&lt;/p&gt;
&lt;p&gt;The joke, of course, is the idea that the users of the API are going to read the docs, or care that one of the public methods suggests that it should be private.&lt;/p&gt;
&lt;!-- Easy Reader Version: Or, they'd be like me: they'd see the docs suggest it should be private, see that it's public, and decide "welp, it looks public to me," and then use it. If they wanted it private, they could have made it private. --&gt;
&lt;style&gt;.comment { border: none; }&lt;/style&gt;&lt;div&gt;
	[Advertisement] Picking up &lt;b&gt;NuGet&lt;/b&gt; is easy. Getting good at it takes time. &lt;a href="https://inedo.com/support/whitepapers/nuget-guide?utm_source=tdwtf&amp;amp;utm_medium=Footerad&amp;amp;utm_campaign=nuget"&gt;Download our guide to learn the best practice of NuGet for the Enterprise.&lt;/a&gt;

&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;</description><slash:comments>11</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/public-private-partnership</wfw:comment></item><item><dc:creator>Ellis Morning</dc:creator><title>The Crossroads</title><link>https://thedailywtf.com/articles/the-crossroads</link><category>Feature Articles</category><pubDate>Mon, 10 Aug 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-crossroads</guid><description>&lt;blockquote&gt;I moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.&lt;p&gt;&lt;/p&gt;
&lt;p&gt;-Leila&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;For a while I was stunned, staring at the email in front of me. &lt;a href="https://thedailywtf.com/articles/the-hard-goodbye"&gt;I’d just told my boss I was quitting&lt;/a&gt;, refusing a promotion into my recently-deceased mentor Aggie’s shoes. Now, the new head of Human Resources wanted to see me.&lt;/p&gt;
&lt;p&gt;Me? A Tech Support drone with one foot out the door? Well, she didn’t know that yet, did she?&lt;/p&gt;
&lt;p&gt;Something in me feared where this might lead. But, Leila had stuck her neck out to rescue me from CEO Gibbs. She seemed like she cared about making things better. I decided to hear her out. Figured I owed her that much before I blew outta there for good in two weeks.&lt;/p&gt;
&lt;p&gt;I had way too many hours to kill. Between whittling down my overstuffed inbox and resuming casework, it should’ve been easy to distract myself, but I couldn&amp;#39;t focus on a single thing. I’d just done what had once seemed impossible. My brain wasn’t letting go of that any time soon.&lt;/p&gt;
&lt;p&gt;Megan and Reynaldo also handed in their resignations. I got their messages confirming as much. We met up for lunch at a nearby restaurant and celebrated, but I was distracted. Amid the smiles and positive energy, the meeting with Leila was all I could think about. Should I mention it? I decided not to, not until I knew more.&lt;/p&gt;
&lt;p&gt;I dreaded the afternoon slog now more than ever, but somehow, it slogged. When the clock’s hands finally crawled to 3:30, I threw on my coat and hat and darted out for one last smoke break. Then, it was time for C-Town.&lt;/p&gt;
&lt;p&gt;Consumed with nervous energy, I shunned the elevator to race up the stairs floor by floor. Figured I’d burn off some stress, which could only help with whatever came next. Also figured I’d have a minute to recover in the vast executive lobby before finding my way to her office. Instead, I found Leila standing right there, every bit as polished as our surroundings. She faced me with surprise. “Hello.”&lt;/p&gt;
&lt;p&gt;I tried to speak, laugh, something. Instead, I doubled over, coughing and gasping for air that felt all too thin up in nosebleed territory. While recovering, I couldn’t help but notice the gleaming tile beneath my feet, contrasting against my work shoes encrusted with sidewalk salt. Such details seldom crossed my mind, but the sort of people who worked up there lived and died for such details. Face flush, I cleared my throat one more time and righted myself, looking her way. “’Scuse me.”&lt;/p&gt;
&lt;p&gt;“That was a long way up,” Leila remarked, gesturing behind herself. “I thought we could visit the observation deck. Would you like something to eat or drink first?”&lt;/p&gt;
&lt;p&gt;Truth be told, I was already dying for another smoke. “No, that’s all right.”&lt;/p&gt;
&lt;p&gt;“Follow me.”&lt;/p&gt;
&lt;p&gt;She led the way through massive, quiet corridors to a small room with glass walls and ceiling. At this height, all one could see outside was a thick lead wall of fog. Leila strayed up to the far wall, a jewel against the void, and glanced back over her shoulder with chagrin. “I’m sorry, the view’s not very good today.”&lt;/p&gt;
&lt;p&gt;“I dunno, I kinda like it.” Something about foggy weather had always intrigued me. With the normal world gone, it seemed like anything could happen.&lt;/p&gt;
&lt;p&gt;She beckoned me closer with one hand. I strayed up next to her right side, staring out at the shrouded view.&lt;/p&gt;
&lt;p&gt;“I understand you and Agatha Shaw were close,” Leila began quietly. “You have my deepest condolences.”&lt;/p&gt;
&lt;p&gt;A two-ton anvil crashed onto my nerves. My fists clenched up at my sides. I worked so hard to hold back the flash-flood of grief that I couldn’t string words together. I only trusted myself to nod.&lt;/p&gt;
&lt;p&gt;She glanced my way, hesitating. “Would it be better if we rescheduled?”&lt;/p&gt;
&lt;p&gt;“I’m here,” I forced out. “Whatever you have to say, say it.”&lt;/p&gt;
&lt;p&gt;She nodded. “First: while you were out of the office, I asked Francis Bronson to hand in his resignation.”&lt;/p&gt;
&lt;p&gt;I drew a blank on the name, and blinked her way in confusion.&lt;/p&gt;
&lt;p&gt;“The manager who nearly destroyed a printer with his hair dryer,” Leila explained, “after I’d just made a company-wide push for everyone to respect our office equipment.”&lt;/p&gt;
&lt;p&gt;“Oh. Hothead!” My nickname for the guy. I’d worked that case a few weeks ago, but it felt more like years. Hothead worked in HR—at least, he had. After disarming him, I’d sent Leila an email, appealing for help against someone who clearly shouldn’t have been managing a supply cabinet, much less human beings. Well, she’d delivered. A warm note of satisfaction offered me a welcome lift out of grief. “Thanks. Really.”&lt;/p&gt;
&lt;p&gt;Leila smiled. “We make a good team, I think. Which brings me to the other thing I wanted to discuss. Something new.”&lt;/p&gt;
&lt;p&gt;My gaze fastened onto hers with a mix of intrigue and dread.&lt;/p&gt;
&lt;p&gt;“You and I both know how badly this place needs to change. Let’s work together and actually fix things. I want to create a Change Management team and make you Team Lead.”&lt;/p&gt;
&lt;p&gt;I was speechless, caught completely off-guard.&lt;/p&gt;
&lt;p&gt;“The first thing we’d do is attack our company-wide leadership problem. Audits, surveys, hearings … eventually, a reorg. Along with simplifying the corporate structure, we’ll get rid of all the—Hothead, you called him? All the other Hotheads.”&lt;/p&gt;
&lt;p&gt;“The biggest hothead is sitting at the top of the whole rotten pyramid,” I blurted. “He ain’t budging. He ain’t signing off on this, either!”&lt;/p&gt;
&lt;p&gt;Leila was unfazed. “I think we could frame everything in a way that &lt;i&gt;makes&lt;/i&gt; Mr. Gibbs like it. After all, we’re reducing payroll. We’re better positioning ourselves in a tough economic time. Worst-case, we could always use the three magic words: &lt;i&gt;Google Did It.”&lt;/i&gt; She smirked.&lt;/p&gt;
&lt;p&gt;I couldn’t help smirking back. Then I remembered what I’d done just a few hours earlier. “But I’m outta here. I quit! Put in my notice this morning!”&lt;/p&gt;
&lt;p&gt;Leila nodded calmly. “Do you have a new position lined up somewhere else?”&lt;/p&gt;
&lt;p&gt;“No. I&amp;#39;m going freelance with friends.”&lt;/p&gt;
&lt;p&gt;“Friends who are leaving the company along with you?”&lt;/p&gt;
&lt;p&gt;I nodded.&lt;/p&gt;
&lt;p&gt;She paused for thought. “If you were to lead my Change Management team instead, you’d be able to recruit internally for your team. Whoever you think would be the most helpful. You’d set the agenda for whatever’s most important to address so that other good people don’t feel like they have to get away from here. All of this would mean a promotion to Director, with a salary and benefits to go with. And if you need more bereavement time, I could arrange an indefinite leave of absence until you feel ready to come back.”&lt;/p&gt;
&lt;p&gt;The breath died in my throat. Had I suffered a stroke? I must’ve had a stroke. No, she really said it. She was on the level. I could change things. I could hire my friends to help me do it. A raise, full bennies, working with &lt;i&gt;her&lt;/i&gt; every day?&lt;/p&gt;
&lt;p&gt;Only a fool would refuse. And yet, my gut ached at the idea.&lt;/p&gt;
&lt;p&gt;I stood there, frozen and mute, until I remembered something in my trench coat pocket: RD, the rubber duck I’d miraculously rescued from Aggie’s former office. I reached into my pocket and seized him in my fist.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;RD? Aggie?&lt;/i&gt; I thought. &lt;i&gt;Whoever’s listening. It all sounds amazing. I know she means it. But … it’s another trap, isn’t it? Staying in this joint for any reason means betraying myself. Betraying everything.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;“Listen,” I finally said, “I’m flattered you even offered, but it ain’t right for me. Don’t give up on your idea! I’ve got friends here with ideas of their own for changing things. 32-hour work weeks. The end of free overtime. A union. I’ll send ’em your way. Offer &lt;i&gt;them&lt;/i&gt; a spot on your team.”&lt;/p&gt;

&lt;p&gt;Leila sighed. “A union would be an especially tough sell to Mr. Gibbs, but that really is a case where Google Did It. We might scare him so much with that idea that everything else would seem harmless in comparison.” She faced me with a sad smile. “A shame that we’re losing you. I was starting to learn some interesting things about printers.”&lt;/p&gt;
&lt;p&gt;I’d miss her, too. And yet, I was feeling surprisingly great about my refusal.&lt;/p&gt;
&lt;p&gt;“Make sure you file for unemployment,” she said. “We won’t stand in your way.”&lt;/p&gt;
&lt;p&gt;I offered my hand. “Thanks for everything, Leila. Whenever it is they kick you outta here for good, come find me.”&lt;/p&gt;
&lt;p&gt;She shook, sad smile persisting. “Maybe I will.”&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;I told Megan and Reynaldo about the new Change Management team. Made sure they knew the offer was on the table in case they preferred that over jumping ship. Both were quick to say no. Like me, they were too excited about our plans to stop now.&lt;/p&gt;
&lt;p&gt;For the next couple of weeks, there was still plenty of work to be done: transferring my open tickets to other support reps and all that. But there was barely any time for it. Coworker after coworker stopped by my cube to express their surprise and wish me well in whatever came next.&lt;/p&gt;
&lt;p&gt;“You’ll never be problem-free,” one of them advised me. “Go looking for the problems you &lt;i&gt;want&lt;/i&gt; to have.”&lt;/p&gt;
&lt;p&gt;I felt happier, freer, more determined than I had in ages. It was the conviction of knowing I’d stuck to my guns to do the right thing for myself.&lt;/p&gt;
&lt;p&gt;Sanjay also jumped ship to join us. And there was one last surprise that came in the form of a phone call. The name on my work phone’s caller ID was DRACORA, P. So-called “Dracula!” Having a fairer opinion of her than most, I picked up without any sense of dread.&lt;/p&gt;
&lt;p&gt;So-called “Dracula!” She hadn’t been so bad at all. Surprised, I picked up in a hurry.&lt;/p&gt;
&lt;p&gt;“I’m so sad to hear you’re leaving!” she said. “What kind of freelance work are you doing?”&lt;/p&gt;
&lt;p&gt;“All sorts of IT projects,” I replied. “Maybe some consulting on the side.”&lt;/p&gt;
&lt;p&gt;“I have a friend who needs help setting up a website for her business. Is that something you could help her with?”&lt;/p&gt;
&lt;p&gt;My eyes flew wide open in shock. “Sure!”&lt;/p&gt;
&lt;p&gt;“I’ll put you in touch with one another.”&lt;/p&gt;
&lt;p&gt;“That’d be swell. Thanks!”&lt;/p&gt;
&lt;p&gt;We exchanged contact info. She promised to keep pointing friends our way whenever she could.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;On my last day, I sent my personal contact information to my coworkers. I reminded them of Leila’s offer and urged them to keep me posted on their different causes. Then my friends and I walked out of a building that no longer had a hold over any of us.&lt;/p&gt;
&lt;p&gt;It felt pretty damn swell.&lt;/p&gt;
&lt;p&gt;Our accountant helped us incorporate RD IT Solutions. Only close friends knew it stood for “rubber duck.” The company covered medical and other relevant expenses for everyone. There was no hierarchy. Everyone had equal financial stakes and an equal say in company decisions.&lt;/p&gt;
&lt;p&gt;After decades of being an expert at what I did, I was back at square one, learning the ropes. So much of what we had to learn for our business could only be learned through failure. Still, it felt rewarding to challenge my brain in new ways. The new gig let me wear lots of hats, from tech support to coding to business admin. &lt;/p&gt;
&lt;p&gt;With no more regular paychecks, we had to tighten down our finances to what was critically important. We worked remotely at whatever times worked best for us, with the occasional meet-up at a public place or someone’s home. We all knew that any one of us having some kind of trouble could count on the rest of the group to help out as best as they could.&lt;/p&gt;
&lt;p&gt;Megan quit smoking again. I cut way back myself. Wasn’t trying to, I just haven’t felt the need as much. Also stopped having those nightmares. It no longer feels like I’m living just for  time off and weekends. I don’t spend my Sunday nights dreading Monday.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Dracula really did introduce us to our first client. It’s crazy what the universe puts out there when you go looking for it.&lt;/p&gt;
&lt;p&gt;We met up remotely for our first client meeting to discuss requirements and expectations. When the topic of deliverables came up, our client scrunched her nose and interrupted Megan mid-sentence. “I don’t trust email! I’d rather you fax me the files.”&lt;/p&gt;
&lt;p&gt;We were building a website for her.&lt;/p&gt;
&lt;p&gt;“You mean, the source files?” Megan soldiered on bravely.&lt;/p&gt;
&lt;p&gt;“Just fax me the codes,” the client said. “My nephew can re-type them into the Internet.”&lt;/p&gt;
&lt;p&gt;She provided a fax number, fully expecting us to print out several hundred lines of code to send over. After deploying our first stab at a website that met her requirements, we did just that, mostly out of curiosity.&lt;/p&gt;
&lt;p&gt;A few days later, she called us in a huff, saying her website looked like random letters. Her nephew had typed the code into Facebook.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;FIN&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>6</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/the-crossroads</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: Time Wounds All Heels</title><link>https://thedailywtf.com/articles/time-wounds-all-heels</link><category>Error'd</category><pubDate>Fri, 07 Aug 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/time-wounds-all-heels</guid><description>&lt;p&gt;Looked to the past for some time-traveling entries to round out a themed post. They&amp;#39;re 25% fresh.&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Robert&lt;/strong&gt; apparently got a notification of a planned past delivery. It &lt;em&gt;could&lt;/em&gt; be just a case of two systems that don&amp;#39;t report different time zones, but even so, that&amp;#39;s a wtf.  Says he: 
&amp;#34;I just received an email from OnePlus this morning letting me know they have updated the planned delivery date for my order to Yesterday.  I guess the delivery driver is going to time travel to get there on time since it still hasn&amp;#39;t arrived.
&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#10c678e3b0bc4ec79761a9998cc687bb"&gt;&lt;img itemprop="image" border="0" alt="10c678e3b0bc4ec79761a9998cc687bb" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/10c678e3b0bc4ec79761a9998cc687bb.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Kinkster 
&lt;strong&gt;Ypsilon Omega&lt;/strong&gt; was really turned on by a time-traveling hottie who posted a photo an hour before joining.
&amp;#34;(Heavily redacted screenshot.) Either Fetlife (a kink community website) is
very welcoming to time travelers, or allows new members to
upload their profile picture. Because time handling code surely never
fails...&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#17a1e640495b493a9e34c463749ade73"&gt;&lt;img itemprop="image" border="0" alt="17a1e640495b493a9e34c463749ade73" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/17a1e640495b493a9e34c463749ade73.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;
&lt;strong&gt;ERIC P.&lt;/strong&gt; shared a photo from 2023.
&amp;#34;My 2008 Ford has suddenly time-warped 1024 weeks into the past. GPS date roll-over bug. No updated firmware available. No way to set the calendar manually. No way to turn off the date display.&amp;#34;

&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#a8a33a11c9624ab5af5e7272a838237e"&gt;&lt;img itemprop="image" border="0" alt="a8a33a11c9624ab5af5e7272a838237e" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/a8a33a11c9624ab5af5e7272a838237e.jpeg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;
&lt;strong&gt;Marc Würth&lt;/strong&gt;
&amp;#34;... just added a new RSS feed to my Netvibes
dashboard (great tool otherwise, by the way). While it was
still fetching the feed, it showed these peculiar crawling stats.
Once fully loaded, it showed sane info, though.&amp;#34;  I&amp;#39;m curious about the specificity of 261 years.
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#d2c88222c5554be2bcd6c051f19072ae"&gt;&lt;img itemprop="image" border="0" alt="d2c88222c5554be2bcd6c051f19072ae" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/d2c88222c5554be2bcd6c051f19072ae.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Quite recently, an 
&lt;strong&gt;anonymous&lt;/strong&gt; slightly flexed 
&amp;#34;Not only did I receive two parcels prior to the
Roman conquest of Britain, but the date calculation for the
combined notification has then failed and returned the Unix epoch.&amp;#34;  For those who missed
the flex, dig Wikipedia: &amp;#34;Wardian London is considered to be the most expensive residential
development in East London.&amp;#34; I guess they can afford professional time travelers.
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#fac2c471b782468c8c2e3a1afdb808f4"&gt;&lt;img itemprop="image" border="0" alt="fac2c471b782468c8c2e3a1afdb808f4" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/30/fac2c471b782468c8c2e3a1afdb808f4.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=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>14</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/time-wounds-all-heels</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>A More Civilized Age</title><link>https://thedailywtf.com/articles/a-more-civilized-age</link><category>Feature Articles</category><pubDate>Thu, 06 Aug 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/a-more-civilized-age</guid><description>&lt;p&gt;&lt;strong&gt;Greta&lt;/strong&gt; (&lt;a href="https://thedailywtf.com/articles/using-an-ade-ancient-development-environment"&gt;previously&lt;/a&gt;) sends us more updates from her &amp;#34;Ancient Development Environment&amp;#34;.&lt;/p&gt;
&lt;p&gt;An important task an IDE must do is report build errors to its users. Arguably, that&amp;#39;s one of the most important parts. I wouldn&amp;#39;t know, I insist on building from the CLI all the time, because IDEs confuse and frighten me. I recognize I&amp;#39;m the weird one here, who is more comfortable in GDB than in a GUI debugger, but this isn&amp;#39;t about me, it&amp;#39;s about the IDE Greta is using.&lt;/p&gt;
&lt;p&gt;It needs to display an error. Why does it need to display an error? Well, Greta hasn&amp;#39;t figured that out yet. The error I&amp;#39;m about to show you doesn&amp;#39;t really explain what happened or why or give any hint as to what needs to be done to fix it. To make matters more confusing, it doesn&amp;#39;t happen consistently, so simply re-running the build could potentially fix it.&lt;/p&gt;
&lt;p&gt;None of that is why we&amp;#39;re here, though. What makes this a WTF is &lt;em&gt;how the error is displayed&lt;/em&gt;:&lt;/p&gt;
&lt;img itemprop="image" src="https://errord.s3.us-east-1.amazonaws.com/builder.png" alt="An error box in a very Win3.1 style. It displays the error as a tree view, and the error is actually an XHTML document. But it&amp;#39;s not rendering as XHTML, it&amp;#39;s just raw HTML code, shown as a tree, like a really cruddy DOM inspector"/&gt;
&lt;p&gt;Greta shares her bullet points about what she hates about this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;#39;s a popup that happens arbitrarily during build, under unknown conditions&lt;/li&gt;
&lt;li&gt;It says nothing about what went wrong, or indeed if anything went wrong&lt;/li&gt;
&lt;li&gt;It&amp;#39;s in a non-user-legible XHTML format. It shows the markup of this XHTML rather than it being rendered.&lt;/li&gt;
&lt;li&gt;It arguably shows the XHTML markup in the worst way possible: in a tree view (?!) with one row per source line&lt;/li&gt;
&lt;li&gt;The markup isn&amp;#39;t even well-formed. I&amp;#39;ll let you count the reasons why.&lt;/li&gt;
&lt;li&gt;The control used is from some sort of legacy windowing toolkit that doesn&amp;#39;t support text anti-aliasing.&lt;/li&gt;
&lt;li&gt;The first button on the upper-left, &amp;#34;Get latest C++ Builder Direct headlines from the Internet&amp;#34;, does nothing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#39;d honestly forgotten about the era when the Internet was still kinda novel so every application had a &amp;#34;push a button and go to our web page, and this somehow definitely won&amp;#39;t just break when we change our URL structure in the future.&amp;#34;&lt;/p&gt;
&lt;p&gt;Greta adds:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For all of the hatred I harbour for this, the second button (&amp;#34;Information about C++ Builder Direct&amp;#34;) brings up the following powerful dose of 90s nostalgia, so I can&amp;#39;t stay mad:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;img src="https://errord.s3.us-east-1.amazonaws.com/aboutbuilder.png" alt="An about box, with a very 16-color gif globe, wrapped in a cable terminated with an RJ45 connector, along with some copy about how C++ Builder will reach out to the Internet and bring the latest news TO YOU. Aren&amp;#39;t you excited?"/&gt;
&lt;!-- Easy Reader Version: I just miss when buttons looked like buttons. It's not just nostalgia, I never had to wonder in the day "is that a thing I can click on, or just a picture?" Well, not until someone started doing the weird link map things you could do on images in Netscape. --&gt;
&lt;style&gt; ul
{
    list-style: initial;
    margin: initial;
    padding: 0 0 0 40px;
}

 li
{
    display: list-item;
}
&lt;/style&gt;&lt;div&gt;
	[Advertisement] Picking up &lt;b&gt;NuGet&lt;/b&gt; is easy. Getting good at it takes time. &lt;a href="https://inedo.com/support/whitepapers/nuget-guide?utm_source=tdwtf&amp;amp;utm_medium=Footerad&amp;amp;utm_campaign=nuget"&gt;Download our guide to learn the best practice of NuGet for the Enterprise.&lt;/a&gt;

&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;</description><slash:comments>23</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/a-more-civilized-age</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Connection State</title><link>https://thedailywtf.com/articles/connection-state</link><category>CodeSOD</category><pubDate>Wed, 05 Aug 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/connection-state</guid><description>&lt;p&gt;&lt;strong&gt;Frederick A&lt;/strong&gt; sends us a bit of null checking code, and offers us a better solution.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;span class="hljs-keyword"&gt;class&lt;/span&gt; &lt;span class="hljs-title"&gt;ConferenceService&lt;/span&gt;
{
	&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; &lt;span class="hljs-doctag"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; Checks if conference is active&lt;/span&gt;
	&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; &lt;span class="hljs-doctag"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-built_in"&gt;bool&lt;/span&gt; &lt;span class="hljs-title"&gt;IsCalling&lt;/span&gt;()&lt;/span&gt;
	{
		&lt;span class="hljs-keyword"&gt;try&lt;/span&gt;
		{
			&lt;span class="hljs-keyword"&gt;return&lt;/span&gt; m_ConnectionService.Core.State.IsWebRTCConnected;
		}
		&lt;span class="hljs-keyword"&gt;catch&lt;/span&gt;
		{
			&lt;span class="hljs-keyword"&gt;return&lt;/span&gt; &lt;span class="hljs-literal"&gt;false&lt;/span&gt;;
		}
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is for a web conferencing tool, which uses WebRTC to set up connections between clients in the chat. This function checks if the chat is active by checking a &lt;code&gt;IsWebRTCConnected&lt;/code&gt; flag. But as you can see in this code, that flag is on a long chain of objects, some of which may not exist when this function is called. Thus, we wrap the whole thing up in a &lt;code&gt;try/catch&lt;/code&gt;. If anything throws an exception, we know we can just return false. It&amp;#39;s probably fine.&lt;/p&gt;
&lt;p&gt;The obvious and easy fix, which Frederick proposes, is to use the C# coalescing operator: &lt;code&gt;?&lt;/code&gt;. &lt;code&gt;m_ConnectionService?.Core?.State?.IsWebRTCConnected ?? false&lt;/code&gt; would solve this problem just fine.&lt;/p&gt;
&lt;p&gt;That said, I wouldn&amp;#39;t say that&amp;#39;s a true fix. We&amp;#39;re talking about a state machine here, though admittedly with two states under discussion (connected/disconnected), though there are probably more not being checked here. This information should be managed via a state machine, not via boolean flags stuffed deep in an object chain. The fix isn&amp;#39;t a WTF, but it definitely hints at a better way to manage all of this. Now, my solution likely requires a lot more modification and code changes than what we have here, so I&amp;#39;m not suggesting anyone go off and rewrite this from scratch just to have a cleaner way of managing state. But folks definitely &lt;em&gt;should&lt;/em&gt; think more carefully about how they manage state.&lt;/p&gt;
&lt;!-- I'm working in robotics and sometimes it feels like half my peers have never heard of a state machine, and it boggles me. USE STATE MACHINES. --&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>11</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/connection-state</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Always Take the Option</title><link>https://thedailywtf.com/articles/always-take-the-option</link><category>CodeSOD</category><pubDate>Tue, 04 Aug 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/always-take-the-option</guid><description>&lt;p&gt;Frequent submitter &lt;strong&gt;Capybara James&lt;/strong&gt; sends us this simple snippet, which highlights that even when you have the lovely convenience of &lt;code&gt;Optional&lt;/code&gt; types, you can use them wrong.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-java"&gt;&lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (StringUtils.hasLength(dto.getAssetModelUUID())
		&lt;span class="hljs-comment"&gt;// Other conditions&lt;/span&gt;
		) {
	&lt;span class="hljs-keyword"&gt;return&lt;/span&gt; Optional.ofNullable(dto);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We access the &lt;code&gt;getAssetModelUUID&lt;/code&gt; member of &lt;code&gt;dto&lt;/code&gt;, and if it&amp;#39;s a non-empty string, we can then return a nullable of this thing that&amp;#39;s definitely not null in the first place.&lt;/p&gt;
&lt;p&gt;Okay, in the scheme of things, that&amp;#39;s not that bad. All we&amp;#39;re really doing is just not using the syntactic sugar that automatically boxes your &lt;code&gt;dto&lt;/code&gt; into a nullable type. On it&amp;#39;s own, it&amp;#39;s not bad, just ugly. But like all things, it doesn&amp;#39;t exist on its own. It exists inside of a giant pile of code where this pattern is used &lt;em&gt;all the time&lt;/em&gt;. Even functions which don&amp;#39;t return nullable types box (and unbox) the type. &lt;code&gt;Optional&lt;/code&gt; is scattered through the code like a magic ward against null reference exceptions.&lt;/p&gt;
&lt;p&gt;Does it help? No, not really, the code is buggy and error prone. Will it ever get fixed? Probably not in this lifetime.&lt;/p&gt;
&lt;!-- No easy reader, I'm typing this on a weird ass split-ortholinear keyboard, and trying to learn how to use it. There are fewer typos because I have to be really intentional about how I type. --&gt;&lt;div&gt;
	&lt;img src="https://thedailywtf.com/images/inedo/proget-icon.png" style="display:block; float: left; margin: 0 10px 10px 0;"/&gt; [Advertisement] 
	ProGet’s got you covered with security and access controls on your NuGet feeds. &lt;a href="https://inedo.com/proget/private-nuget-server?utm_source=tdwtf&amp;amp;utm_medium=footer&amp;amp;utm_content=GotYouCoveredFooter&amp;amp;utm_campaign=Cyclops2020"&gt;Learn more.&lt;/a&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;
</description><slash:comments>8</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/always-take-the-option</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Lose Some Padding</title><link>https://thedailywtf.com/articles/lose-some-padding</link><category>Feature Articles</category><pubDate>Mon, 03 Aug 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/lose-some-padding</guid><description>&lt;p&gt;Flat-file style databases were designed to fit the constraints of the systems they were running on. You specify your schema in terms of &amp;#34;how many characters in a file we use to store this data&amp;#34;, meaning something like this: &lt;code&gt;JOHN    SMITH    12343rd    StAnytown PA12345&lt;/code&gt; is read in my knowing that the first name field is 8 characters wide, the last name field is 8 characters wide, the street number is 4 digits, and so on.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s also a terrible schema, and woe to anyone with a long name. But many a mainframe had a similar schema.&lt;/p&gt;
&lt;p&gt;Now, let&amp;#39;s think about maintenance here. What happens when we also want to store a middle initial? We&amp;#39;ve created for ourselves a problem. Somehow, I have to insert a character into every row, which basically means making a new table with a new schema, copying every record out of it and updating it to use the new schema. I can&amp;#39;t just &lt;code&gt;ALTER TABLE&lt;/code&gt; like an RDBMS. And worse, every piece of software that touches the table &lt;em&gt;also&lt;/em&gt; needs to be updated. On a large legacy system, a simple task like &amp;#34;add a field to our database&amp;#34; could take weeks of developer time, and depending on the software, be a high risk operation.&lt;/p&gt;
&lt;p&gt;Which is why the smart developer, when working with flat files, includes padding. Maybe my schema for an address record looks more like this: &lt;code&gt;JOHN    SMITH    12343rd     StAnytown PA12345                &lt;/code&gt;. That&amp;#39;s 16 characters of padding at the end of the file. Now somebody says that I need to store a middle initial, I can just shrink the padding by one and add a middle initial field, like so: &lt;code&gt;JOHN    SMITH    12343rd     StAnytown PA12345Q               &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Is this elegant? No. But it works. I haven&amp;#39;t changed the length of the row at all, so I don&amp;#39;t need to move data around. Software modules only need to be updated if they care about what&amp;#39;s in the middle initial field; if they&amp;#39;re out of date, they just think there&amp;#39;s a &amp;#34;Q&amp;#34; in the padding, and don&amp;#39;t care.&lt;/p&gt;
&lt;p&gt;In real-world applications, instead of putting all the padding at the end, you&amp;#39;d usually put the padding in a few spots in the middle of the table. Any time you need a new column, you just steal a few characters from padding. Sure, &lt;em&gt;someday&lt;/em&gt; you&amp;#39;ll run out of padding, or at least out of padding blocks big enough for your new field, and then you&amp;#39;ll have to do the hard work of shuffling data around. But in practice, you can get very far without that happening.&lt;/p&gt;
&lt;p&gt;Which brings us to &lt;strong&gt;Brenda&lt;/strong&gt;&amp;#39;s adventure. Her team supports an IBM mainframe storing data in &lt;a href="https://en.wikipedia.org/wiki/Virtual_Storage_Access_Method"&gt;VSAM flat files&lt;/a&gt;. In other words, they&amp;#39;ve been doing the sort of thing I just talked about for many, many years.&lt;/p&gt;
&lt;p&gt;Of course, in the modern era, you can&amp;#39;t just leave your data sitting in an mainframe. Even if the mainframe is the source of truth, you want to be able to report on it and connect it with your other data systems. You need to, somehow, get the data into a modern RDBMS.&lt;/p&gt;
&lt;p&gt;So the company hired a bunch of developers to write an extract-transform-load process, which pulls the data out of the mainframe. The mainframe team handed them a &amp;#34;copybook&amp;#34; for the flat file, which described the structure, and the ETL devs went to work.&lt;/p&gt;
&lt;p&gt;And maybe those ETL devs didn&amp;#39;t understand the importance of padding. Maybe they just &lt;em&gt;missed&lt;/em&gt; the padding. Whatever it was, there were several places where the data was structured like &lt;code&gt;SOME_USEFUL_FIELD PADDING PADDING PADDING SOME_OTHER_FIELD&lt;/code&gt;, and they opted to split it like so: &lt;code&gt;SOME_USEFUL_FIELD PADDING PAD&lt;/code&gt;, &lt;code&gt;DING PADDING SOME_OTHER_FIELD&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When they released this process, it was fine. The padding characters got stripped before displaying, so the users never saw them. They were stored in the database, though, so when someone tried to reconstruct the data in a way that was compatible with the flat files, you could just concatenate the columns together and get a valid result.&lt;/p&gt;
&lt;p&gt;It was fine- until it wasn&amp;#39;t. The ETL devs, bless their hearts, only tested against the production mainframe. And why not, they were doing read only operations, what&amp;#39;s the harm? Had they tested against the development mainframe, they would have seen new features in flight, features which consumed some of that padding, and realized that they should have paid closer attention to the copybook.&lt;/p&gt;
&lt;p&gt;But instead, the test cases all passed. The software was, as far as the project managers and ETL developers could tell, working perfectly. So it was accepted, released to production, and running for a few weeks before the mainframe released its features. Those features then ruined all the beautiful reports with extraneous data.&lt;/p&gt;
&lt;p&gt;And since the ETL devs were on contract, any request to have them rework it under the original contract was met with a stern &amp;#34;Works as designed&amp;#34;. Instead of paying the contractors to come back and rework the system, the mainframe devs instead were tasked with finding &lt;em&gt;different&lt;/em&gt; padding fields they could use, padding fields which wouldn&amp;#39;t end up ruining any reports management liked to see.&lt;/p&gt;
&lt;!-- Easy Reader Version: I was a realatively baby programmer the first time I bumped into a mainframe and had the experience of "Just add a column, how hard could it be?" Hard. It's hard. --&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/lose-some-padding</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: I Believe In Lingonberries</title><link>https://thedailywtf.com/articles/i-believe-in-lingonberries</link><category>Error'd</category><pubDate>Fri, 31 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/i-believe-in-lingonberries</guid><description>&lt;p&gt;I&amp;#39;ve never been a huge fan of their furniture but I will happily demolish a plate of meatballs.&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Jan&lt;/strong&gt; agrees 
&amp;#34;My loyalty to this Swedish megastore is immeasurable.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#1aecb9456a1643de971951645d5f70fe"&gt;&lt;img itemprop="image" border="0" alt="1aecb9456a1643de971951645d5f70fe" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/29/1aecb9456a1643de971951645d5f70fe.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;&amp;#34;Choosing Concert Seats is Surprisingly Hard&amp;#34; for
&lt;strong&gt;jeffphi&lt;/strong&gt; who explains 
&amp;#34;While I have mixed feelings about indulging in nostalgia tours,
I was curious to see seating options for this Rick
Springfield concert. Turns out I *still* have questions!&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#2f0e93e3ff154b5692d6d25fcb3a699b"&gt;&lt;img itemprop="image" border="0" alt="2f0e93e3ff154b5692d6d25fcb3a699b" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/29/2f0e93e3ff154b5692d6d25fcb3a699b.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;&amp;#34;Would you like to undo this unspecified problem?&amp;#34;
&lt;strong&gt;richard H.&lt;/strong&gt; rants 
&amp;#34;This came out of nowhere while composing an email. (I
think I had just hit &amp;#39;enter&amp;#39; to move to the
next line.) Does anyone at Microsoft read these error dialogs
before they ship it? Anyone? Is anyone at Microsoft forced
to endure their own software?&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#6485ee06e6a047d59d5a014e5901d8ba"&gt;&lt;img itemprop="image" border="0" alt="6485ee06e6a047d59d5a014e5901d8ba" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/29/6485ee06e6a047d59d5a014e5901d8ba.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;An anonymous fan of extinct charismatic megafauna complains 
&amp;#34;This is %{insult}&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#e684ff08ade843449f464d69e3f0ef0d"&gt;&lt;img itemprop="image" border="0" alt="e684ff08ade843449f464d69e3f0ef0d" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/29/e684ff08ade843449f464d69e3f0ef0d.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Finally, and most seriously, merely pseudonymous 
&lt;strong&gt;WeaponizedFun&lt;/strong&gt; has just highlighted for us that a true secret is something only one person knows.
&amp;#34;Apparently, when OnSolve says &amp;#34;PROTECT YOUR USERNAME - NEVER give
your username to anyone,&amp;#34; this includes them not telling me
what it is.&amp;#34;  See, if they told you, it wouldn&amp;#39;t be a secret anymore.
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#46997513448d450189e4881a58d96af3"&gt;&lt;img itemprop="image" border="0" alt="46997513448d450189e4881a58d96af3" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/29/46997513448d450189e4881a58d96af3.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;div&gt;
	[Advertisement] &lt;b&gt;Plan Your .NET 9 Migration with Confidence&lt;/b&gt;&lt;br/&gt;Your journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. &lt;b&gt;&lt;a href="https://inedo.com/support/whitepapers/dotnet-guide?utm_campaign=dotnet&amp;amp;utm_source=tdwtf-footer"&gt;Download Free Guide Now!&lt;/a&gt;&lt;/b&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;</description><slash:comments>10</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/i-believe-in-lingonberries</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Negative Days</title><link>https://thedailywtf.com/articles/negative-days</link><category>CodeSOD</category><pubDate>Thu, 30 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/negative-days</guid><description>&lt;p&gt;&lt;strong&gt;Killian Brendel&lt;/strong&gt; was looking through the .NET source code, and found &lt;em&gt;this&lt;/em&gt; comment on the &lt;code&gt;TimeSpan&lt;/code&gt; struct.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;    &lt;span class="hljs-comment"&gt;// TimeSpan represents a duration of time.  A TimeSpan can be negative&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;// or positive.&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;//&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;// TimeSpan is internally represented as a number of milliseconds.  While&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;// this maps well into units of time such as hours and days, any&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;// periods longer than that aren&amp;#39;t representable in a nice fashion.&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;// For instance, a month can be between 28 and 31 days, while a year&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;// can contain 365 or 364 days.  A decade can have between 1 and 3 leapyears,&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;// depending on when you map the TimeSpan into the calendar.  This is why&lt;/span&gt;
    &lt;span class="hljs-comment"&gt;// we do not provide Years() or Months().&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Okay, a &lt;code&gt;TimeSpan&lt;/code&gt; represents a duration of time. Makes sense. It can be negative or positive. Sure. It&amp;#39;s a number of milliseconds. Okay, yeah. Other units of time get hard to represent that way, because months could have 28-31 days. Sure, yeah. I&amp;#39;m with you. And a year could contain 365 or 364 days, and a decade could have between 1 and 3 leapyears.&lt;/p&gt;
&lt;p&gt;Wait, go back one. How long can a year be? I know negative leap seconds are going to be an issue, but negative leap days are gonna be way worse.&lt;/p&gt;
&lt;p&gt;In the scheme of things, this isn&amp;#39;t much more than a fat-finger typo. It doesn&amp;#39;t impact the behavior of the class, which is why &lt;a href="https://github.com/microsoft/referencesource/blame/main/mscorlib/system/timespan.cs#L22"&gt;it&amp;#39;s been sitting there since the initial commit&lt;/a&gt;, twelve years ago. The &lt;code&gt;TimeSpan&lt;/code&gt; class itself hasn&amp;#39;t been touched in that time, which also isn&amp;#39;t much of a surprise, since it&amp;#39;s really just a wrapper around a number of milliseconds. More complex date arithmetic, like &lt;code&gt;AddMonths&lt;/code&gt; or &lt;code&gt;AddYears&lt;/code&gt; is handled in the various date-time related objects.&lt;/p&gt;
&lt;p&gt;So, is this a true WTF? Well, probably not. But it&amp;#39;s interesting. Actually, the whole class is kind of interesting, as you can spot deprecated default constructors, as well as compile-time hooks for handling support for older versions of .NET including Silverlight, a technology that hasn&amp;#39;t received an update since 2019, hasn&amp;#39;t been supported in major browsers since 2015, and officially left support in 2021.&lt;/p&gt;
&lt;!-- Easy Reader Version: Though Netflix kept using Silverlight for legacy browsers as late as 2023. Yikes. --&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] 
	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>32</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/negative-days</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Representative Line: Something Wonderful</title><link>https://thedailywtf.com/articles/something-wonderful</link><category>Representative Line</category><pubDate>Wed, 29 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/something-wonderful</guid><description>&lt;p&gt;Today, we look at a &amp;#34;representative comment&amp;#34; from &lt;strong&gt;Mark W&lt;/strong&gt;. This particular comment appears on a function:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; &lt;span class="hljs-doctag"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; Does something wonderful.&lt;/span&gt;
&lt;span class="hljs-comment"&gt;&lt;span class="hljs-doctag"&gt;///&lt;/span&gt; &lt;span class="hljs-doctag"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Well, I&amp;#39;m glad it&amp;#39;s wonderful, but are we talking &amp;#34;Christmas magic&amp;#34; wonderful? Or sarcastically droll &amp;#34;Oh, how &lt;em&gt;wonderful&lt;/em&gt; for you.&amp;#34; wonderful? Tone doesn&amp;#39;t get conveyed in text very well, so you&amp;#39;ve really got to be precise with your wording if you want us to get it.&lt;/p&gt;
&lt;p&gt;Mark writes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This comment is not really a &amp;#39;representative&amp;#39; line; it exists in an otherwise very well written 100k+ line codebase.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maybe it&amp;#39;s not representative of the codebase as a whole, but it clearly represents this section of the codebase &lt;em&gt;wonderfully&lt;/em&gt;.&lt;/p&gt;
&lt;!-- Easy Reader Version: Maybe it's just "I'm full of wonder as to why you'd write this comment?" --&gt;
&lt;style&gt;.comment { border: none; }&lt;/style&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>25</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/something-wonderful</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>CodeSOD: Convert Back, Way Back</title><link>https://thedailywtf.com/articles/convert-back-way-back</link><category>CodeSOD</category><pubDate>Tue, 28 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/convert-back-way-back</guid><description>&lt;p&gt;Windows Presentation Foundation, the XML-based UI framework for Windows, has its own &amp;#34;fun&amp;#34; quirks. One of its core ideas is that controls can be data-bound: that text box is linked to a numeric field in your model class. Type a different number, and the model automagically updates.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s fine for what it is, but of course you&amp;#39;re going to need to give it some instructions on how to do those kinds of conversions for your own custom types. And that&amp;#39;s where the &lt;code&gt;IValueConverter&lt;/code&gt; interface comes in.&lt;/p&gt;
&lt;p&gt;You can write a class which implements that interface, which can then &lt;code&gt;Convert&lt;/code&gt; and &lt;code&gt;ConvertBack&lt;/code&gt;. Which, as a note, I hate that naming convention; which way is &amp;#34;back&amp;#34;? Well, that&amp;#39;s controlled via an annotation. This is some of Microsoft&amp;#39;s sample code, from their docs:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;[&lt;span class="hljs-meta"&gt;ValueConversion(typeof(Color), typeof(SolidColorBrush))&lt;/span&gt;]
&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-keyword"&gt;class&lt;/span&gt; &lt;span class="hljs-title"&gt;ColorBrushConverter&lt;/span&gt; : &lt;span class="hljs-title"&gt;IValueConverter&lt;/span&gt;
{
    &lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-built_in"&gt;object&lt;/span&gt; &lt;span class="hljs-title"&gt;Convert&lt;/span&gt;(&lt;span class="hljs-params"&gt;&lt;span class="hljs-built_in"&gt;object&lt;/span&gt; &lt;span class="hljs-keyword"&gt;value&lt;/span&gt;, Type targetType, &lt;span class="hljs-built_in"&gt;object&lt;/span&gt; parameter, System.Globalization.CultureInfo culture&lt;/span&gt;)&lt;/span&gt;
    {
        Color color = (Color)&lt;span class="hljs-keyword"&gt;value&lt;/span&gt;;
        &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; &lt;span class="hljs-keyword"&gt;new&lt;/span&gt; SolidColorBrush(color);
    }

    &lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-built_in"&gt;object&lt;/span&gt; &lt;span class="hljs-title"&gt;ConvertBack&lt;/span&gt;(&lt;span class="hljs-params"&gt;&lt;span class="hljs-built_in"&gt;object&lt;/span&gt; &lt;span class="hljs-keyword"&gt;value&lt;/span&gt;, Type targetType, &lt;span class="hljs-built_in"&gt;object&lt;/span&gt; parameter, System.Globalization.CultureInfo culture&lt;/span&gt;)&lt;/span&gt;
    {
        &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; &lt;span class="hljs-literal"&gt;null&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I don&amp;#39;t particularly like this API, but again, it is what it is. This converts a color into a brush, and returns a null when we try and convert back, because that&amp;#39;s not a valid operation.&lt;/p&gt;
&lt;p&gt;Which brings us to &lt;strong&gt;Fredrika&lt;/strong&gt;&amp;#39;s submission. You see, there is a problem with this approach. If you bind a text box to a &lt;code&gt;double?&lt;/code&gt; field, everything is fine and handled automatically- except the built-in converter doesn&amp;#39;t turn empty strings into nulls. So one of her co-workers wrote this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;    &lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-keyword"&gt;class&lt;/span&gt; &lt;span class="hljs-title"&gt;StringToDoubleConverter&lt;/span&gt; : &lt;span class="hljs-title"&gt;IValueConverter&lt;/span&gt; 
    {
        &lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-built_in"&gt;object&lt;/span&gt; &lt;span class="hljs-title"&gt;Convert&lt;/span&gt;(&lt;span class="hljs-params"&gt;&lt;span class="hljs-built_in"&gt;object&lt;/span&gt; &lt;span class="hljs-keyword"&gt;value&lt;/span&gt;, Type targetType, &lt;span class="hljs-built_in"&gt;object&lt;/span&gt; parameter, CultureInfo culture&lt;/span&gt;)&lt;/span&gt;
        {
            &lt;span class="hljs-built_in"&gt;double&lt;/span&gt;? parsed = &lt;span class="hljs-keyword"&gt;value&lt;/span&gt; &lt;span class="hljs-keyword"&gt;as&lt;/span&gt; &lt;span class="hljs-built_in"&gt;double&lt;/span&gt;?;

            &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; parsed;
        }

        &lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword"&gt;public&lt;/span&gt; &lt;span class="hljs-built_in"&gt;object&lt;/span&gt; &lt;span class="hljs-title"&gt;ConvertBack&lt;/span&gt;(&lt;span class="hljs-params"&gt;&lt;span class="hljs-built_in"&gt;object&lt;/span&gt; &lt;span class="hljs-keyword"&gt;value&lt;/span&gt;, Type targetType, &lt;span class="hljs-built_in"&gt;object&lt;/span&gt; parameter, CultureInfo culture&lt;/span&gt;)&lt;/span&gt;
        {
            &lt;span class="hljs-built_in"&gt;string&lt;/span&gt; parsed = &lt;span class="hljs-keyword"&gt;value&lt;/span&gt; &lt;span class="hljs-keyword"&gt;as&lt;/span&gt; &lt;span class="hljs-built_in"&gt;string&lt;/span&gt;;

            &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (parsed == &lt;span class="hljs-built_in"&gt;string&lt;/span&gt;.Empty)
                &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; &lt;span class="hljs-literal"&gt;null&lt;/span&gt;;

            &lt;span class="hljs-keyword"&gt;return&lt;/span&gt; parsed;
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Convert&lt;/code&gt; doesn&amp;#39;t do anything. &lt;code&gt;ConvertBack&lt;/code&gt; takes the string from our text box, checks if it&amp;#39;s empty, and if it is, returns null.&lt;/p&gt;
&lt;p&gt;Now, you&amp;#39;ll notice something about the code here: when it &lt;code&gt;Convert&lt;/code&gt;s, it casts &lt;code&gt;value as double?&lt;/code&gt; and when it &lt;code&gt;ConvertBack&lt;/code&gt;s, it casts &lt;code&gt;value as string&lt;/code&gt;. So that&amp;#39;s where it&amp;#39;s reaching out to the .NET Framework&amp;#39;s built-in conversion functions.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m not entirely sure where to point to for the WTF, and some of that may be because I&amp;#39;ve had the good fortune to never have to use WPF. I don&amp;#39;t like WPF&amp;#39;s approach, but the developer behind this code isn&amp;#39;t helping matters. Certainly naming variables &lt;code&gt;parsed&lt;/code&gt; isn&amp;#39;t clarifying matters.&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t have a nice bow to put on this one. I just don&amp;#39;t like any of this. I don&amp;#39;t like the converter API. I don&amp;#39;t like this implementation of it. I don&amp;#39;t like trying to treat empty text boxes as null values, which I&amp;#39;m sure is correct &lt;em&gt;here&lt;/em&gt;, but boy howdy do I suspect there&amp;#39;ll be problems in the future.&lt;/p&gt;
&lt;!-- Easy Reader Version: There's nothing easy to read about this `Convert` and `ConvertBack` nonsense. Who names functions like that? Hate it. --&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>17</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/convert-back-way-back</wfw:comment></item><item><dc:creator>Ellis Morning</dc:creator><title>The Hard Goodbye</title><link>https://thedailywtf.com/articles/the-hard-goodbye</link><category>Feature Articles</category><pubDate>Mon, 27 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-hard-goodbye</guid><description>&lt;p&gt;One minute, you’re fine. The next, you’re doubled over with tears spilling down your face while an aching black hole in your heart threatens to drag you into oblivion.&lt;/p&gt;
&lt;p&gt;Grief’s funny like that.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://thedailywtf.com/articles/the-easy-no"&gt;Aggie Shaw, my old friend and mentor, had died of a sudden illness at home.&lt;/a&gt; She’d lived alone. Who found her? How? I didn’t know and never would. There was so much I’d never gotten a chance to tell her. She would’ve listened to me vent the frustrations and resentments I’d been burying over the years for sanity’s sake. She would’ve known what to do.&lt;/p&gt;
&lt;p&gt;God, I missed her.&lt;/p&gt;
&lt;p&gt;As if that weren’t bad enough, the brass expected Tech Support to go right back to business as usual. Maybe the rest of them wanted to bury their heads in casework. I didn’t. Between this, the horrible winter commute, and the promotion I’d never asked for, going back to the office felt impossible.&lt;/p&gt;
&lt;p&gt;My boss wouldn’t let me use sick time. He really should’ve; the grief had hit me like a goddamn truck. Good thing the start of the new year a while back had refreshed my stack of paid time off. I started burning it from both ends.&lt;/p&gt;
&lt;p&gt;When I wasn’t flat on my back or nursing a migraine, I was stumbling around my tiny apartment with half a brain cell, attending to the bare minimum of survival. &lt;i&gt;Eat this. Drink that. Where’d I leave my smokes?&lt;/i&gt; In the rare times I could think, my thoughts were plagued with darkness. I didn’t know if I’d ever make it out of that mess.&lt;/p&gt;
&lt;p&gt;Then, Megan called.&lt;/p&gt;
&lt;p&gt;It was nearing noon that day. I was lying in bed, peering out my window at a dull gray sky and falling snow. I’d let everything else dump to voicemail, but when she rang, I answered with the urgency of a drowning victim grabbing a buoy.&lt;/p&gt;
&lt;p&gt;“Hey,” she greeted, her voice subdued. “I heard about what happened. I’m really sorry.”&lt;/p&gt;
&lt;p&gt;There was so much tumbling through my head, but none of it wanted to tumble out. “Thanks,” I managed.&lt;/p&gt;
&lt;p&gt;“How are you?”&lt;/p&gt;
&lt;p&gt;“Lousy.”&lt;/p&gt;
&lt;p&gt;“Wanna meet up somewhere that isn’t work?” she asked. “The Apex Tower has a big indoor courtyard. I eat lunch there sometimes. If we go around 10 in the morning, we’d probably have it to ourselves.”&lt;/p&gt;
&lt;p&gt;Something in me leapt at the offer. “I’d like that. Tomorrow?” I would still be on vacation-in-name-only.&lt;/p&gt;
&lt;p&gt;“Sure,” Megan replied. “See you then!”&lt;/p&gt;
&lt;p&gt;I had something to look forward to. Part of my emotional burden lifted right then and there.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;It was a little easier to get out of bed the next morning. I took the bus to an unfamiliar spot of downtown, crossed a slush-covered plaza, and entered a skyscraper. The warm ground-floor courtyard boasted marble floors and immense windows for walls. Potted trees and flowers lined the perimeter. Huh, I’d forgotten those even existed.&lt;/p&gt;
&lt;p&gt;Megan was already seated at a metal table flanked by two chairs. When she spotted me, she jumped to her feet and waved, a knowing and sympathetic look on her face. She waited until I reached the chair across from her to say, “You look like you could use a hug.”&lt;/p&gt;
&lt;p&gt;I froze with surprise, one hand on my hat in the process of removing it. A hug? My puzzled brain tried to figure out just when I’d been hugged last. I had no idea. My body wasn’t waiting around for an answer. It was already turning toward her, arms raised.&lt;/p&gt;
&lt;p&gt;Megan silently walked into my embrace and hugged back firmly.&lt;/p&gt;
&lt;p&gt;Tears spilled down my face. My heart ached. And yet, another part of my invisible burden suddenly lifted. Something in me had been dying for this, for my pain to be seen.&lt;/p&gt;
&lt;p&gt;“Thanks,” I muttered.&lt;/p&gt;
&lt;p&gt;We parted. While I doffed my coat and hat, Megan returned to her chair, sitting back down across from me. “Whatever you need to get off your chest, go for it,” she offered.&lt;/p&gt;
&lt;p&gt;I sat myself down, sniffled, blotted my eyes on my sleeve, then glanced high and low to confirm something I already knew: we were alone in that big empty joint. Still, I hesitated. At first, I wasn’t even sure I remembered how to string words together to form a sentence. But then it started gushing out of me like a busted water main. “You ever hear of rubber-duck debugging?”&lt;/p&gt;
&lt;p&gt;Megan blinked. “No.”&lt;/p&gt;
&lt;p&gt;Surprising. Most developers had, but she was fresh out of college. “A programmer came up with it way-back-when,” I explained. “Whenever you’re coding something and get real stuck on a bug or error, you find yourself a rubber duck. Go line by line in your code and explain to the duck, out loud, what you want the code to do. Eventually, you and the duck will find the point where your intentions and reality don’t match up.”&lt;/p&gt;
&lt;p&gt;She smiled. “I like that.”&lt;/p&gt;
&lt;p&gt;“Aggie had a rubber duck in her cube she called RD,” I continued. “Whenever she was stuck with a support issue or even a personal problem, didn’t know where to go next, she’d tell RD about it. He’d help her figure out what to do or ask next.&lt;/p&gt;
&lt;p&gt;“When I first got hired, Aggie showed me the ropes. She always said, the best way to troubleshoot is to be the duck yourself. Get people, or hardware, or software to explain what they’re trying to do. You’ll figure out how to proceed.&lt;/p&gt;
&lt;p&gt;“Some people are so upset at the problem that they take it out on the nearest target: the support rep who comes to help. Aggie could charm even the angriest people into cooperating with her. She was the best. She was the best, and all she got for her trouble was more work. Now that she’s no longer of any use to them, they’ve swept her under the rug. They want &lt;i&gt;me&lt;/i&gt; to replace her!”&lt;/p&gt;
&lt;p&gt;Megan’s eyes went wide.&lt;/p&gt;
&lt;p&gt;“I’m no damn manager! I told my boss where to stick it. I’m riding out my PTO, and then hell if I know what’s next. I can’t go back there, I’d just be dying in place. And for what? So the bum at the top of the food chain can have a third yacht?” I leaned toward Megan, my gaze pleading with hers. “Look, I ain’t afraid of death. I’m afraid of dying before I’ve lived. I don’t want my only contribution to the world to be reimaging laptops and rescuing old printers. I can’t do it anymore. Can’t sit around complaining, either, I gotta &lt;i&gt;do&lt;/i&gt; something! I gotta get the hell outta that joint!”&lt;/p&gt;
&lt;p&gt;There it was: out in the open again, no longer whispered but shouted from the core of my being. Leaving was the right call for me. I felt it in my bones.&lt;/p&gt;
&lt;p&gt;Megan held eye contact, blinking a few times. “I remember you saying you wanted to leave. If you did, what would you do?”&lt;/p&gt;
&lt;p&gt;I’d never really let myself play with my little pipe dream. “I dunno exactly. But I’ve bought myself time to think it over. There are options, like going freelance.”&lt;/p&gt;
&lt;p&gt;She blinked again. “Freelance tech support?”&lt;/p&gt;
&lt;p&gt;“I majored in Computer Science back in school,” I said.&lt;/p&gt;
&lt;p&gt;Her eyes went wide again. “Really?”&lt;/p&gt;
&lt;p&gt;“Haven’t flexed those muscles in a while, but I could. Or I could get into something totally different. And you could come with.” Well aware of how unhappy she was at that joint, I sat up straighter in my chair. “We could start our own IT group. No bosses. Everyone an equal partner with an equal say in how things are run. And we could rope in anyone else who wants to come with!”&lt;/p&gt;
&lt;p&gt;Megan seemed intrigued at first, but then sobered. “What about bills? Rent? &lt;i&gt;Everything?”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;“We could pool our resources and look out for each other,” I said. “That’d give us some time to get our feet under us.”&lt;/p&gt;
&lt;p&gt;Her expression turned strained. “Aren’t you scared?”&lt;/p&gt;
&lt;p&gt;“You bet I’m scared!” I glanced down at the table. “When I first got outta school, the idea of spending the whole rest of my life at a full-time job &lt;i&gt;terrified&lt;/i&gt; me. But it seemed like everyone around me was fine with it. I thought &lt;i&gt;I&lt;/i&gt; was the problem. Bit my lip, put my head down … for 20 years.” I glanced back up at her pleadingly. “Has it gotten any better? No. I’ve just gotten used to it. Another 20 years, and I won’t be any good for anything else. That’s &lt;i&gt;if&lt;/i&gt; I make it that long! Aggie didn’t. Look, there’s no right or wrong answer, just what’s right &lt;i&gt;for you.&lt;/i&gt; Listen to your gut. If you don’t like where you’re at, I’m living proof that staying the course is the wrong move. Leaving &lt;i&gt;is&lt;/i&gt; risky … but so’s staying put, you know. The next round of layoffs could be right around the corner. You might get stuck babysitting that scheduling algorithm you were telling me about.”&lt;/p&gt;
&lt;p&gt;Megan listened intently to my rant. Finally, she nodded. “You’re right. I’m not happy where I am, and it won’t get any better. Time to try something different.”&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Still mired in grief, I had at least gained a new sense of purpose to keep me afloat in the storm. Megan went back to work like nothing had happened. With my remaining time off from work, I did some research into our options. Hunting around online turned up a highly-rated accountant who walked me through the bare-minimum corporate setup, the taxes and bookkeeping and all that. We both tracked down advice online from other freelancers who’d been where we were now. And we put out feelers among our coworkers. Our questions struck some nerves, but also stirred considerable interest. Reynaldo was in; we had ourselves a network guy. Sanjay, a backend developer, was a maybe who wanted more time to think it over.&lt;/p&gt;
&lt;p&gt;There were plenty who wanted to join us badly, but couldn’t swing it due to debt, insurance, things like that. I urged them to think about one thing they could improve at work, one cause they could get behind. Whatever it was, I told them to start making it happen, one step at a time.&lt;/p&gt;
&lt;p&gt;As my PTO bled away, I found myself half-exhilarated, half-scared outta my wits.&lt;/p&gt;
&lt;p&gt;Finally, it was time to go back. That first morning seemed like any other, but with my secret purpose in mind, I sat on the bus and walked the bone-chilling streets with a secret strength hardening my spine. When the old joint appeared ahead of me, more foe than friend, I felt relief knowing our remaining time together was short.&lt;/p&gt;
&lt;p&gt;Tech Support seemed no different; everyone was quietly minding their own business. I’d had plenty of time to think about what I’d do on the first day. My plan involved skipping my cube and heading straight to Aggie’s old office. After my talk with Megan, I’d decided to go looking for something. I had a snowball’s chance in hell of finding it, but something in me insisted on trying.&lt;/p&gt;
&lt;p&gt;As I walked up to the closed front door, the first thing I noticed was &lt;i&gt;my&lt;/i&gt; name, not hers, standing out in fresh, gleaming gold letters against the frosted glass. Pushing past revulsion, I grasped the doorknob and turned it.&lt;/p&gt;
&lt;p&gt;The door gave way to darkness. I flipped the light switch with my other hand and found an empty desk, gutted shelves, bare walls. Looked like someone had come through with a giant trash can and thrown out whatever wasn’t bolted down. My revulsion intensified, but hey, at least I wasn’t trespassing. I shut the door to “my” office behind me and slowly approached the desk.&lt;/p&gt;
&lt;p&gt;There was nothing to be found out in the open, not even a stray paperclip. I sat down hard in her old chair, reeling for a minute. Then I searched the desk drawers in front of me: first the bank on the left, then the right. Empty. I pulled out the drawer just under the desk—and there he was, swimming between a few stray pencils: a rubber duck about 3 inches tall. RD in the flesh.&lt;/p&gt;
&lt;p&gt;It was as if Aggie had put him there for me to find. I couldn’t believe it. My spirits soared in a way they hadn’t for ages.&lt;/p&gt;
&lt;p&gt;Just as I slipped the duck into my trench coat pocket, the door to her—&lt;i&gt;my&lt;/i&gt;—office swung open again, making me freeze. There stood Bill, my boss.&lt;/p&gt;
&lt;p&gt;“I saw the lights on in here.” A smug smile spread over his face. “I knew you’d be back. Bet it feels great, knowing you’re done babysitting all those morons and their computer equipment!”&lt;/p&gt;
&lt;p&gt;Was that it? Twenty-odd years of my life boiled down into one cynical statement? No, there was more to it than that. For every bizarre war story, there were tales of grateful people helped, challenging problems solved. It hadn&amp;#39;t been all bad. But it was over, just not the way Bill thought.&lt;/p&gt;
&lt;p&gt;An electric mix of nerves and resolve jolted me to my feet. “I told you to find someone else, and I meant it. This is my two-week notice.”&lt;/p&gt;
&lt;p&gt;I left Bill agape in that threshold and hurried back to my old cube, where my company-assigned laptop, docking station, and phone still resided. I hung up my coat, sank into my old chair, and booted up the machine. I had such a mountain of email in my inbox that I didn’t even want to look at it, but there was one message at the top that I absolutely couldn’t pry my eyes away from:&lt;/p&gt;
&lt;blockquote&gt;
&lt;i&gt;&lt;p&gt;I moved some things around on my calendar. 4:00 PM today is open. Please come to the executive floor.&lt;/p&gt;
&lt;p&gt;-Leila&lt;/p&gt;&lt;/i&gt;
&lt;/blockquote&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>12</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/the-hard-goodbye</wfw:comment></item><item><dc:creator>Lyle Seaman</dc:creator><title>Error'd: The Song that Never Ends?</title><link>https://thedailywtf.com/articles/the-song-that-never-ends</link><category>Error'd</category><pubDate>Fri, 24 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/the-song-that-never-ends</guid><description>&lt;p&gt;&amp;#34;Watch to the end&amp;#34;, the scammers demand. In today&amp;#39;s episode of &lt;em&gt;Error&amp;#39;d&lt;/em&gt;, the end is a long
time coming.
But at least it&amp;#39;s amusing. In the meantime, Amazon irked and/or terrified
thousands of their customers last week by mailing out ridiculously inflated
bills. It&amp;#39;s been covered extensively elsewhere but why should we miss all the fun? &lt;/p&gt;

&lt;p&gt;It was
&lt;strong&gt;Willy&lt;/strong&gt; who worried 
&amp;#34;Amazon prices seem to have crept up this month, finance
are going to have something to say&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#a7e89b1dc59e4c3ba3b8571a056825d6"&gt;&lt;img itemprop="image" border="0" alt="a7e89b1dc59e4c3ba3b8571a056825d6" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/a7e89b1dc59e4c3ba3b8571a056825d6.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;Dave A.&lt;/strong&gt; is on the horns of a dilemma. 
&amp;#34;Is it optional or required? Make up your mind, TAP!
I&amp;#39;m TAPping my fingers waiting for you to decide.&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#ffd147510c4b455c9c43e60763e68bf8"&gt;&lt;img itemprop="image" border="0" alt="ffd147510c4b455c9c43e60763e68bf8" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/ffd147510c4b455c9c43e60763e68bf8.jpeg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#34;This rating is through the roof!&amp;#34; exclaims a regular who wants to be 
&lt;strong&gt;Anonymous&lt;/strong&gt; today.
&amp;#34;We&amp;#39;re done with linear rating scales. Now you can have
5 stars on both X and Y axes. Also, given
this is for a company that cleans roofs, we can
make a joke this rating is out of the roof,
and out of the &amp;lt;div&amp;gt; as well. In case you&amp;#39;re
interested and in case you want take a screenshot yourself:
https://mijndakschoon.nl/&amp;#34; It&amp;#39;s real; I checked.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#11083f7140b449a48c5218843699cc24"&gt;&lt;img itemprop="image" border="0" alt="11083f7140b449a48c5218843699cc24" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/11083f7140b449a48c5218843699cc24.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;Richard H.&lt;/strong&gt; found a flubstituted email.
&amp;#34;Quickbooks here reminding me that I failed to pay invoice
number &amp;#34;{{rand_invoice}&amp;#34; Or this might be a scam/phishing email. Hard
to tell.&amp;#34; I&amp;#39;ll bet {{money}} on scam.
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#710be181fec049ab8f717ae185783f5f"&gt;&lt;img itemprop="image" border="0" alt="710be181fec049ab8f717ae185783f5f" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/710be181fec049ab8f717ae185783f5f.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;strong&gt;B.J. H.&lt;/strong&gt; is usually quite concise. Usually.
&amp;#34;If this is ALL NORMAL I&amp;#39;m worried what will happen
in an emergency&amp;#34;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="#7885ce2a1ae64033b9b46e472925edd9"&gt;&lt;img itemprop="image" border="0" alt="7885ce2a1ae64033b9b46e472925edd9" src="https://d3hvi6t161kfmf.cloudfront.net/images/2026/07/23/7885ce2a1ae64033b9b46e472925edd9.jpeg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;div&gt;
	[Advertisement] &lt;b&gt;Plan Your .NET 9 Migration with Confidence&lt;/b&gt;&lt;br/&gt;Your journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. &lt;b&gt;&lt;a href="https://inedo.com/support/whitepapers/dotnet-guide?utm_campaign=dotnet&amp;amp;utm_source=tdwtf-footer"&gt;Download Free Guide Now!&lt;/a&gt;&lt;/b&gt;
&lt;/div&gt;
&lt;div style="clear: left;"&gt; &lt;/div&gt;</description><slash:comments>22</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/the-song-that-never-ends</wfw:comment></item><item><dc:creator>Remy Porter</dc:creator><title>Classic WTF: My Many Girlfriends</title><link>https://thedailywtf.com/articles/classic-wtf-my-many-girlfriends</link><category>Feature Articles</category><pubDate>Thu, 23 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/classic-wtf-my-many-girlfriends</guid><description>&lt;blockquote&gt;Honestly, with the wildfire smoke and the oppressive heat, maybe it&amp;#39;s time to find a nice quiet cave to hang out in. Something with no natural light and no natural ventilation. I wonder if anybody has a place like that… &lt;a href="https://thedailywtf.com/articles/my-many-girlfriends"&gt;Original&lt;/a&gt;. --&lt;strong&gt;Remy&lt;/strong&gt;&lt;/blockquote&gt;

&lt;p&gt;In the long ago, wild-west days of the late 90s, there was an expectation that managers would put up with a certain degree of eccentricity from their software developers. The IT and software boom was still &lt;em&gt;new&lt;/em&gt;, people didn&amp;#39;t quite know what worked and what didn&amp;#39;t, the &amp;#34;nerds had conquered the Earth&amp;#34; and managers just had to roll with this reality. So when &lt;strong&gt;Barry D&lt;/strong&gt; gave the okay to hire Sten, who came with glowing recommendations from his previous employers, Barry and his team were ready to deal with eccentricities.&lt;/p&gt;
&lt;p&gt;Of course, on the first day, building services came to Barry with some concerns about Sten&amp;#39;s requests for his workspace. No natural light. No ventilation ducts that couldn&amp;#39;t be closed. And then the co-workers who had interacted with Sten expressed their concerns.&lt;/p&gt;
&lt;p&gt;During the hiring process, Sten had come off as a bit odd, but this seemed unusual. So Barry descended the stairs into the basement, to find Sten&amp;#39;s office, hidden between a janitorial closet and the breaker box for the building. Barry knocked on the door.&lt;/p&gt;
&lt;p&gt;&amp;#34;Sten awaits you. Enter.&amp;#34;&lt;/p&gt;
&lt;p&gt;Barry entered, and found Sten precariously perched on an office chair, removing several of the fluorescent bulbs from the ceiling fixture. The already dark space was downright cave-like with Sten&amp;#39;s twilight lighting arrangement. &amp;#34;He welcomes you,&amp;#34; Sten said.&lt;/p&gt;
&lt;p&gt;&amp;#34;Uh, yeah, hi. I&amp;#39;m Barry, I&amp;#39;m working on the Netware 3.x portion of the product, and Carl just wanted me to check in. Everything okay?&lt;/p&gt;
&lt;p&gt;&amp;#34;This is acceptable to Sten,&amp;#34; Sten said, gesturing at the dim office as he descended from the chair. Sten&amp;#39;s watched beeped on the hour, and Sten carefully placed the fluorescent bulb off to the side, in a stack of similarly removed bulbs, and then went to his desk. In rapid succession, he popped open a few pill containers- 5000mg of vitamin C, a handful of herbal and homeopathic pills- and gulped them down. He then washed the pills down with a tea that smelled like a mixture of kombucha and a dead raccoon buried in a dumpster.&lt;/p&gt;
&lt;p&gt;&amp;#34;He is pleased to meet you,&amp;#34; Sten said, with a friendly nod. Barry blinked, trying to track the conversation. &amp;#34;And he is pleased with it, and has made great progress on building it. You will like his things, yes?&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;Uh… yes?&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;He is pleased, and I hope you can go to him and tell him that he is pleased with this, and set his mind at ease about Sten.&amp;#34;&lt;/p&gt;
&lt;p&gt;So it went with Sten. He strictly referred to himself in the third person. He frequently spoke in sentences with nothing but pronouns, and frequently reused the same pronoun to refer to different people. The vagueness was confounding, but Sten&amp;#39;s skill was in Netware 2.x- a rare and difficult set of skills to find. So long as the code was clear, everything would be fine.&lt;/p&gt;
&lt;p&gt;Everything was not fine. While Sten&amp;#39;s code didn&amp;#39;t have the empty vagueness of unclear pronouns, it also didn&amp;#39;t have the clarity of meaningful variable names. Every variable and every method name was given a female first name. &amp;#34;Each of these is named for one of Sten&amp;#39;s girlfriends.&amp;#34; Given the number of names required, it was improbable that these were &lt;em&gt;real&lt;/em&gt; girlfriends, but Sten gave no hint about this being fiction.&lt;/p&gt;
&lt;p&gt;There was some consistency about the names. Instead of &lt;code&gt;i&lt;/code&gt;, &lt;code&gt;j&lt;/code&gt;, and &lt;code&gt;k&lt;/code&gt; loop variables, you had &lt;code&gt;Ingrid&lt;/code&gt;, &lt;code&gt;Jane&lt;/code&gt;, and &lt;code&gt;Katy&lt;/code&gt;. &lt;code&gt;Zaria&lt;/code&gt; seemed to be only used as a parameter to methods. &lt;code&gt;Karla&lt;/code&gt; seemed to be a temporary variable to hold intermediate results. None of these conventions were documented, obviously, and getting Sten to explain them was an exercise in confusion.&lt;/p&gt;
&lt;p&gt;It led to some entertaining code reviews. &amp;#34;Michelle here talks to Nancy about Francine, and then Ingrid goes through Francine&amp;#39;s purse to find Stacy.&amp;#34; This described a method (Michelle) which called another method (Nancy), passing an array (Francine). Nancy iterates across the array (using Ingrid), to find a specific entry in the array (Stacy).&lt;/p&gt;
&lt;p&gt;Sten lasted a few weeks at the job. It wasn&amp;#39;t a very successful period of time for anyone. Peculiarities aside, the final straw wasn&amp;#39;t the odd personal habits or the strange coding conventions- Sten just couldn&amp;#39;t produce working code quickly enough to keep up with the rest of the team. Sten had to be let go.&lt;/p&gt;
&lt;p&gt;A few weeks later, Barry got a call from a hiring manager at Initrode. Sten had applied, and they were checking the reference. &amp;#34;Yes, Sten worked here,&amp;#34; Barry confirmed. After a moment&amp;#39;s thought, he added, &amp;#34;I suggest that you bring him in for a second interview, and have him walk you through some code that he&amp;#39;s written.&amp;#34;&lt;/p&gt;
&lt;p&gt;A few weeks after that, Barry got a gift basket from the manager at Initrode.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Thanks for the tip&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sten did &lt;em&gt;not&lt;/em&gt; get hired at Initrode.&lt;/p&gt;
&lt;!-- Easy Reader Version: This sounds like somebody's Vampire the Masquerade LARP getting out of hand --&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>14</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/classic-wtf-my-many-girlfriends</wfw:comment></item><item><dc:creator>Alex Papadimoulis</dc:creator><title>Classic WTF: Server Room Fans and More Fun</title><link>https://thedailywtf.com/articles/classic-wtf-server-room-fans-and-more-fun</link><category>Feature Articles</category><pubDate>Wed, 22 Jul 2026 06:30:00 GMT</pubDate><guid>https://thedailywtf.com/articles/classic-wtf-server-room-fans-and-more-fun</guid><description>&lt;blockquote&gt;It&amp;#39;s been pretty hot lately. Probably should use a fan to cool off. Mind the trip hazards. &lt;a href="https://thedailywtf.com/articles/Server-Room-Fans-and-More-Server-Room-Fun"&gt;Original&lt;/a&gt;. --&lt;strong&gt;Remy&lt;/strong&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#34;It&amp;#39;s that time of year again,&amp;#34; &lt;b&gt;Robert Rossegger&lt;/b&gt; wrote, &amp;#34;you know, when the underpowered air conditioner just can&amp;#39;t cope with the non-winter weather? Fortunately, we have a solution for that... and all we need to do is just keep an extra eye on people walking near the (completely ajar) server room door.&amp;#34;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img itemprop="image" alt="" src="https://thedailywtf.com/images/12/q3/svr/IMG_20110709_231027.jpg"/&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&amp;#34;For as long as anyone can remember,&amp;#34; &lt;b&gt;Mike E&lt;/b&gt; wrote, &amp;#34;the fax machine in one particular office was a bit spotty whenever it was wet out. After having the telco test the lines from the DMARC to the office, I replaced the hardware, looked for water leaks all along the run, and found precisely nothing. The telco disavowed all responsibility, so the best solution I could offer was to tell the users affected by this to look out the window and, if raining, go to another fax machine.&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;One day, we had the telco out adding a T1 and they had the cap off of the vault where our cables come in to the building. Being curious by nature, I wandered over when nobody was around and wound up taking this picture. After emailing same to the district manager of the telco, suddenly we had the truck out for an extra day (accompanied by one very sullen technician) and the fax machine worked perfectly from then on.&amp;#34;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="https://thedailywtf.com/images/12/q3/svr/malvault.jpg"/&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&amp;#34;I found this when I came back in to work after some time off,&amp;#34; writes &lt;b&gt;Sam Nicholson&lt;/b&gt;, &amp;#34;that drive is actually earmarked for &amp;#39;off-site backup&amp;#39;. Also, this is what passes for a server rack at this particular software company. Yes, it&amp;#39;s made of wood.&amp;#34;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="https://thedailywtf.com/images/12/q3/svr/Backupdrive.jpg"/&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&amp;#34;Some people use &amp;#39;proper electrical wiring&amp;#39;,&amp;#34; writes &lt;b&gt;Mike&lt;/b&gt;, &amp;#34;others use &amp;#39;extension cords&amp;#39;. We, on the other hand, apparently do this.&amp;#34;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="https://thedailywtf.com/images/12/q3/svr/fans.jpg"/&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&amp;#34;I was staying at a hotel in Manhattan and somehow took a wrong turn and wound up in the stairwell,&amp;#34; wrote &lt;b&gt;Dan&lt;/b&gt;, &amp;#34;not only is all their equipment in a public place (without even a door), it&amp;#39;s mostly hanging from cables in several places.&amp;#34;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="https://thedailywtf.com/images/12/q3/svr/IMG00070-20110622-0836.jpg"/&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&amp;#34;I spotted this in China,&amp;#34; writes &lt;b&gt;Matt&lt;/b&gt;, &amp;#34;This poor switch was bolted to a column in the middle of some metal shop about 4m above ground. There were many more curious things, but I decided to keep a low profile and stop taking pictures.&amp;#34;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="https://thedailywtf.com/images/12/q3/svr/IMG_2435.jpg"/&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&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>13</slash:comments><wfw:comment>https://thedailywtf.com/articles/comments/classic-wtf-server-room-fans-and-more-fun</wfw:comment></item></channel></rss>