Wazzup?

All contents © Rounder Graphics. All rights reserved, view our copyright statement for details. Please report any issues to the webmistress.

This website is accessible!


This website has been tested for web content accessibility!


The CSS of this website validates!


The XHTML of this website validates!



The Daily WTF
Syndicate content
Curious Perversions in Information Technology
Updated: 18 min 28 sec ago

Best of the Sidebar: Completely missing the point...

Fri, 07/04/2008 - 7:00am

Originally posted to the Sidebar by "Welbog"...

I'm working on bug patrol for a generic data-entry app. It has a grid view that lets users input data, as well as a set of other views in addition to the grid, such as a regular winform-like deal. One of the things the app has is a trigger-like system, in which classes of a certain interface are called at certain points in the life of a record. So if a record is deleted from any view, data about this deletion is passed to an object invoked via reflection. The idea being the 'trigger' doesn't have to care about what view the user is using, just the data.

Anyway, onto the anonymized code. This is the "BeforeDelete" function, which lets the action decide whether or not the delete action should be permitted. If it returns true, the delete can continue. If it returns false, it must stop.

Public Function BeforeDelete(ByVal controller As Object, _ ByVal GUIDs() As String) As Boolean Implements BeforeDelete Dim RecordFound As Boolean If TypeOf controller Is SpecificController Then Dim SpecController As SpecificController = CType(controller, SpecificController) Dim RowIndex As Integer = SpecController.View.Grid.ActiveRowIndex SpecController.View.Grid.ActiveRowIndex = RowIndex Dim ItemGuid As String = CStr(SpecController.View.Grid.Cell(RowIndex, 3).Value) RecordFound = DataFacade.GetRecordCount(ItemGuid) If RecordFound = False Then Throw Exception(...) Else Return True End If End If End Function

WTFs:

  1. Throwing an exception instead of returning false, which is what it should be doing.
  2. DataFacade.GetRecordCount returns a boolean. I have no idea why this is. I don't think I want to know.
  3. Getting the active row and then immediately setting the active row to that row. WTF?
  4. The biggest WTF of all, is that this function goes to look up the value of a GUID in the grid, and specifically the grid, so that this event can be bypassed in the other view types. Guess what ItemGuid contains once it gets to the GetRecordCount call? Yeah. It contains GUIDs(0). Even better: you can delete multiple records from the grid, and this function ignores that and only tries to delete the active one.


Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Slaves to The Process

Thu, 07/03/2008 - 10:00am

At large, multinational companies, change is slow because of The Process. Not that Matt had any major problems with The Process — he knew what he was getting into when he started his job. A change begets meetings, which beget approvals, which beget forms that have to be signed in triple-triplicate, which beget more meetings, and maybe after a month or two you will have successfully added a column to a report.

All of Initrode Global's IT staff were salaried employees, except for network management, which was outsourced to a team of Highly Paid Consultants — and both groups took their allegiance to The Process very seriously.

One morning after an update, a key server performed a scheduled reboot. Since the KVM switch had been set to another server, some familiar and ironic words appeared on the screen.

Keyboard error or no keyboard present Press F1 to continue, DEL to enter SETUP

What would you do in this situation? Probably either "find a keyboard, plug it in, hit F1" or "turn the KVM switch, hit F1." And that's exactly what one of the techs, "Clyde," was about to do before a senior tech saw him.

"Whoah whoah whoah! Wait! Whatareyoudoing?"

Clyde looked up from the screen. "There was a BIOS error, I'm just going to clear it to bring this server back online." He was second guessing himself at this point because of the senior tech's reaction. "I mean, right?" he added.

"Just give me a minute. Don't touch anything."

Clyde stood motionless while the senior tech retrieved a clipboard. As he returned, he flipped through a few pages and sighed. "This change request doesn't specify any keyboard activity, let alone any authorization for us to use the keyboard. And further..." he paused for a minute. "Wait here a sec. Don't touch anything."

Moments later, the senior tech returned with a printout. In big bold letters, the heading read "INTWEBSRV017." His eyes scanned the page briefly. When he found what he was looking for, he pointed it out to Clyde. "See, here it says this is a hands-off server. Any actions not specifically authorized in a change request requires a separate change request with approval from a Senior Manager."

The young tech was aware of all of the red tape and approvals that were required for most changes, but this was different. It was a BIOS error that required a single keystroke to clear, and he couldn't imagine anyone having a problem with it. He tried to cautiously argue his point without denigrating The Process. "Well, the change request does say that we're responsible for rebooting the computer. Surely pressing F1 falls under that... and regardless-"

"NO," the senior tech emphatically interrupted. "I just said that we're not authorized for this! You think that it's safe to just make The Process up as you go? Without The Process, we have nothing. The Process Be Praised!"

Defensively, the junior tech replied "No, you've got me wrong! I'm not saying that we do anything without the appropriate change request form signed in triple-triplicate, I'm just saying that it should be assumed that rebooting the computer means that we can clear this BIOS error."

"Look, I understand it sounds a little backwards, but we can not deviate from The Process."

Eventually the discussion grew to encompass everyone in the server room, and soon all of the techs were on an email chain to find out whose responsibility it was to clear the error.

Meanwhile, a whole department was sitting around twiddling their thumbs. Word had trickled down that there was some sort of server error and that the HPCs were on it. At this point, no one outside of the admins or the senior management knew exactly what the problem was, but assumed it must be big if the server was completely offline.

Hours passed and word eventually trickled down that it was a simple BIOS error, but not to worry, the network team wouldn't rest until it was fixed. Occasionally one of the admins could be spotted walking around collecting signatures.

The problem was collecting the right signatures — first, the dev manager refused to sign since their updates couldn't have caused the BIOS error, and that was outside of her jurisdiction. "Try the infrastructure team," she suggested.

"Yeah, that's uh, not really my, uh, domain," the infrastructure lead insisted. "Maybe Gary can help?"

Gary, the network lead, was more accommodating. "Yeah, I can sign off on this once I have a signed Network Request form."

An Emergency Change Request ticket was opened, and over the next few hours updates were provided and forms were signed. In the intervening time, most staff in the out-of-work department had gone home for the day, wondering whether they'd get to do any work the following day. The completed Network Request form was brought to Gary for his signature. And still, no one was sure whose responsibility it was.

"OK," Gary said with a smile. He signed his Herbie Hancock on the form and said "Great, we're all set now."

"That is, after we give the corporate VP a call."

After a long discussion with the corporate VP, an email indicating his approval, ticket resolutions, form filings, and last-minute meetings, the request to press F1 was finally approved.

The senior tech returned to talk to Clyde, who he now thought of as his mentee. "Good news. We got approval to clear the error. The Process works!" He looked at the screen again.

Keyboard error or no keyboard present Press F1 to continue, DEL to enter SETUP

"I'll let you do the honors," he said to Clyde.

Clyde found himself at the same place he was nine hours earlier, and thought about how the day could've been different had the senior tech not seen him about to clear the error. He could've prevented the waste of hundreds of man-hours of putting a whole department out of work while the teams squabbled over whose responsibility it was, what signatures were required, and how many channels the change requests had passed through.

In an anticlimactic quarter of a second, Clyde pressed F1. He stayed to watch the system boot and to ensure that there were no other errors.

The good news is that The Process will be updated with more specific instructions should this scenario ever arise again. That is, after some Process Change meetings are held, approvals are received, forms are signed in triple-triplicate...



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Mandatory Fun Day: 2.4: Settling In

Thu, 07/03/2008 - 7:00am



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Tales from the Interview: Hypothetical Question & Tales From The Dump

Wed, 07/02/2008 - 9:00am

Hypothetical Question from Simon

I’m usually pretty good with interview questions, but this one threw me for a bit of a loop.

“Hypothetical question,” the Interviewer asked, “you have an irate customer on the phone. He says the server is not working correctly. He is demanding that an engineer goes on site to fix it. So what do you do?”

“Well,” I responded, “I arrange a time to go on site to fix it.”

“The customer demands that it’s fixed now.”

“Okay… I clear my schedule and arrange to meet today whenever he— ”

The interviewer cut me off, “customer says he can’t meet today.”

“I guess I’d offer to talk to an engineer on his side, and talk him through the system diagnosis.”

“No can do,” the interviewer shook his head, “customer wants you on site.”

“Umm,” I questioned, “but you just said he wanted it fixed now. If he’s still objecting, then I can offer to meet him tomorrow morning.”

“Oooh, right right.” The interviewer smiled, “Okay, good. So now you’re driving there, and – oh crap – you’re stuck in traffic and won’t make the meeting on time. Now what?

Figuring I had it aced I responded, “but the thing is, I would have left plenty early to ensure that I was there on time and—”

“No, no,” the interviewer cut me off again, “big traffic jam. Tanker overturned. You are so stuck in traffic.”

I sighed, “I guess I would ring ahead to let him know I’ll be late due to the tanker accident. I’d also try to give him an ETA.”

“Uh huh, uh huh. Okay, but the customer says that’s not good enough. He’s threatening to cancel the contract. Now what?”

“I suppose I’d call my manager and let me know about the situation.”

The interviewer snapped back, “nope, you can’t ring your manager. He’s not reachable!”

“I don’t know, I’d ask the customer to ring the office to discuss the contract issue?”

“Ah ha, but he refuses!”

By this point, I was at a complete loss and knew that, no matter what I’d say, there’d be another roadblock. I responded, “Well then, I would just ring you, since you appear to have the correct solution.”

He glared at me and shrugged. “Ok,” he said as he scribbled something down, “that’ll be all. Thanks for coming in.”

As it turned out, I never got called back for another interview. To this day, I still wonder how I could have solved that hypothetical question.

 

Tales From The Dump from Shawn G

When the day for my interview came, I faithfully followed the Google map directions only to find myself right at the gates of the city dump. Inside, there was a small shack with a city worker collecting fees and big bulldozer packing garbage into the ground. And the smell… it was incredible. Fortunately, I allowed for plenty of time and drove back to the freeway to carefully follow the directions again.

Ten minutes later, I found myself at the city dump once again. Looking a little more carefully, I noticed a tiny little office building butting up against the outside fence of the dump. “Surely,” I figured, “no one would ever rent space in that building.”

I drove up to the office door and, sure enough, the address number matched. And the smell… it was still incredible. I had a passing thought that, if the owners ever went bankrupt, they could just open up the fence and the bulldozer could simply shove the building off the ledge, right into the dump. With a chuckle, I told myself that it’d take a lot to convince me to work here.

When he clock struck 1:50PM, I entered the building and told the receptionist that I had a meeting with Mr. Kekacorkian. As I sat and waited, I noticed that the office was decorated in the usual, nondescript office style, with the typical poorly hung pictures, industry literature, and random awards. There was one thing, however, that was a little off: the little green tree air fresheners were hanging all over the place. Still, the smell… was incredible.

Eventually a gentlemen came out of the back and looked at me. “You must be Mr. Kekacorkian,” I stood and said, “I’m here for the interview at 2pm.”

He gave me a cold stare. “You just mispronounced my name,” he gruffed, “that’s one strike against you. My name is Mr. Kekalorcian.” He pulled out a red, felt tip pen from his pocket and made mark on his clipboard.

He led me through the back, where I got a glimpse of the programming department. Everyone was seated perfectly in their cubes, silently typing quietly away. They didn’t even turn to look as I walked through. There were also those green air fresheners hung from the cubes. They didn’t help with the… incredible smell. Eventually, we ended up in his office.

With each question I answered, Mr. Kekalorcian would gleefully shout, “That’s wrong! One mark!” and put it on the paper. He would then tell me the correct answer he expected. If I didn’t agree, another red mark would appear. Fortunately, he cut the interview off promptly on the hour.

“We’ll be in touch,” he scowled, “actually, probably not. You did really poorly. Either way, do *not* call us!”

Later that day, I shared the story with my friends, and we all had a good laugh. I figured that’d be the end of it.

Two months later, however, I received a follow-up call from an HR person at some company. It took me a little while to connect the company’s name with the “dump” company. She offered me a full-time job at a fairly decent pay rate.

“Let me guess,” I responded, “you’ve offered it to everyone else who interviewed and they turned it down? And I’m the bottom of the list?”
Sheepishly she replied, “Yes, that’s it” and sighed.

I politely declined.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Error'd: A Y2K Holdover

Wed, 07/02/2008 - 7:00am

"After close consideration," writes Nick, "I've decided that my mayo really expired on Feb 19, 2008, not 1908. Apparently, Y2K bugs never seem to expire...

 

"Ummmm....," an anonymous reader pondered, "yes?"

 

Remember a few months back when the internet went down? Some say it had something to do with undersea cables... but Ferdy is pretty sure he just clicked "Yes".

 

Anthony Chambers said, "thank goodness there was no error displaying this error!"

 

This popped up for Sebastiaan when he tried to uninstall some obscure application...

 

The irony here is that Rick did this search from within a Radio Shack store...

 

"50% off!?," Dan noted, "with those kind of savings, I could start two wars in Iraq!"

 

"While doing the business taxes for my company," noted Ennis Ray Lynch, Jr., "I was a little surprised at my potential expiration dates. I guess sometimes December comes before May.

 



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Source Control Mastery

Tue, 07/01/2008 - 9:00am

Merv was ready to wash his hands of his last job and to get them dirty at his new one. Now that he was a contractor, he'd be making more, and he'd have a much better environment. This was the first time he'd be working on a team, his first time at a company with dedicated testers, and his first time at an environment that was going to use source control. Merv hadn't used any source control software before, but he had seen it in use and even read up on some popular source control systems.

At his last job he'd been teased with source control a bit — "We need to start using source control," his boss once said. "It's urgent!"

"OK, I'll start researching it right away," Merv replied.

"Oh no you won't! I said 'urgent,' not 'critical!'"

So having only high level knowledge of how source control was used, he'd have to hit the ground running at his new job. Not that he was worried — it seemed like it'd be pretty simple.

A few days into the new job, Merv was all set up with a decent chunk of the codebase, some good specs, and all the development tools he could dream of. It was heaven compared to his last job — he was cranking out prototypes and setting up meetings like there was no tomorrow, in addition to spotting and fixing the occasional bug in the product. The first time he spotted a bug, he excitedly checked it out, which copied the latest version of the file to their dev environment, and made the fix.

A few minutes into it, he heard some incredibly fast and alarmingly loud footsteps coming toward him. Startled, Merv spun around in his chair, his eyes at Joe's belly button-level. Sliding his chair back a few inches, Merv gave a tentative smile. It didn't ease any of the tension.

Joe was bad news. Although he wasn't the lead developer, that didn't stop him from acting like he was. If he wasn't yelling at you, he was yelling to you about his incredible feats of software development strength. "I worked on [incredibly ancient mainframe] back when they were state of the art! You young punks with your C and your DB2!" Joe was also famous for his temper, which he'd take out on the junior developers. Or, if there were none available, his trash can.

Merv hadn't been introduced to, or even heard of Joe before. Merv was given a desk on the floor with all the business people, since there was no room on the third floor with the other devs.

Joe's face was red and he had a little sweat on his brow. He also had a slight facial tic, and an occasionally twitching finger. "Are you *tic* the one that checked in changes to the archives page?" The man blinked as though it caused him physical pain. A vein on his neck looked like it was ready to burst.

Merv swallowed the lump in his throat. "Y... yes. I checked it in."

Joe's eyes narrowed. He took a deep breath and exhaled through his nose, which made an audible whistling noise. The corner of his mouth twitched, then his finger, and without breaking eye contact he pounded a heavy fist on Merv's desk. The sound was like a starter's pistol, both in terms of how it sounded and how it set Joe off. "I hope you f#$king realize what you've done! Because of your dips&*#ted goddamn 'I can check whatever s&%t I want to whenever I f^#king please' attitude, I lost two f%#king weeks of motherf*$king work!"

His tirade went on for minutes, his face getting redder, forehead sweatier, swear words unintelligibler with each passing second. Merv couldn't do anything but sit there and take it — he thought that he had screwed something up, and should have been more careful with the source control.

After Joe ran out of steam and retreated to his lair on the developers' floor, Merv was still in shock. His first foray into real software development couldn't have gone worse. Merv's subconscious picked up where Joe's tirade left off. I'm way out of my league. This was a complete disaster. There's no way I can spin this or apologize for it. Everything he said was true — I'm such a f$#king idiot. Merv wanted to crawl into a hole and die. He was ready to run out the door and never look back.

Taking stock of the situation, Merv realized that when he'd checked out the file to the dev environment, he must have overwritten Joe's changes. But how could that be possible? Merv pondered. Isn't that exactly what source control is supposed to prevent?

Ready to own up to it, he dragged himself to the developer floor to talk to his boss. Merv gave his side of the story, explained how he didn't realize he'd done anything wrong, and that he understood if the company would demand he commit seppuku.

Merv's boss listened in silence, finally smirking, then laughing. "You're right, Merv. Using source control should prevent you from overwriting his changes. But Joe doesn't like using source control — he keeps saying it's easier just to edit the files on the server. I told him he has to stop doing that, but..." he shrugged. "Anyway, thanks for teaching him a lesson — don't worry too much about it."

Merv was reassured, but still somehow not up to going to Joe's desk to return the tirade.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Mandatory Fun Day: 2.3: Behold, The Kraken!

Tue, 07/01/2008 - 7:00am



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Best of the Sidebar: Silent But Deadly

Mon, 06/30/2008 - 8:30am

From René V...

“Recently, a customer came in who was apparently just as overheated as his computer. When we cracked it open, it was pretty evident that it had something to do with his “quieting modifications. We now recommend better, quieter components.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

CodeSOD: Rigid XML Parsing

Mon, 06/30/2008 - 7:00am

Sure, we've chronicled horrible methods of storing data in XML, but what about when you want to retrieve said data? If you're into .NET, you're probably thinking of something in the System.Xml namespace. If you're a Ruby developer, you're probably thinking of REXML. If you're using PHP, the XML Parser extension. If you're a COBOL programmer, then you're probably praying for death.

Well, if you consider yourself a senior-level XML developer, here's a new technique you can add to your repertoire, courtesy of Paul. Here's an example of a technique dubbed Case-Sensitive Replacement-Based Element Parsing, suitable for all* of your XML documents!

Dim sPath As String = System.AppDomain.CurrentDomain.BaseDirectory.ToString() sPath = sPath & "Rules\" & sRulesList(iRCount) Dim File As New StreamReader(sPath) Dim sLine As String = File.ReadLine.Trim Dim sExact As String = File.ReadLine.Trim Dim sNot As String = File.ReadLine.Trim Dim sCase As String = File.ReadLine.Trim Dim sCondition As String = File.ReadLine.Trim Dim sPosition As String = File.ReadLine.Trim Dim sAction As String = File.ReadLine.Trim File.Close() sExact = sExact.Replace("<exact>", "") sExact = sExact.Replace("</exact>", "") sNot = sNot.Replace("<not>", "") sNot = sNot.Replace("</not>", "") sCase = sCase.Replace("<case>", "") sCase = sCase.Replace("</case>", "") sCondition = sCondition.Replace("<condition>", "") sCondition = sCondition.Replace("</condition>", "") sPosition = sPosition.Replace("<position>", "") sPosition = sPosition.Replace("</position>", "") sAction = sAction.Replace("<action>", "") sAction = sAction.Replace("</action>", "")

*only for documents that are flat and have each data element on its own line



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Best of the Sidebar: DR on a (near) daily basis

Fri, 06/27/2008 - 9:00am

Originally posted to the Sidebar by "jetcitywoman"...

"A Bit More Dire" started me reminiscing about the dispatch center where I used to work. I LOVED working there and hated to leave. It was a consolidated county 911 dispatch center, where consolidated means that they had all the dispatchers for the county and every city — fire and police — together in one room. Working off one system. They were busy, one police dispatcher for the largest city typically worked/monitored abour 30 units (cops) at a time during the afternoons. It was hectic, dynamic, and doing the computer support for them was terrible at the time, but after I'd left I really missed it. Here are the highlights.

We were located in the basement of an old county administrative building. No windows, fully below ground. It was in central California where it routinely gets over 100 degrees in July and August. Because we were downtown, we somehow fell under the utility company's umbrella for downtown businesses that got their power turned off in the afternoons when the electricity consumption was "too high" because of everybody running their air conditioners. Our computer room had both very large UPSes and generators, which as you can see got frequent live testing. They worked great. What wasn't so great was that nobody in the county deemed the room that the dispatchers were in as important enough to be on either UPS or generator. So yeah, blackout conditions in the dispatcher's room. Nobody in the county management cared that the dispatchers suddenly had to scramble for flashlights and cell phones to call their units with. Stupid, stupid. Since the server room had great power backups, the server was happily running away with no users.

Once when the city utility workers were doing some roadwork on our street, they perforated a gas main right out front. They evacuated all the county employees except for us basement dwellers. How can you evacuate 911, after all? After about an hour, the gas was actually flowing down our parking ramp into the underground parking area next to our back door, they finally evacuated us too. They called a nearby other dispatch agency to take over our 911 calls (there is actually a switch in the phone system for that), notified the units that they were being evacuated and we all had to leave. That was really freaky because in the 6 years I'd worked there, the dispatcher's room was NEVER unoccupied. Even in the pitch black power failures with no running equipment, there were people in the room furiously trying to coordinate things.

One day one of my coworkers went into the server room for some routine reason... to change some cables or whatever. Popped up a floor tile and saw water. About two inches of water. Server was still running, nothing had failed. We scrambled to get rid of the water and make sure everything kept running. That was freaky too, because we had miles of data and power cables under the floor, much of which was actually in the water. After we got plumbers to fix the leak (broken pipe on the first floor), and dry the place out again, the only casualty was a very large extension cable. It had apparently been submerged long enough that it had grown "hair" — corrosion, and yet still supplied power. We replaced it anyway.

There was the day when I was still new and the only one on duty at the time, when a terminal server blew out. It was providing access to the server for a couple of the dispatchers, a couple police departments, fire departments, etc. Since I was new, my first reaction was a stupid and naive fit of denial. I put my head into the cabinet (it was dark so I had trouble seeing back there) and pushed the little orange button. The fireball was pretty impressive, right in my face. I wasn't hurt, but it did confirm that I needed to just bite the bullet and swap the thing out. Oh, and none of the other equipment was harmed, either.

Some of you may remember when central California had serious floods some years back. Our agency was of course required to coordinate the emergency responders. They pulled together an emergency operations command center in the conference center next to the dispatcher's room. We had everybody from county secretaries manning citizen information phones to police and fire commanders organizing rescues to the BATF stomping around looking important. We never had a single problem with the computer system the whole 4 days that this went on, but they weren't taking any chances. Me and my 3 coworkers had to go on 12-hour rotating shifts in order to be there in case of problems. Ok, I understand, really. But it was really boring playing solitaire for 4 hours at a time, we got tired of chatting and walking around "for visibility". We slept fitfully in our desk chairs, and I curled up on the floor in my cubicle. I've never had sex with a coworker, but that's the only time I've ever spent the night with a coworker also... right there in our office. I jokingly told him I always imagined it would be... better.

So yeah, that was an interesting period in my career. In 6 years we'd directly experienced floods, a gas leak, one evacuation, many blackouts, and one minor explosion.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

CodeSOD: This Application Sucks

Fri, 06/27/2008 - 8:00am

When Michelle M. started her new job, she feared the worst, but hoped for the best. She'd be maintaing an app that had been around since the 1980s and made an impressive tour of technologies — from Clipper to VB to VB.NET and finally to C#. So I guess she didn't so much fear the worst as expect the worst.

That faint little ray of hope she had that the code wouldn't be so bad was shattered when she met the senior developer. The first thing he said to her was "the application sucks." Michelle smiled slightly, unsure if he was kidding (he wasn't). "I mean it really sucks," he reiterated.

When she finally got a chance to sit down at her desk, she opened on a random code file just to see how bad it would be. The file she clicked on had about a three to one ratio of comments to lines of code.

private void txt_fld_TextChanged(object sender, System.EventArgs e) { // This code is here simply for debugging purpose to try to figure out // where the FREAKIN' data is coming from. (This code SUX! Have I already said that?) // Simply create a TextChanged event, insert this code, set break point on code, then // when this get updated you can step back to the actual code that sets this value. string debugFreakinPatheticCode = "sux"; } //what a totally freakin stupid thing to do!!!! //this is the dumbest, kludgiest, most unmaintainable garbage I've seen in a long time. //If you're looking through this code, you're about to encounter a real treat; this is just the beginning. //Congrats to the genius who put this crap together...

It was as though someone had gone in and added those comments specifically to scare Michelle off. She was able to make some sense of the code, but couldn't help sharing the sentiment with the Senior Developer and whichever developer had added the debugFreakinPatheticCode string.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

The Detention Wizard

Thu, 06/26/2008 - 9:00am

Thanks to a generous anonymous donation, Hudson High (as we'll call it) was finally able to trebuchet themselves into the 21st century. In addition to buying new computers for the teachers and staff, they found a contractor that would build them the ultimate system to maintain every function in the school, top to bottom. After a few months the system was built and deployed.

As one of the school's sysadmins, part of Jason L.'s job was to support the software. And it didn't take long for his eagerness to learn the software to turn into confusion, and it didn't take long after that for his confusion to turn into horror.

 

The GUI

They say you only get once chance to make a first impression, and this software totally blew its first impression (and every subsequent impression thereafter). The GUI... oh god, the GUI... It had one consistent feature across all windows — two (apparently randomly selected) retina-burningly bright colors applied as a gradient background. The top of the window would be, perhaps, the color yellow that you can only see by staring directly at the sun, and it would fade gradually into the color red that you could only see if your eyes were literally on fire.

The developer must have realized that these backgrounds would be pretty distracting, and that the welder's mask required to view the application made it hard to see the buttons. So the buttons were assigned even brighter colors, and to make them stand out even further, they'd blink. Each screen in the app had two to seven flashing, often unlabeled buttons with no tooltips (helpfully arranged in ROY G BIV order). If you wanted to know what a button does, hopefully you're friends with the original developer and can ask him.

Not unlike the basic survival skills everyone should know before entering the wilderness, Jason learned some common techniques to avoid breaking the software. The first rule he learned was if you see a flashing red button, do NOT click it. Without confirmation or any way to cancel, it clears the production database and starts you from scratch. Fortunately, it would only display for administrators.

The software suite was divided into several smaller components: (as we'll call them) InterLunch, InterPunish, InterPresence, and InterGrades.

InterLunch

InterLunch allows students to order their lunches, so long as what they wanted to eat conformed to InterLunch's standards. Would you like, say, a slice of pizza, some chips, and a soft drink? Tough — you can only order some quantity of one item. That is, you can buy a hundred slices of pizza if you want, but you have to decide whether you're going to eat or drink. And it was built to support only eight food items.

Since eight slots weren't enough to support the 70+ possible combinations of food items up for sale, the school went back to their old pen-and-paper system.

InterPunish

Intended to completely automate the school's discipline system, InterPunish had a host of features. "It even has a Detention Wizard," the programmer once boasted. The school even updated their disciplinary policies — each offense netted increasing punishments, starting with detentions, then in-school suspensions, expulsions, and finally being forced to stare at the InterPunish UI for a few seconds.

Ultimately, InterPunish didn't work out for the school since they required students to sign demerits, and there was no way to record this in InterPunish. Using it would've taken more time and energy than sticking with the old pen-and-paper system, so it was abandoned.

InterPresence

InterPresence was built to replace the pen-and-paper attendance system. Problem was that it only had two possible states: Present, and (unexcusedly) Absent. Even with doctor's notes and parental or faculty approval, excused absences were counted against the students.

Eventually they reached a compromise — InterPresence would be used only for Present and unexcused Absences, and for excused absences they'd be marked Present and have the absence recorded on paper. And after a little while, they completely reverted back to a paper-based system, leaving InterPresence with InterLunch and InterPunish.

InterGrades

This was the key part of the system — the other software was all well and good, but InterGrades was what really mattered. The goal was to have a single point of entry for all grades for all students, making it easy to pull class averages or drill down to a specific student and see how they were doing.

And it was about as successful as the other products in the suite.

Its first problem was with math. If I was to ask you what a student's grade was if she got 95% on everything she'd done, what would you say? Probably 95%. And you'd be right, using Earth math. But if you use InterGrades's proprietary math, you'd realize that the student was actually failing with a grade in the low 30s. When this was discovered, the school board decreed that all grades be recorded in the old pen-and-paper gradebooks.

The Backend

These applications were built on an Access database, and the quirks of dealing with the database first appeared during installation. Specifically, the database path was case-sensitive, despite it being a Windows application. It also had to be in the first subfolder of a root folder on a network share, no exceptions. And the subfolder has to start with a dollar sign. And much like confirming your email address or password, the installer required that you enter the same path twice for verification.

Updates are handled like so:

  1. User clicks an irritating blinky button
  2. InterWhatever downloads the entire database onto the user's computer
  3. User makes changes
  4. Wait for the database to be available with no other users editing and download again
  5. Merge the user's changes back in
  6. If the database was changed while attempting this, go back to step four
  7. Upload the modified database

This made things get real interesting at the end of the semester. With thirty teachers and a 100MB database, (300MB per request), it didn't take long for the network to go down.

Going Dark

Each product in the suite had one thing in common with all of the other products in the suite — the seizure-inducing UI and being completely useless. The developer genuinely wanted a happy client, however, and promised free data updates and support for (the rest of his) life if the school promised to test it in a production environment. And shortly after making that promise, he disappeared. It was total radio silence; ignored emails, unreturned pages, unanswered calls. Not only that, but he doesn't even live at the same place anymore.

The school tried and tried to make the most out of the software, but every product was completely useless to them. After blowing over $10,000 on the project just to go back to pen-and-paper, the board decided to do a gradual rollout of a commercially-developed web-based suite. And although the new software is working great, it doesn't have the neon gradient/blinky button UI they'd grown accustomed to.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Mandatory Fun Day: 2.2: The Offshore Coordinator

Thu, 06/26/2008 - 7:00am



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Lyle Can Do Anything Better Than You

Wed, 06/25/2008 - 9:00am

Lyle was displeased. Despite all he had going for him — being the most handsome guy in the office, the smartest guy on the team, having the best all-terrain tires throughout the whole department, and trouncing the competition in a recent laser tag game, his team didn't seem to work well together.

Clearly, Lyle wasn't the problem. He was the best manager, the best leader, hell, the best human being there had ever been. And it was up to him to make his team happy. The laser tag game could have been a good first step if James W. hadn't ruined everything by exposing Lyle as a cheater. To his team's delight, Lyle sent out an email that he'd be at the regional office for a few days on management training. Lyle must have been doing something right, because as soon as he left the office got more productive.

Lyle's training included an introduction to the FISH! philosophy (pronounced "fish factorial"). For the peasants that haven't heard of FISH!, it was born out of Seattle's Pike Place Fish Market. The employees there were always smiling and laughing as they threw fish to eachother to fulfill orders, which made customers happy. And extra hungry for Tilapia, apparently, because they'd buy a whole shipload of fish.

That's it, Lyle reasoned. People aren't having enough fun at work! And he knew just the solution. He put his new team-building plan in action the day he returned from his training.

Instead of a call or an email, team members found out that Lyle was back in town by getting whanged in the back of the head with a Nerf missile, followed by Lyle cheerfully congratulating himself in third person. "Lyle, way to shoot Sylvia while she was trying to finish her reports! How are you so good at this Lyle? Well, Lyle, I guess I was just born incredible!" Or it could have been that he was shooting from near-point-blank range.

Lyle embraced all of the tenets of the FISH! philosophy that he could distill to "shoot employees with Nerf gun." When Wikipedia says "some employees find these techniques ridiculous and demeaning," I think it's specifically referring to Lyle's warped interpretation.

Lyle's plan to liven up the office was, as far as he understood it, brilliant. Lyle was certainly having more fun at work — and it was fun when his employees that pretended to be annoyed by getting hit with a Nerf gun, and then pretended to just want to get work done, and pretended that they thought Lyle was a complete boob (and kept the joke going for their whole tenures). It's nice to have people laughing with you!

James had grown less and less patient with Lyle's childish antics. While most of Lyle's staff feared his temper, James and his friend Brian had found a subtle way to deal with it — open, unabashed mockery. They wouldn't let him live down the fact that he'd sabotaged the laser tag game, nor that the net result of his expensive management training course was him showing up to work with a Nerf gun. Lyle found this to be very un-FISH! and would storm out of the room upset, taking it out on his staff in an orgy of Nerf-based violence.

Still, James had to admit that maybe Lyle had been on to something, so he and Brian went out to lunch that day, choosing a restaurant specifically because it was near a Toys-R-Us. After eyeing the available arsenal of foam-based weaponry, James decided on a three-chambered, 4 D-battery powered, rapid firing, twelve pound behemoth.

James's new toy kept Lyle quiet for a while, but word is that Lyle's been working day and night in his garage, assembling a tank made entirely of Nerf.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Error'd: It Happens

Wed, 06/25/2008 - 8:00am

To think, if Ash had spent infinity hours playing the original EverQuest instead of Warcraft, Ash would be close to level 25 by now.


(submitted by Jason M.)

 

Sorry, but I can't print what happens on the fourth night at the Sheraton here, but trust me — it's amazing.


(submitted by Matt D.)

 

Good news from C. P. — VLOS 1.2.1 is out as of the 30th of Megajune.

 

Dear Microsoft, please give me a horizontal scrollbar. Love, an anonymous WTF reader.

  

"Best watch your back, kid. Sh-t just got real."


(submitted by Earle C.)



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

The Stalled Server Room

Tue, 06/24/2008 - 9:00am

A few months back, Jen Frickell's company was given some bad news. When their lease ended, they'd have to move out of their second-floor suite. The good news, however, was that a suite would be available on the first floor. All they'd need to do was pack up and move downstairs.

It was a fairly reasonable request, so the company's executives signed a new lease and prepared to move. There was, however, just one, small hitch. The nice little server room they built in the back of their office - equipped with air conditioning units, ventilation, dedicated power, backup power, and so on - could not be relocated. Not only would it cost too much, but there was simply no room for it. The server room would just have to remain upstairs.

Obviously, the new second-floor tenant wouldn't want their neighbors walking through their office to access a server room, so building management and the company's executives came up with an alternative: wall off the server room door and build a new one. It seemed simple enough, but there was, however, just one small hitch. The only available wall to install a door was adjacent to the women's restroom. Inside the handicapped stall.

And since you're reading about it here, you know that didn't stop them. Here is the email from building management:

From: ---- -------- Sent: Monday, May 5, 2008 4:37 PM To: Everyone Subject: Server Room Access Hi all. As you all are aware, we have new tenants that have moved into the 2nd floor suites. The access to the server room is now via the women’s bathroom. There will be a sign on the woman’s door that can be changed from OPEN to CLOSED and vice versa. Should you need to enter the server room, please change the sign to CLOSED. Once you are done, please change it back to OPEN. Once you enter the bathroom, you will be able to access the server room via the handicapped stall. Please close the stall door prior to entry, just in case someone doesn’t see that the bathroom is closed. I know this isn’t ideal, but if we adhere to this protocol, I don’t think anyone will be disrupted. Thanks! Let me know if you have any questions. ---- -------- Building Management

 

Jen was kind enough to snap a picture of their just-finished server room entrance.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Mandatory Fun Day: 2.1: Ahoy!

Tue, 06/24/2008 - 7:00am



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Best of the Sidebar: The Exemption Pass

Mon, 06/23/2008 - 8:00am

Originally posted to the sidebar by "compaqdrew"...

At my old public high school, the District (maybe even the State) mandated that every class must have a final exam, and it must account for 20% of the student's grade. Of course, this fails to explain how it is even possible to give a final in, say, Vocal Music. The teachers hated it and even the principal sympathized, and thus was born the Exemption System.

I should start with a brief primer of how my school's computerized records worked. A few years before, they discovered that their existing client/server OLE networked grading system was hackable (some fool stole the client off of a public network share and told everyone), and so the District authorized a multi-million dollar expenditure to 'upgrade' the system. The upgrade consisted of constructing a Java web application that was hosted over SSL. There were strong password requirements and MD5 hashing that they undoubtedly borrowed from some other library, and all the other bullet points you need in a multimillion dollar government contract. What everyone failed to realize, however, was that all the SQL commands were being sent to the SQL server in unencrypted plain text over a standard TCP connection.

One of the 'hacker' students must have noticed this on ettercap, or something, because it wasn't long before someone opened a telnet session to 172.16.55.55:2500 and sent "DROP TABLE GRADES." Of course, the SQL server kept no IP logs, and even if it did, there were no logs to tie an IP address to the user logged on at that workstation, and there were several well-known anonymous accounts (more about that in another WTF). The software company characterized the loss of 100% of the grades throughout the entire school of 2500 students as a "server crash" and pushed for more upgrades and more patches that the State paid for. In most cases these 'patches' amounted to introducing new loading screens that said exciting things like "Encrypting access..." and "Enabling cyphertext..." (not kidding). This continued for several weeks, and eventually teachers went back to tracking grades in a physical gradebook, and just re-entering every week after a "crash."

Anyway, this same SQL server and software was used to track absences, and someone had the bright idea of extending it to form the Exemption System. The idea was that if you missed only a couple of classes a semester, you would receive an Exemption Pass that you could use in a single class to skip the final exam. Of course, there was great success duplicating the paper Exemption Passes (attempts to thwart this included deliberately misspelling the name of the high school). Automating this should be easy enough, right? Just write an SQL query that SELECTs all STUDENTS WHERE ABSENCES < 3 and hand them all passes.

There was also a little bit of logic to exclude certain absences (bereavement, jury duty, etc. should not count against you). Unfortunately, there were several absence codes stored in the database that were not really an absence — that is, the software would sometimes store other information (a student's year, or their state-wide test scores) as a "fake" absence code. If you have "J" marked on a day, that might be jury duty, and "B" might be bereavement, but "L" on January 25th means you're a Sophomore. Long story short, many students who should have gotten exemption passes did not. Mass panic.

So half the student body (1200+ students) shows up in the main office on the day exemption passes were handed out at 4:00PM, demanding absence reports (fortunately these were generated in a way that they did not include "fake" absences). The students were to go to one office, get their attendence report printed out, go to another office on the other side of the building and get it checked (and hopefully get an Exemption Pass). Of course, there were only one or two days before the exams, because the administration didn't want the precious Exemption Passes out long enough for students to be able to forge them (it would be easier to forge the Attendence Reports, they looked for all the world like Excel spreadsheets). This means that 1200 students needed their pass TODAY, and the Attendence Office typically had a turnaround time of 24 hours (e.g. you would submit a request for a report and receive it the next day). Somebody discovered that teachers could print out attendence reports for their students, and thus the Attendence Office was saved from printing out 1200 reports, and individual teachers had to print out the reports.

So I got my report printed out by a sympathetic teacher and headed to the Main Office to fight with the powers that be. There were three people dealing with 1200 angry students. I waited in line for a few hours and finally got in to see The Exemption Lady. She was bald and overweight, with curly graying hair. She looked at my Attendence Report and determined that I had more than three absences. The sympathetic teacher had accidentally printed out an Attendence Report for the year, of which this was the second semester, and the Exemption Passes were handed out based on per-semester attendence (not per year). Now this wasn't some type of totals sheet — the Attendence Report had a row for every school day and its date along with the attendence code. So it would be easy to just start counting in January on page two rather than in August on page one. This logic completely escaped her — she counted the absence codes, completely ignoring the dates, and she counted more than three. When I got up from my chair so that I could point to January on the page and the fact that it might make sense to start counting there, she flipped out and threatened to have me suspended for what she perceived to be "agression." I was a white kid with glasses, weighing maybe 160, and she weighed like 220, at least. Anyway, I decided that it might be easier to just get another report.

And so I did, this time making sure the teacher clicked the "Semester only" button. Got back in line, waited a few more hours (it was like 7:00 at this point). Saw the Exemption Lady again, this time with a new report, that started on page two with "January". This was literally the exact same document, except it had 60-70 records less than the last one did. She held the two reports side-by-side and looked slowly to one and then to the other. I was thinking "any minute now, she will see it! One is for a single semester and the other is for the entire year!" After a few minutes of careful scrutiny she held them both up to the light. I don't know what watermark she expected to see; they were both printed out using the school's printers. Finally she said "This is odd. According to this report, you have too many absences, but according to this other one, I can give you a pass." I sat there, dumbfounded, hoping to get away without being hauled out for 'agression'. Finally, she put both reports down, gave me a long lecture about how I much further in life I can get if I'm not 'agressive', and she gave me my pass.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Announcement: Alex Sells Out!

Fri, 06/20/2008 - 8:00am

As you may have noticed, there are now advertisements on The Daily WTF. Well, technically, I've been running ads here since October of 2004… but I just realized that I never bothered announcing it. So, there you have it dear readers: I have officially sold out.

Normally, the Sell Out announcement goes something like this. I really hate ads. I know you do, too. But my blog takes soooo much time and cost sooo much money, I have no choice but to put up ads. Besides, everyone else is doing it. So technically, it’s them selling out, not me. Please don’t hate me.

While I did consider taking that approach, I came to realize something else: I really don’t hate advertising. And neither do most of you. We just hate obnoxious advertising.

And you see, therein lies the problem. As of late, the advertisements here on TDWTF have not only become incredibly obnoxious, but outright embarrassing. I’m not kidding. Consider these “choice” ads that were served up here last week, courtesy of the Google AdSense network:

Yes, that’s an X-Mas ad in the middle of June. And one for Pokemon cursors. Seriously. Pokemon cursors. Then there’s the IQ test ad that doesn’t even have a correct answer, and finally, one that I’m sure none of you missed: the “Get The Facts” campaign for Scientology.

I’m not exactly sure how we ended up with Scientology ads – or, for that matter, why the marketing folks at The Church chose the same tagline as Microsoft’s “Get The Facts” campaign – but what I do know is that virtually none of you have any interest in learning more about Scientology. Consider this Venn diagram I put together based on a thorough inverse chi-squared analysis of derived reader demographics:

Clearly, the Scientology – and the Pokemon, and so many others – are a bad fit for TDWTF. After seeing this, I knew it was time for a slightly different approach.

 

Sell Out 2.0

Here’s the new plan:

  • Less Advertising - As of yesterday, I’ve reduced the number of adspots down to two: the Leaderboard (up top) and the Skyscraper (on the left)
  • Better Sponsors - Every banner ad you’ll see is from a company that I personally talked to or approved, and has products/services that I know many of you are interested in: development tools, web hosting, irishgirl, etc.
  • Text-Only Google Ads - When there's no hand-picked banner ads to display, I'll fill in the gap with text-only ads from Google. While that means that we'll still see things like “Industrial-Strength Steel String”, their algorithm may occasionally pick out a cool product or service.
  • You Disable AdBlock - Okay, wishful thinking. But look at this way: there are some pretty cool sponsors lined up and I might able to actually upgrade from the Quick Meal.

I’m also very interested in what you think. If there’s a company you’d like to see advertise or think your fellow readers would appreciate, send me a link or post a comment.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

CodeSOD: A Dubious Honor

Fri, 06/20/2008 - 7:00am

"At my workplace, we have a wiki for the 'WLC' — the Worst Line Competition," Kirk writes. "We post lines of code that the lead developers have decided were good additions to the applications that we port. Here is one of the better ones:"

patno -= ((((((((((((((((40+1)+1)+1)+1)+1)+1)+1)+1)+1)+1)+10)+1)+('Z'-'A'))+1)+1)+1);

Currently, this line is winning the Worst Line Competition.

For most of our submissions, I can tell what the developer was going for (and where he went wrong). Not this time, though. I've narrowed it down to two theories — either the developer's number keys other than 4, 1, and 0 were broken, or he was playing a future prank on some poor maintenance developer.

I've taken the liberty of making it more readable (and therefore more profitable if paid by the line) below. You're welcome.

patno -= ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 40 + 1 //41 ) + 1 //42 ) + 1 //43 ) + 1 //44 ) + 1 //45 ) + 1 //46 ) + 1 //47 ) + 1 //48 ) + 1 //49 ) + 1 //50 ) + 10 //60 ) + 1 //61 ) + ( 'Z' - 'A' //86 ) ) + 1 //87 ) + 1 //88 ) + 1 //89 );

Also, I should note that you may not use this code in your own applications. If you want to reduce a variable by 89, you'll have to find another way to do it.



Brought to you by the Non-WTF Job Board:


Categories: Comic Relief

Gallery

Foundation of Success Home PG
 
 

Infamous Quotes

Be nice to nerds. Chances are you'll end up working for one.



— Bill Gates



Syndicate

Syndicate content