Tuesday, October 31, 2017

With the Router, In the Conference Room

This is a follow-up to With the Router, In the Conference Room, revealing the… STUNNING CONCLUSION!

How It Really Ended

Darren took the case up to his boss, and then to their boss, up the management chain. No one was particularly happy with Cathy’s tone, and there was a great deal of tut-tutting and finger-wagging about professional conduct.

Ms. Scarlett, in Clue, delivering the line 'Flames, flames on the side of my face'

But she was right. It was Mr. Green who failed to follow instructions, it was Mr. Green who cost the company thousands, along with the customer relationship problems caused by Cathy’s sudden emergency trip back to the home office.

In what can only be considered a twist ending by the standards of this site, it was Mr. Green who was escorted out of the building by security.

The killer was Cathy, in the issue tracking system, with the snarky bug report.

[Advertisement] Universal Package Manager – store all your Maven, NuGet, Chocolatey, npm, Bower, TFS, TeamCity, Jenkins packages in one central location. Learn more today!


To read the full article, please visit The Daily WTF

With the Router, In the Conference Room

One of the most important aspects of software QA is establishing a good working relationship with developers. If you want to get them to take your bug reports seriously, you have to approach them with the right attitude. If your bugs imply that their work is shoddy, they are likely to fight back on anything you submit. If you continuously submit trivial “bugs”, they will probably be returned right away with a “not an issue” or “works as designed” status. If you treat any bug like it’s a critical showstopper, they will think you’re crying wolf and not immediately jump on issues that actually are critical.

Then there’s people like Mr. Green, a former coworker of submitter Darren A., that give QA a bad name. The Mr. Greens of the QA world are so incompetent that their stupidity can cause project delays, rack up thousands of dollars in support costs, and cause a crapstorm between managers. Mr. Green once ran afoul of Darren’s subordinate Cathy, lead developer on the project Mr. Green was testing.

A shot from the film Clue, where Mrs. White holds a gun in front of Col. Mustard

Cathy was en route to the United States from London for a customer visit when her phone exploded with voicemail notifications immediately upon disabling airplane mode. There were messages from Darren, Mr. Green, and anyone else remotely involved with the project. It seemed there was a crippling issue with the latest build that was preventing any further testing during an already tight timeline.

Instead of trying to determine the cause, Mr. Green just told everyone “Cathy must have checked something in without telling us.” The situation was dire enough that Cathy, lacking the ability to remotely debug anything, had to immediately return to London. Mr. Green submitted a critical bug report and waited for her to cross the Atlantic.

What happened next is perfectly preserved in the following actual bug report from this incident. Some developers are known for their rude and/or snarky responses to bug reports that offend them. What Cathy did here takes that above and beyond to a legendary level.

====
Raised:         14/May/2015
Time:           09:27
Priority:       Critical
Impact:         Severe
Raised By:      Mr. Green

Description
===========
No aspect of GODZILLA functions at present. All machines fail to connect with the server and we are unable to complete any further testing today.
All screens just give a funny message.
Loss of functionality severely impacts our testing timescales and we must now escalate to senior management to get a resolution.

15/May/2015 22:38
        User:   Cathy Scarlett
        Updated: Status
        New Value: Resolved - User Error
        Updated: Comment
        New Value:
                Thank you for this Mr. Green. I loved the fact that the entire SMT ordered me back to head office to fix
                this - 28 separate messages on my voicemail while I was waiting for my baggage.
                I was of course supposed to be fixing an issue our US customer has suffered for over a year but I
                appreciated having to turn around after I'd landed in New Jersey and jump back on the first return
                flight to Heathrow.

                Do you remember when you set up the Test room for GODZILLA Mr. Green?

                Do you remember hanging the WIFI router on a piece of string from the window handle because the
                cable wasn't long enough?

                Do you remember me telling you not to do this as it was likely to fall?

                Do you remember telling me that you sorted this out and got Networks to setup a proper WIFI router
                for all the test laptops?

                I remember this Mr. Green and I'm sure you'll remember when I show you the emails and messages.

                I walked into the test room at 10 o'clock tonight (not having slept properly for nearly
                3 days) to find the WIFI router on the floor with the network cable broken.
                        ROOT CAUSE: The string snapped

                There was a spare cable next to it so I plugged this one in instead.

                Then, because this was the correct cable, I put the WIFI unit into the mounting that was provided
                for you by networks.

                As if by magic, all the laptops started working and those 'funny messages' have now disappeared.
                GODZILLA can now carry on testing. I'm struggling to understand why I needed to fly thousands of
                miles to fix this given that you set this room up in the first place. I'm struggling to understand
                why you told the SMT that this was a software error. I'm struggling to understand why you bypassed my
                manager who would have told you all of this. I'm closing this as 'user error' because there
                isn't a category for 'F**king moron'

                72 hours of overtime to cover an aborted trip from London to New York and back:
                        £3,600

                1 emergency return flight:
                        £1,500

                1 wasted return flight
                        £300

                1 very nice unused hotel room that has no refund:
                        £400

                1 emergency taxi fare from Heathrow:
                        £200

                16 man days of testing lost
                        £6,000

                Passing my undisguised contempt for you onto SMT:
                        Priceless

Mr. Green was obviously offended by her response. He escalated it to his manager, who demanded that Cathy be fired. This left Darren in a precarious position as Cathy’s manager. Sure, it was unprofessional. But it was like getting a call from your child’s school saying they punched a bully in the nose and they want your child to be disciplined for defending themselves. Darren decided to push back at the QA manager and insist that Mr. Green is the one who should be fired.

This story might have ended with Mr. Green and Cathy forced into an uneasy truce as the company management decided that they were both too valuable to lose. But that isn’t how this story ended. Or, perhaps Darren's push-back back-fired, and he's the one who ends up getting fired. That also isn't how the story ended. We invite our readers to speculate, extrapolate and fabricate in the comments. Later this morning, we’ll reveal the true killer outcome…

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!


To read the full article, please visit The Daily WTF

Monday, October 30, 2017

CodeSOD: Drain the Swamp

You may remember Virginia N from An Extinction Event, where she struggles to refactor a legacy project with some… unusual design principles. ReSharper still continues to choke to death on their codebase, but her management haas let her know, this won’t be a problem going forward.

“You see,” her boss explained, “we’re going to move the logic into stored procedures. That way, we can more easily re-use the logic between the Windows Forms client and the Web app.”

“Oh, there’s going to be a web app, now?” Virginia asked.

“Yes! They’re going to use best practices, like unit testing, so that they don’t end up with the same kind of mess we have,” her boss said.

Virginia was halfway to filing a request for a transfer when she heard more about the web project. Then she heard about their plan. They weren’t going to simply build a web-client for their backend, but instead were going to build an inner platform. The page logic would be a simple template, and all of the rules, styling, data and display logic would be stored as data in the database. “It’s gonna be really flexible!”

Virginia decided to stick with the fetid field she knew, instead of the “green field” which was going to be a fetid swamp in a matter of weeks.

In Virginia’s swamp, she has many, many 40,000 line classes. That much code means the code has no real cohesion, so it leads to Virginia finding variables named thus:

public bool IReallyDontWantToFetchTheDataOnLoadButDontWantToChangeTheOtherVariablesCauseWhoKnowsWhatWillHappen=false;

It’s at least descriptive. It also exists in the class side-by-side with variables like blnGetData, GetDataOnFormLoad, and GetDataOnFormrLoadS.

Elsewhere in the same file, they have a different problem. They added a control to the view, and needed an accessor method to decide whether it was visible or not. Actually, they needed a few, and they knew that the form would be changing over time, so they needed something that was “dynamic”.

Now, they could have simply added properties and getters/setters as the form changed and dealt with the follow on changes, but someone decided it was time to stress “Closed for Modification” was a good object-oriented practice. They left out the “Open for Extension” part of the open/closed principle, so they used this code instead, which uses a few index properties to decide which control should be modified.

private void SetVisiblePicNdt()
{
    string NomBtnNDT="";
    string NomBtnChant="";
    if (m_IndexChant>0)
    {
            NomBtnNDT="btn"+(m_IndexChant+1).ToString();
            NomBtnChant="btn"+(m_IndexChant).ToString();
    }
    else
    {
            NomBtnNDT="btn"+(m_IndexLB+1).ToString();

    }

    Control sectMain=null;

    for (int i=0;i<ctlRecherche.Controls.Count;i++)
    {
            if (ctlRecherche.Controls[i].Name=="sectMain")
            {
                    sectMain=ctlRecherche.Controls[i];
                    break;
            }

    }
    if (sectMain!=null)
    {
            for (int i=0;i<sectMain.Controls.Count;i++)
            {
                    if (sectMain.Controls[i].Name=="panFilterSection")
                    {
                            panFilterSection=sectMain.Controls[i];
                            break;
                    }

            }
    }
    if (panFilterSection!=null)
    {
            for (int i=0;i<panFilterSection.Controls.Count;i++)
            {
                    if (panFilterSection.Controls[i].Name==NomBtnNDT)
                    {
                            panFilterSection.Controls[i].Visible=false;
                            break;
                    }

            }
    }

}

Virginia has many more horrors to share, so expect more examples from this code base.

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!


To read the full article, please visit The Daily WTF

Saturday, October 28, 2017

Friday, October 27, 2017

Squirrel Snacking Away

Because who doesn’t like pizza…

The post Squirrel Snacking Away appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Undercover Jackie Chan

Jackie Chan reveals his deepest feelings, anonymously.

The post Undercover Jackie Chan appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Shopping Never Was This Adorable Before

I wonder if these cute piglets were taken on a trip or if they were picked up in the store itself?

The post Shopping Never Was This Adorable Before appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Error'd: Trick or Treat? Smell My Feet

"Sorry, but 4.2 billion Microsoft points sounds like 'all tricks' to me," writes Ergin S.

 

"Most paints are air-drying, but with this one, you apparently need to, um, assist with the air flow a bit," wrote Peter G. (Side Note: For fun, go ahead and google the item title.)

 

Dave P. writes, "Um, The US Supreme Court is patching Android within to decide Microsoft email privacy dispute!? Thanks Slashdot!"

 

"Why yes, it's the first time that I've see this network at the workplace," wrote Wouter.

 

Adam L. writes, "And here I thought you only got to celebrate a trip around the sun only once per year. Neat!"

 

"You guys! My iPhone is DAMAGED! Thankfully there's an app on the Google Play store that can fix it!" I found this one.

 

[Advertisement] Application Release Automation for DevOps – integrating with best of breed development tools. Free for teams with up to 5 users. Download and learn more today!


To read the full article, please visit The Daily WTF

Thursday, October 26, 2017

Pretending To Be Klay Thompson

With those looks? How hard can it be?

The post Pretending To Be Klay Thompson appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Who That Guy?!

Dog needs his nose to know who he’s dealing with.

The post Who That Guy?! appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

CodeSOD: 10001 Problems

A rat leaving a ship via the mooring rope, thus spreading th Wellcome V0010685

Our Anonymous submitter's first job was helping to support a distributed system running in a low-energy embedded platform. Interesting on its face, the platform was actually a bloated, outdated monstrosity made worse by the decision to use C++ in conjunction with a homemade (read: unsafe) binary data format.

The platform had one mysterious, catastrophic flaw in particular: once a cluster was up and running for a few weeks, it would sometimes fail with a series of random segfaults, with several nodes crashing at once. Serial port debugging showed that many of these failures were proceeded by an ominous log message, a single line with the number 10001 and nothing else.

After pondering the mystery for some time, someone thought to search for the number 10000 within the code base. Thus they found their culprit within the very core of their application: the code that read each record stored in their homemade binary files and copied it to memory.

#define END 0xFFFF
while (header->recordType == END) {
    // unknow (sic) loop times
    if (recordNum > 10000) {
        log(recordNum);
        return 0;
    } else {
        *header = *recordPtr;
        memcpy(memoryPtr, recordPtr + HEADER_SIZE, header->recordSize)
        *recordPtr += header->recordSize;
    }
    recordNum++;
}

Whenever one of the binary files got corrupted in some way, this code never found an END record, and thus proceeded to copy random memory chunks to other random memory chunks until its incredible security measures kicked in after just 10000 iterations. Even worse, the code would also alter other files read into memory. Those corrupted files were then transferred to other nodes, cutting a swath of destruction and fail across the entire platform.

Our submitter and his cohorts resolved immediately to switch to an industry-standard, resilient, checksum-protected data format in the near future. And then, knowing full well what that implied ... they added a log message.

[Advertisement] Universal Package Manager - ProGet easily integrates with your favorite Continuous Integration and Build Tools, acting as the central hub to all your essential components. Learn more today!


To read the full article, please visit The Daily WTF

Wednesday, October 25, 2017

My Sweet Jax

A very loving and touching tribute to a cat.

The post My Sweet Jax appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Every Cat Owner Worldwide

Just admit it, you’ve all done this.

The post Every Cat Owner Worldwide appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Re-Authenticated

Sometime back, our friend Fred told us about his experiences with homegrown PK/FK relationships. Today, he regales us with a tale of trying to get users to use their new-and-improved sso mechanism, even if they don't want to.

His company currently runs a legacy reporting portal service that has an old-school sso which is used by several third party systems. This mechanism stores user names and passwords as clear text in the DB. It also passes them in clear text in a hidden HTML form. The third party code would create the hidden form with the user name and password in clear text and JavaScript-submit it to the login page - without HTTPS. OK, it was the way things were set up way back then.

A computer screen showing the prompt 'My name is *****. My voice is my passport. Verify me.

Nowadays, his employer knows better and has created a new and improved system with slightly more sophisticated security. They encourage their end users to make the switch and use the shiny new platform. Unfortunately, the third party systems still have hard-coded embedded links to the old system, and although switching to use the new system would improve security, the users are in no rush to make changes to their software.

When you have lemons, make lemonade.

Fred was unwilling to succumb to the laissez-faire attitude of lazy customers, and so wrote a URL-rewrite rule for the IIS server that was running their old VB6-era system. It redirected posts to login.asp to /hijack/login.aspx. The new page contains logic to check if the user is configured on the new platform. This magic was accomplished by using the 307 Temporary Redirect, which maintains the POSTed payload; something which is not done by a standard 302 (perhaps this is a Dark Secret™ of IIS - who can say?) If the user was found in the new application, an access token was fetched from IdentityServer3 and the incoming user was redirected to the new platform. Otherwise, /hijack/login.aspx output the same old fool-proof hidden HTML form with clear text user name and password and JavaScript-submitted it - without SSL - to the renamed login2.asp page of the old system.

Upon pondering his creation, Fred winced at the plethora of Biblical-Level WTF in this set up, but in some curious way the solution is kind of cool and he thought the world should know about it.

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!


To read the full article, please visit The Daily WTF

Tuesday, October 24, 2017

Why Does Mario Have A Mustache?

Or did you think Mario just decided to stop shaving one day?

The post Why Does Mario Have A Mustache? appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Fails Of The Week

Fail some more, please, it’s the easiest way to make other laugh!

The post Fails Of The Week appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

CodeSOD: The Key to Lookups

After some “miscommunications about coding standards”, Nicolas’s company decided that they should have one of their internal developers do code reviews on anything that came from their external, third-party developers. Nicolas drew the short straw on the most recent project.

The specific problem in play is that they had config-data, structured as nested dictionaries. You know the kind of data-structure- something like:

{
    database: {
        connString: "someDb:abc:123",
        pageSize: 50
    },
    api: {
        url: "https://foo/data",
        defaultHeaders: {
            "X-Api-Key": "d0908ad1-3e28-419f-ab05-0c74eae1ca37"
        }
    }
}

In their specific configuration, keys could be nested to any arbitrary depth. Someone wanted a helper method, that, given an array of keys: ["api", "defaultHeaaders", "X-Api-Key"], could return the value associated with the key.

You might be thinking of some iterative or recursive approach for walking the tree, but a smart Python programmer knows that unrolling a loop boosts performance… right? Is that how it works? Well, no matter:

def getObjectValue( listObj):
    """ returns the value of the required object by construction the object from the list of string values """
    x = len(listObj)
    if x == 1:
        return config_data_list[listObj[0]]
    if x == 2:
        return config_data_list[listObj[0]][listObj[1]]
    if x == 3:
        return config_data_list[listObj[0]][listObj[1]][listObj[2]]
    if x == 4:
        return config_data_list[listObj[0]][listObj[1]][listObj[2]][listObj[3]]
    if x == 5:
        return config_data_list[listObj[0]][listObj[1]][listObj[2]][listObj[3]][listObj[4]]
    if x == 6:
        return config_data_list[listObj[0]][listObj[1]][listObj[2]][listObj[3]][listObj[4]][listObj[5]]
    if x == 7:
        return config_data_list[listObj[0]][listObj[1]][listObj[2]][listObj[3]][listObj[4]][listObj[5]][listObj[6]]

Good thing their config file doesn’t have 8 nested levels of configuration data. Then again, why does someone’s config data have 7 nested levels?

[Advertisement] Manage IT infrastructure as code across all environments with Puppet. Puppet Enterprise now offers more control and insight, with role-based access control, activity logging and all-new Puppet Apps. Start your free trial today!


To read the full article, please visit The Daily WTF

Monday, October 23, 2017

How Commercial Is Halloween?

The days of innocent, cosy holidays are long gone, they’re all commercial vehicles now–or aren’t they?

The post How Commercial Is Halloween? appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

The New York Subway Is Crazy

Firsthand stories on the crazy things that happen in the New York subway.

The post The New York Subway Is Crazy appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Representative Line: Secure Login

“I logged into the admin app.”

Julie’s boss had the username and password for the admin app, so that wasn’t too surprising.

“With my regular username and password,” her boss added.

That was a bit more of a problem. The app in question was an internal, home-grown CMS. The admin portion of it was secured by a single username/password combo, controlled by a config file. It wasn’t the most secure thing on Earth, but it should at least be secure enough that you needed to supply the correct values.

Julie checked the code, and found that wasn’t the case:

if (inputLogin.Length == configFileLogin.Length && inputPassword.Length == configFilePassword.Length)
{
    return true;
}

[Advertisement] Manage IT infrastructure as code across all environments with Puppet. Puppet Enterprise now offers more control and insight, with role-based access control, activity logging and all-new Puppet Apps. Start your free trial today!


To read the full article, please visit The Daily WTF

Sunday, October 22, 2017

The Human Face Puppet

Pretty cool project by this funny dude!

The post The Human Face Puppet appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Saturday, October 21, 2017

Kids Describe Scary Monsters

But will the drawing be just as scary??

The post Kids Describe Scary Monsters appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

The Cutest Skinny Pig Ever

I’m usually not the biggest skinny pig fan, but this one has a special place in my heart!

The post The Cutest Skinny Pig Ever appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Friday, October 20, 2017

Name One Thing Funnier Than People Failing

That’s right, it doesn’t get funnier than this.

The post Name One Thing Funnier Than People Failing appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Error'd: Legitimate Links

"Swedish...Russian...English....same difference!" wrote Fred.

 

Scott P. writes, "I had 6 right and 5 wrong on this online quiz, but apparently I did better than that, getting '10 out of correct'."

 

"I had to accept information while trying to modify a booking through the official Iberia Airlines app," Mario writes.

 

Ben S. wrote, "YouTube would like to... umm... do a sorta complicated thing, is that OK?

 

"So, do I follow the text box or do I follow the suggestion?" writes Chuk G.

 

Adam S. writes, "Do I smoke? ...Maybe?"

 

[Advertisement] Infrastructure as Code built from the start with first-class Windows functionality and an intuitive, visual user interface. Download Otter today!


To read the full article, please visit The Daily WTF

Orphaned Elephant Won’t Share Bottle With Giraffe Pal

Once in an orphan you have to make sure to get your fair share.

The post Orphaned Elephant Won’t Share Bottle With Giraffe Pal appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Thursday, October 19, 2017

Crazy Lion Plays Fetch Like a Dog

I know a lot of dogs who want to be lions, but the other way around?! That’s a first!

The post Crazy Lion Plays Fetch Like a Dog appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Guilty Dog Tears Up Feather Pillow

He knows it’s not allowed, but is just so much FUN!

The post Guilty Dog Tears Up Feather Pillow appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

CodeSOD: Abstract Test Case

A great many breakfast cereals promise some sort of health benefit. This brand is good for your heart, that brand has 11 essential vitamins and minerals. This one’s got bran! Just because there’s a promise of health benefits doesn’t mean they actually exist- most of these cereals are lightly fluffed sugar held together with a smidge of starch.

Object-oriented languages promise a lot of code-health benefits, and used properly, they can certainly deliver. In this somewhat tortured metaphor, the Lucky Charms marshmallow of OO features is Inheritance. It’s tasty, it’s easy to explain, but it’s not really good for your code. A little bit, here-and-there, from time-to-time is great. But some folks buy the three pound bag and that’s just not good for anybody.

Daniel took over some code left behind by a retiring co-worker. The code was seeded through with abstract classes- though, because this was Python, “abstract” was more of a convention than a statement of fact. This predecessor took abstraction to its “logical” conclusion, and when testing abstract classes, they wrote abstract tests:

class TestAbstractDriver(unittest.TestCase):

    """Test case docstring."""

    def test_name(self):
        pass # for those not familiar with Python,
            # "pass" is how you write a method with no implementation

This code was followed by AbstractDriverTest, which inherited from TestAbstractDriver and actually implemented the test.

[Advertisement] Universal Package Manager – store all your Maven, NuGet, Chocolatey, npm, Bower, TFS, TeamCity, Jenkins packages in one central location. Learn more today!


To read the full article, please visit The Daily WTF

Wednesday, October 18, 2017

Ever Tried A Durian?

It’s smell is quite… peculiar. As these fine folks find out.

The post Ever Tried A Durian? appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

Atlas And Orion Are Two Cute Sibling

Have you ever seen anything cuter than this?

The post Atlas And Orion Are Two Cute Sibling appeared first on Viral Viral Videos.



To read the full article, please visit Viral Viral Videos

The Official Software

At the very beginning of my career, I was a junior programmer on a team that developed software to control an electronics test station, used to diagnose problems with assorted components of jet fighters. Part of my job was the requisite grunt work of doing the build, which entailed a compile-script, and the very manual procedure of putting all the necessary stuff onto a boot-loader tape to be used to build the 24 inch distribution disk arrays.

An unspooled magnetic tape for data storagesource

This procedure ran painfully slowly; it took about 11 hours to dump a little more than 2 MB from the tape onto the target disk, and nobody could tell me why. All they knew was that the official software had to be used to load the bootstrap routine, and then the file dumps.

After killing 11 hour days with the machine for several months, I had had it; I didn't get my MS to babysit some machine. I tracked down the source to the boot loader software, learned the assembly language in which it was written and slogged through it to find the problem.

The cause was that it was checking for 13 devices that could theoretically be hooked up to the system, only one of which could actually be plugged in at any given time. The remaining checks simply timed out. Compounding that was the code that copied the files from the tape to the disk. It was your basic poorly written file copy routine that we all learn not to do in CS-102:

    // pseudo code
    for each byte in the file
        read next byte from tape
        write one byte to disk
        flush

Naturally, this made for lots of unnecessary platter-rotation; even at over 3,000 RPM, it took many hours to copy a couple MB from tape to the disk.

I took a copy of the source, changed the device scanning routine to always scan for the device we used first, and skip the others, and do a much more efficient full-buffer-at-a-time data write. This shortened the procedure to a very tolerable few minutes. The correctness was verified by building one disk using each boot loader and comparing them, bit by bit.

Officially, I was not allowed to use this tape because it wasn't sanctioned software, but my boss looked the other way because it saved a lot of time.

This worked without a hitch for two years, until my boss left the company and another guy was put in charge of my team.

The first thing he did was confiscate and delete my version of the software, insisting that we use only the official version. At that time, our first kid was ready to arrive, and I really didn't want to stay several hours late twice a week for no good reason. Given the choice of helping take care of my wife/kid or babysitting an artificially slow process, I chose to change jobs.

That manager forced the next guy to use the official software for the next seven years, until the company went out of business.

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!


To read the full article, please visit The Daily WTF