Recent Articles

May 2014

Bonecrusher Loves His Cat Food

by in Error'd on

Today's Error'd is special! It's our first published article to use our new Discourse-based commenting system! We won't have this for every article for now, but we'd love to see what you all think...especially if you don't normally visit the comments page. Now, on with the article...


"Found this on Amazon UK while searching for Transformers toys," Adam wrote, "'BONECRUSHER hates everything'...except cat food."


Finding Meaning

by in CodeSOD on

Ray was not just a recent addition to the development team. She was also a recent grad just getting started in her career. As a result, she was eager to glean as much knowledge as she could from any source she could find. She poured over all of the documentation provided to her by her team lead. She read the wiki (because that's the storehouse of communal knowledge for every team), reviewed the code and examined the diagrams of the data models used within the application.

All was going swimmingly...until she came across the following.


Case-Closed Captioned

by in Tales from the Interview on

Computers do... funny things to people. With alarming frequency, capable, adult professionals of all stripes just can't seem to overcome the most basic obstacles involved in the everyday practice of computing. When your grandmother struggles to understand that sending email doesn't require postage stamps, it's kind of endearing; when it's your co-workers, who grew up with computers just like you did and use them every day to do every aspect of their jobs, it's... less so. That so many people still fail so frequently leads one to wonder: can everyone really be this feckless, or are we, the creators of the software they struggle to master, just incapable of creating something usable?

Sometimes, the answer is emphatically the former.


Last but not Least

by in CodeSOD on

Casa de Quixote is a small, state-run retirement community in La Mancha, in central Spain. Sergio is the sole developer of software managing hundreds of residents. Missing documentation, he tracks down his predecessors for help.

"Just one left."


Classic WTF: Aggressive Management

by in Feature Articles on

It's a holiday here in the US (Memorial Day), so enjoy this Classic WTF, originally published on Nov 1st, 2011.


Not for the first time, Chuck was happy he didn't have any lawn ornaments. First, they were just plain tacky. But more important, is that the screaming lunatic with foam flying from his lips while beating on your door and screaming like his face was on fire might throw them through a window. In a way, the screaming lunatic was all the lawn ornamentation Chuck needed.


It's not a bug, it's a feature

by in Error'd on

"Microsoft is taking the old saying 'That's not a bug, that's a feature' to a new level in this update to Windows Server 2008 R2," D. writes.


Best of Email: Brains, Security, Robots, and a Risky Click

by in Feature Articles on

Before you delete that awful email, think about sending it our way. The Daily WTF inbox loves your terrible emails. Mail in your mail!


When Physicists and Programmers Collide (From Tim)


The In-House Developer

by in CodeSOD on

Casa de Quixote is a small, state-run retirement community in La Mancha, in central Spain. Sergio is the sole developer of software managing hundreds of residents. Missing documentation, he tracks down his predecessors for help.

Miguel, manager of Casa de Quixote, told Sergio he'd find Luis at a dive in Toledo. "Just follow the empty glasses of beer," he said. Sergio did, and they led to a man: about two hundred pounds overweight, asleep at the bar, wearing a Real Madrid shirt.


Quality De-Surance

by in Feature Articles on

Adam was staring at a locked, unmarked door. It was supposed to be his first day on his new consulting job, and his new boss was supposed to meet him in the lobby at 10:30. According to Adam’s phone, it was 11:15. Adam started thinking back to the questionable interview, and was wondering if this job actually existed when Doug, his new boss, burst through the door to greet him.

“Hey, Adam!” Doug clapped him on the shoulder and steered him past the door. “Sorry I’m late, I was stuck in a meeting. But hey! We were just talking about you! This hockey project is way behind, so we need you to lace up your skates and make things right!”

Adam’s main reason for taking this job was that it would allow him to have a hand in creating the official mobile app for his beloved Metro City WTFers hockey team. He couldn’t wait to brag to all his hockey-nut buddies about creating the app they used to keep up with all things WTFers.


Accepted Values for Days of the Month

by in CodeSOD on

Ryan recently received some thorough documentation from a client regarding a third-party API he had been tasked with integrating.

He found it quite helpful that the documentation included an Excel spreadsheet that listed the accepted values for each input field. Particularly helpful was the page on acceptable values for the "dob_dd" (Date of birth -day) field, which lists the "title" of each day and its corresponding "value".


The Security Error'd

by in Error'd on

It’s important to put some barriers in before users can reset their passwords. You don’t want just anyone accessing their account, after all. Bruce had to answer his security question:


Fear the Puppetmaster

by in Feature Articles on

Russell had been a systems engineer for many years, but he'd only earned a nickname once while working for a comparison shopping site in West L.A.

The DevOps team had been struggling to automate configuration and deployment of servers when Russell arrived with his favorite tool: Puppet. It took some time to hammer the procedure into everyone's heads, but eventually nothing reached their production systems without being recorded in a Puppet manifest first, meaning servers could be built and re-built without manual intervention.


Making Off With Your Inheritance

by in CodeSOD on

There are abuses of the class system, and then there are those beautiful, snowflake- like cases of abuse, those moments where you see the code, you understand the code, and you wish that, somehow, you could throttle the invisible person responsible for that code. Alex found this example:

public class Record_Base
{
	public DateTime RecordDateTime
	{
		get { return _recordDateTime; }
		set 
		{ 
			if (this.GetType().Name == "Record_PartRegister")
				_recordDateTime = value;
			else
				throw new Exception("Cannot call set on RecordDateTime for table " + this.GetType().Name);
		}
	}
}

Flawless Compilation

by in Feature Articles on

Back in the heady days of Internet speculation, the giant retailer JumboStores contracted with Fred’s software company, TinyWeb, to develop the region’s first web-based supermarket. Customers would be able to assemble carts online and receive their groceries the next day.

The virtual supermarket had to communicate with JumboStores’s inventory system in real-time. The former was bleeding-edge web technology, the latter a cobweb-laden mainframe with no external point of access.


The Professionals

by in CodeSOD on

Casa de Quixote is a small, state-run retirement community in La Mancha, in central Spain. Sergio begins his new job as the sole developer of software managing hundreds of residents.

"Here is your office," said Miguel, the community manager of Casa de Quixote. He showed Sergio inside. The office was as barren as a prison cell: there was nothing in the room save a desk, a computer, and a wooden chair.


I Love a Good Food Poisoning!

by in Error'd on

"I was looking for a restaurant to meet a client at that was somewhere in between our respective locations when I came across this listing in Google Maps. I'll keep this in mind for clients I am trying to get rid of in the future," Rob P. writes.


Waterfagile

by in Feature Articles on

Some folks use Waterfall. Some use Agile. A. W.'s team uses Waterfagile. Now you might ask, wtf is waterfagile? Well...fasten your seatbelts...

A. W.'s manager was charged with designing a black-box replacement for an existing system that was over-engineered, over-complicated, over-interfaced, over-configured and utterly incomprehensible. The highly paid consultants who wrote it have all long been let go. Before they could write up user guides, developer guides, architecture diagrams, or pretty much anything else. All of the records of the licenses for the third party libraries used by the project were lost or misplaced. When something went wrong, the only plausible answer was: sorry, we can't fix it, so incur the loss.


Giving Excel the Run-a-Round

by in CodeSOD on

There are entire books — entire bookstores — dedicated to the truisms of business. One truism that doesn't get written about very often is this: before it gets big enough to have IT resources, every enterprise will run on a clutter of VBA-ridden Excel spreadsheets masquerading as line-of-business software. And, as surely as the sun rises in the East, such a company's first few developers will spend most of their time maintaining these. Sometimes those first few developers, with no one on the hiring squad able to vet their capabilities, will even create a few tabular terrors of their own. Dash found himself opening one of these, an Excel workbook created by a long-gone predecessor whose resume had claimed "extreme familiarity with Microsofts XL", to be faced with this:


Private Sub Worksheet_Calculate() 
 
'...snip... 
 
 If Not Intersect(wsTS.Range("Q11:Q35"), wsTS.Range("Q11:Q35")) Is Nothing Then 
   For r = 11 To 35 
     If wsTS.Cells(r, "N") <> "" Then 
       If wsTS.Cells(r, "Q") < 1 And wsTS.Cells(r, "E") <> "std" Then 
        wsTS.Cells(r, "Q").NumberFormat = "0.00" 
       ElseIf wsTS.Cells(r, "Q") < 10 And wsTS.Cells(r, "Q") >= 1 And wsTS.Cells(r, "E") <> "std" Then 
        wsTS.Cells(r, "Q").NumberFormat = "0.0" 
       ElseIf wsTS.Cells(r, "Q") >= 10 And wsTS.Cells(r, "E") <> "std" Then 
        wsTS.Cells(r, "Q").NumberFormat = "0" 
       ElseIf wsTS.Cells(r, "E") = "std" Then 
        wsTS.Cells(r, "Q").NumberFormat = "0.0" 
       End If 
     End If 
   Next r 
 End If 
 
 If wsTS.Range("D42") < 1 Then 
   wsTS.Range("D42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("D42") < 10 And wsTS.Range("D42") >= 1 Then 
   wsTS.Range("D42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("D42") >= 10 Then 
   wsTS.Range("D42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("G42") < 1 Then 
  wsTS.Range("G42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("G42") < 10 And wsTS.Range("G42") >= 1 Then 
  wsTS.Range("G42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("G42") >= 10 Then 
  wsTS.Range("G42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("J42") < 1 Then 
  wsTS.Range("J42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("J42") < 10 And wsTS.Range("J42") >= 1 Then 
  wsTS.Range("J42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("J42") >= 10 Then 2
  wsTS.Range("J42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("O42") < 1 Then 
  wsTS.Range("O42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("O42") < 10 And wsTS.Range("O42") >= 1 Then 
  wsTS.Range("O42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("O42") >= 10 Then 
  wsTS.Range("O42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("Q42") < 1 Then 
  wsTS.Range("Q42").NumberFormat = "0.00" 
 ElseIf wsTS.Range("Q42") < 10 And wsTS.Range("Q42") >= 1 Then 
  wsTS.Range("Q42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("Q42") >= 10 Then 
  wsTS.Range("Q42").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("D44") < 1 Then 
  wsTS.Range("D44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("D44") < 10 And wsTS.Range("D44") >= 1 Then 
  wsTS.Range("D42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("D44") >= 10 Then 
  wsTS.Range("D44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("G44") < 1 Then 
  wsTS.Range("G44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("G44") < 10 And wsTS.Range("G44") >= 1 Then 
  wsTS.Range("G42").NumberFormat = "0.0" 
 ElseIf wsTS.Range("G44") >= 10 Then 
  wsTS.Range("G44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("J44") < 1 Then 
  wsTS.Range("J44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("J44") < 10 And wsTS.Range("J44") >= 1 Then 
  wsTS.Range("J44").NumberFormat = "0.0" 
 ElseIf wsTS.Range("J44") >= 10 Then 
  wsTS.Range("J44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("O44") < 1 Then 
  wsTS.Range("O44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("O44") < 10 And wsTS.Range("O44") >= 1 Then 
  wsTS.Range("O44").NumberFormat = "0.0" 
 ElseIf wsTS.Range("O44") >= 10 Then 
  wsTS.Range("O44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("Q44") < 1 Then 3
  wsTS.Range("Q44").NumberFormat = "0.00" 
 ElseIf wsTS.Range("Q44") < 10 And wsTS.Range("Q44") >= 1 Then 
  wsTS.Range("Q44").NumberFormat = "0.0" 
 ElseIf wsTS.Range("Q44") >= 10 Then 
  wsTS.Range("Q44").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("D46") < 1 Then 
  wsTS.Range("D46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("D46") < 10 And wsTS.Range("D46") >= 1 Then 
  wsTS.Range("D46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("D46") >= 10 Then 
  wsTS.Range("D46").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("G46") < 1 Then 
  wsTS.Range("G46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("G46") < 10 And wsTS.Range("G46") >= 1 Then 
  wsTS.Range("G46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("G46") >= 10 Then 
  wsTS.Range("G46").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("J46") < 1 Then 
  wsTS.Range("J46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("J46") < 10 And wsTS.Range("J46") >= 1 Then 
  wsTS.Range("J46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("J46") >= 10 Then 
  wsTS.Range("J46").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("O46") < 1 Then 
  wsTS.Range("O46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("O46") < 10 And wsTS.Range("O46") >= 1 Then 
  wsTS.Range("O46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("O46") >= 10 Then 
  wsTS.Range("O46").NumberFormat = "0" 
 End If 
 
 If wsTS.Range("Q46") < 1 Then 
  wsTS.Range("Q46").NumberFormat = "0.00" 
 ElseIf wsTS.Range("Q46") < 10 And wsTS.Range("Q46") >= 1 Then 
  wsTS.Range("Q46").NumberFormat = "0.0" 
 ElseIf wsTS.Range("Q46") >= 10 Then 
  wsTS.Range("Q46").NumberFormat = "0" 
 End If

Disqualified Candidates

by in Tales from the Interview on

After the latest round of managerial Three Card Monte, Chris found himself reporting to Judith, on a newly formed team. That team was short-handed, which meant Judith needed to interview a lot of candidates. She sent Chris a steady stream of resumes, and he gave his feedback: “Bring this person in,” or “Don’t bother with this one.”

With Lisa, Chris knew they’d discovered the perfect candidate. She had the skills they wanted, she interviewed well, aced the technical screen, and was personable and compatible with the team. He gave her the thumbs up and waited for Judith to make the offer.


Modern Memory Management

by in CodeSOD on

Evan was in charge of overseeing the integration of Hydra Hosting's seventh and newest acquisition, Calamari. Evan had overseen the last six mergers, and he knew that whether you were integrating with a distant datacenter or moving physical servers into your growing facility, things never went smoothly.

But when Hydra's main datacenter linked up Calamari's, it wasn't just bad. It was catastrophic.


Hot in London

by in Error'd on

Ed W. wrote, "So what's the rule to convert Celsius to Fahrenheit? According to the weather on the my Yahoo page it's: Multiply by 7, divide by 5 and add 32 ... unless you're in London then add 100."


The Long Way

by in Coded Smorgasbord on

Sometimes, a developer just needs to take the long way around. Sure, a line of code like DateTime StartTime = DateTime.Now looks simple and readable, but what happens if you want the StartTime variable to be not exactly now?

Craig’s co-worker figured out a better solution: