-Поиск по дневнику

Поиск сообщений в rss_thedaily_wtf

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 06.04.2008
Записей:
Комментариев:
Написано: 0

The Daily WTF





Curious Perversions in Information Technology


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://thedailywtf.com/.
Данный дневник сформирован из открытого RSS-источника по адресу http://syndication.thedailywtf.com/thedailywtf, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

CodeSOD: Patterned After Success

Четверг, 23 Июля 2015 г. 13:30 + в цитатник

Design patterns are more than just useless interview questions that waste everyones time and annoy developers. Theyre also a set of approaches to solving common software problems, while at the same time, being a great way to introduce new problems, but enough about Spring.

For those of us that really want global variables back in our object oriented languages, the Singleton pattern is our go-to approach. Since its the easiest design pattern to understand and implement, those new to design patterns tend to throw it in everywhere, whether or not it fits.

Andres once worked with a developer who not only was new and enthusiastic about design patterns, but didnt actually understand how to implement the Singleton pattern. Which is why Andres was getting null reference exceptions when trying to get an instance from this singleton.

   public class SingletonSmtpClient
    {
        private static SmtpClient _smtpClient;

        public SingletonSmtpClient(string host, string user, string password, bool ssl)
        {
            if (_smtpClient == null)
            {
                _smtpClient = new SmtpClient();
                _smtpClient.Credentials = new System.Net.NetworkCredential(user, password);
                _smtpClient.EnableSsl = ssl;
                _smtpClient.Host = host;
            }
        }

        public static SmtpClient getInstance()
        {
                return _smtpClient;
        }
    }



[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!

http://thedailywtf.com/articles/patterned-after-success


Метки:  

Finding Closure

Среда, 22 Июля 2015 г. 13:30 + в цитатник

Jims mail client dinged and announced a new message with the subject, Assigned to you: TICKET #8271. Not this again, he muttered.

Ticket #8271 was ancient. For over a year now, Initechs employees had tossed the ticket around like kids playing hot potato. Due to general incompetence and rigid management policies, it never got fixed.

Jim was the GUI developer for their desktop application, InitechWORKS. The app used a web browser widget to display content from the companys web page within the application, mostly for marketing fluff. The bug itself was a tracking pixel which occasionally failed to load, and when it did the browser widget replaced the pixel with a large, unsightly error icon. Both the web page and the tracking pixel came from Marketings web server.

Time after time, ticket #8271 landed in some luckless developers hands. They each tacked on a note, saying there was nothing wrong with InitechWORKS, and forwarded the ticket to marketing. And time after time, Marketing punted the ticket with a note saying, Cant reproduce, must be an issue with InitechWORKS, re-assigning.

And so, once again, Jim decided to talk to the project manager, a middle-aged man named Greg with the memory retention of a dying goldfish and a management style with all the flexibility of a beryllium rod three feet in diameter.

Greg, I was looking at ticket #8271. I know Marketing wont fix this bug, but I have a quick fix to suggest-

Greg had no idea what ticket Jim was talking about, but he didnt need to. His flexible management policy came into play. Per company policy and the org chart, the InitechWORKS team cannot talk to Marketing.

But they need to fix something on their end! Jim nearly shouted, hoping to get the full sentence out before Greg interrupted him.

With a sigh, Greg pulled up the ticket. His mouth moved as he read it to himself. See here, Marketing says the issue is with InitechWORKS, not Marketing.

But theyre wrong. Its definitely not-

Marketing is never wrong, Greg said with a cold stare. Now, go fix this bug.

Jim walked away, dejected. He knew Greg wouldnt remember this conversation the next time ticket #8271 came up.

Jim couldnt assign the ticket to Marketing, but he added his suggested quick-fix along with the note, Problem is with the web page, not InitechWORKS, and moved the ticket to Greg.

Later that day, Greg approached Jim at his desk. Jim, about ticket number…. He paused to glance down at his notepad. … number 8271. I passed it over to Marketing, but theres a problem. Greg lowered his voice and became indignant. I had to delete your comments and fixes. We cant presume to tell Marketing how to do their job.

Jim mentally facepalmed. His plan had failed. But its a si-

Theyre smart guys, and Im sure theyll fix it, Greg interrupted. You do your job, and let Marketing do theirs, and we wont have to get HR involved with a formal reprimand.

Two weeks later, Jims mail client dinged. Assigned to you: TICKET #8271 was on the subject line. He groaned, and started planning how he was going to approach the issue this time. When he went to Gregs office, the project manager was nowhere to be seen.

Have you seen Greg? he asked the PM in the neighboring office.

Oh, didnt you hear? He quit this morning. HR refused to discipline one of his employees, so he quit on the spot. Said something about the company refusing to follow their own policies. And now Im inheriting a lot of his projects, so if you dont mind… The PM went back to work, silently ignoring Jim.

Jim glanced back into Gregs office and noticed that Gregs PC was unlocked and logged in. On a whim, he sat down at the computer. As a PM, Greg had special privileges, like the ability to disable the automatic computer locking, and access to pretty much any system in the company. That included Marketings production web server.

With a little poking around, Jim found the problematic web page and its tracking pixel. He quickly implemented the quick fix hed suggested earlier, simply styling the image to be zero pixels and located 10,000 pixels off the edge of the screen. That wouldnt fix the loading issues, but when it misbehaved, the ugly error would stay off-screen and not hurt the page.

He slipped out of Gregs office. Gregs neighbor didnt even notice him as he walked by. When Jim returned to his desk, he could no longer reproduce the issue. After a painfully long eighteen months, he marked ticket #8271 as closed.

[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!

http://thedailywtf.com/articles/finding-closure


Метки:  

CodeSOD: The New Zero

Вторник, 21 Июля 2015 г. 13:30 + в цитатник

If Alice needed to rate her co-workers, on a scale of 110, whoever wrote this is a zero. The goal here is to create a new string that is 4096 characters long and contains only zeros. This was the best approach Alices co-worker found:

string s = new String("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");

Alice replaced that line with this one:

string s = new String("0", 4096); 
[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!

http://thedailywtf.com/articles/the-new-zero


Метки:  

Brillance is in the Eye of the Beholder

Понедельник, 20 Июля 2015 г. 13:30 + в цитатник

E-commerce just doesnt have the ring it once did. The best-qualified hackers in the world used to fall all over themselves to work on the next Amazon or eBay, but now? A job maintaining the back-end of an online store isnt likely to lure this generations rockstar ninja coderz, which explains why Inicart ended up hiring Jay.

As far as Colleen could tell, her boss had been trying to add a developer to their team for at least a year. Scott was always on his way to interviews, second interviews, phone screens, and follow-up Skype calls& but summer turned to autumn turned to Christmas, and Inicarts dev team returned from the holidays to find only their waistbands had increased in size. But then came the day Colleen walked in to find the long-empty cubicle next to hers brimming with a brand-new task chair and workstation. She ran down the hall.

Scott!

Morning, Colleen. The team lead was leaning back in his chair with the grin of a satisfied hiring manager.

So you& you found someone?

Thats right.

And theyre& good?

Right again. Hes very good.

Colleen didnt know what to say.

He starts next Monday, Scott said. You guys should get ready to do some onboarding.

Colleen flipped a mock salute, and scampered off to do just that. A new developer! This was huge: Colleen and her team might finally be able to take a break from fixing bugs and actually deliver a new feature!

With all due respect to Scotts hiring prowess, it wasnt immediately obvious to Colleen what hed seen in Jay. The new developer was sociable enough, joining the team at their various outings, but he wasnt big on eye contact, and tended to wander around whatever point he was making until you just lost interest. Colleen didnt want to write Jay off on his social skills alone, however; they needed someone to fix bugs, and pretty soon he was doing just that.

Week three was when Colleen started to worry. Jay was tearing through the bug backlog, but, for a developer new to the team, the company, and the codebase, he asked very few questions. That is to say, no questions. Not wanting to be unreasonable, Colleen confirmed that her teammates were also concerned.

She brought those concerns to Scott. I mean, Ive been on this project for years, and I have questions.

Well, he is very good. He interviewed at Google, you know, Scott said. If youre worried, though, maybe you could do a code review?

Like everything else about Jay, his changes seemed fine at first glance. His taste in variable names tended towards the unusual- booThu stuck in Colleens mind as one example (an abortive attempt to summon the Great Codethulhu?)- but Jay seemed to know more or less what he was doing. Then they found Jays proclivity for write-only properties. A bunch of classes had sprouted these strange properties, properties whose value couldnt be accessed, properties that did weird things to the classes internal state, more like they were a function call than a property- it was like Jay had never learned about void methods.

When challenged, Jay said, Well, when I interviewed at Google, they thought that was a really clever design choice. Of course, Jay may have interviewed at Google, but according to his resume, he never worked there.

As the checkins piled up and the team dug deeper, worry turned into alarm. Large sections of code had vanished from the codebase. According to Jays checkin comments, the swaths hed erased were inefficient and useless. Colleen would have been willing to argue the point about efficiency, but the missing code was better described as handling rare but important corner cases in shopping cart processing.

Jay was obstinate when questioned about his unusual coding style. Im writing compiler-efficient code, he cried. If you dont understand how the compiler turns your code into machine instructions, youre never going to write an efficient program! Thats why Ive been cleaning up your code.

The outburst that ensured Jay a place in Inicart legend forevermore took place when, in the wake of The Case of the Missing Corner-Case Code, Scott told Jay they were letting him go. After security had shown the raving developer out of the building, Scott let the team in on their final conversation.

I told him, Im sorry, Jay, but we have to let you go, Scott said.

You cant do that! Jay had replied. Im brilliant!

Scott had been so taken aback by this assertion that hed been unable to stop himself from saying Uh, no! Youre not!

Scott admitted this hadnt been his most-professional moment. But the rest of the team forgave him: from then on, Colleen and co. had a new catchphrase whenever a teammate found a bug in their code.

[Advertisement] BuildMaster is more than just an automation tool: it brings together the people, process, and practices that allow teams to deliver software rapidly, reliably, and responsibly. And it's incredibly easy to get started; download now and use the built-in tutorials and wizards to get your builds and/or deploys automated!

http://thedailywtf.com/articles/brillance-is-in-the-eye-of-the-beholder


Метки:  

Error'd: Error Version 16

Пятница, 17 Июля 2015 г. 13:00 + в цитатник

"I was filling out a survey for PayPal when this message popped up to let me know that I am at a testing stage," Ishai S. writes.

"Apparently CAPTCHAs now come in postmodern surrealist flavor," writes Ian S.

"So, let me get this straight," wrote Luke H., "I am allowed to install VMware ESXi Free on as many physical machines as I like, just as long as I don't install it on any physical machines."

Connor wrote, "Home Depot is good at installing new roofs...but not at installing genuine copies of Windows."

"The error was alright, but what was REALLY amusing was that one of the players tried to hit the close icon as if it was a tablet," writes Garry M.

"While trying to upgrade Ubuntu, the upgrader broke and rebooted to show me this," Nick wrote.

Helen B. wrote, "No wonder my internet has been a little slow, although surely if I did actually live somewhere off the coast of Africa, they could find an exchange a little nearer?"

"Thank goodness Lloyds TSB's site obfuscates their phone numbers," James writes.

[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!

http://thedailywtf.com/articles/error-version-16


Метки:  

Bonus WTF: 5:22

Четверг, 16 Июля 2015 г. 20:00 + в цитатник

No, it isn't an extended cut of a John Cage song, it's a new feature article that we put together- but you can't read it here, you can only read it over at our sponsor site: 5:22.

Special thanks to Infragistics, for helping support TDWTF.

Infragistics

A worldwide leader in user experience, Infragistics helps developers build amazing applications. More than a million developers trust Infragistics for enterprise-ready user interface toolsets that deliver high-performance applications for Web, Windows and mobile applications. Their Indigo Studio is a design tool for rapid, interactive prototyping.

[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!

http://thedailywtf.com/articles/bonus-wtf-5-22


Метки:  

Announcements: Experience Your Own Support Stories at Inedo

Четверг, 16 Июля 2015 г. 18:30 + в цитатник

Support stories have always been among some of my favorite. Not enough links for you? Here, I'll just share my favorite favorite: Radio WTF Presents: Quantity of Service.

It's not so much the sense of smug superiority that comes with diagnosing ID-10t and PEBCAK errors, but more a sense of appreciation. I've been there — my first grown-up job was on a helpdesk — and to this day I still handle a fair bit of BuildMaster and ProGet support inquiries. And actually, that's why I'm writing this message today.

We've been growing a bit at Inedo this past year, and there was a position / job opportunity that I wanted to share with you: Support Analyst. This is not a typical helpdesk role by any means. Actually, it's a blend of roles — support, service, technical writing, and development — and since we're a small team, we'll all be working on doing all of these things together.

But I thought the most interesting part about this opportunity is the Developer Growth Opportunity. From the posting:

Most of the developers on our team started their career in a helpdesk/support role, either in college or as their first job. We'll gladly help you make the transition from support to development through our Developer Apprenticeship Program. If you are interested in pursuing this route, we will spend a significant amount of time working with you to rapidly increase your software development proficiency; through our mentorship, you could reach an expert/mastery level in a very short time (what would take most developers ten+ years), but it will require a lot of dedication and a lot of a hard work. This experience will also be helpful in the short-term: learning the code is crucial to understanding how our software behaves under certain conditions.

As you all know, either from first hand experience or reading an Tales from the Interview, it's nearly impossible to find great developers... especially in our fine city. But we can help make great developers.

Anyway, that's all. If you, or someone you know might be a good fit, please consider getting in touch!

[Advertisement] Scout is the best way to monitor your critical server infrastructure. With over 90 open source plugins, robust alerting, beautiful dashboards and a 5 minute install - Scout saves youvaluable engineering time. Try the server monitoring you'll M today.Your first 30 days are free on us. Learn more at Scout.

http://thedailywtf.com/articles/experience-your-own-support-stories-at-inedo


Метки:  

Representative Line: Truely Representative

Четверг, 16 Июля 2015 г. 13:30 + в цитатник

Theres bad code, and then theres code so bad that you only need to see one line of code to understand how bad it actually is. Simon supplied this tiny horror which manages to combine all thats wrong with PHP with the worst of loose typing and a thick layer of not really understanding what youre doing.

$dtRecord->setProcessing((boolean)'true');
Korean Traffic sign (Pass Left or Right)

PHP is a terrible language, but its not so terrible that it doesnt have a boolean type. Its perfectly happy to mangle juggle your types, and for that reason, it actually discourages the use of any sort of type casting.

Yes, by PHP standards, casting types is an anti-pattern, but thats not why this is as much of a WTF as it is.

PHP lets you use anything as a boolean, and follows the same general conventions as other type-mangling languages- the integer 0, the floating point value 0.0, an empty string (or the string 0) are all false.

So, now were stacking up the WTFs- the original programmer could have just passed TRUE, instead of true, but really, it didnt matter what they passed, so this line probably would have made just as much sense:

$dtRecord->setProcessing((boolean)'WTF');

I fortunately dont work with PHP, so I had to do a little fact checking to verify that this line was as stupid as I suspected it was, and that meant reading up on PHPs handling of booleans and their odd results. At the risk of picking on PHP, while I wanted to understand how it did booleans, I discovered that it has two different boolean operators- OR and ||, which isnt a WTF, and that they have totally different orders of operation.

As a result, you run into weird cases like this:

$x=TRUE;
$y=FALSE;
$z= $y OR $x;

$z is false at the end of that expression, because the assignment is actually evaluated before the OR. Essentially, the final line is actually:

($z=$y) OR $x;

The || operator works like a normal person would expect it to.



[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!

http://thedailywtf.com/articles/truely-representative


Метки:  

The Batman

Среда, 15 Июля 2015 г. 13:30 + в цитатник
    Na, na, na, na, na, na, na, na, 
    Na, na, na, na, na, na, na, na, 
    Na, na, na, na, na, na, na, na, 
    Batman!

We've all heard it. Some of us even grew up when it was first aired on TV. Be honest, who among us, hasn't experienced just a little bump in cardiac rate when the Batmobile fired up?

It's pretty much a given that when The Batman gets involved, bad things will usually be made better.

Usually.

S. K. was a developer at Gotham-Dev, Inc. They were doing work for an event-management client located in Gotham City in the U.S. The client had an in-house programmer who called himself The Batman because he had a propensity to swoop down upon and make all sorts of problems better.

One day, The Batman decided that all developers should create an entire branch for each and every bug/feature/issue, no matter how small it was. This way, each change could be coded in and of itself, and without interference from changes made for other issues. He proposed this up the chain, and received the corporate blessing to impose this new policy as law.

As a contractor, S.K.'s team of 12 developers had to comply, and so started creating separate branches for every little work task. After an entire week of this, there were 50+ new branches, and counting. While this may seem excessive to some, it didn't matter to the developers as their changes could be made in isolation. It was the responsibility of The Batman to merge those 50+ branches and deploy the whole thing on the test environment. After several hours of merge-hell, The Batman sent the following email:

   From:    The Batman <bwayne@eventmgmt.com>
   Date:    Fri, Jun 13, 2014 at 12:02 PM
   Subject: Bam! Process improvement!
   To:      Dev-Team <myminions@gothamdev.com>

   To cut down on confusion and working space issues, I've created a new space and 
   protocol on our devops server just for QA operations. For instance, this week's 
   Dashboard release lives at:

       http://qa.eventmgmt.com/dashboard/release/2014-06-13 

   Individual branches will be installed for testing, like so:

       http://qa.eventmgmt.com/dashboard/branch/BUG-2134

   The only time when it's acceptable to edit code in a QA instance is when you 
   are making last-minute, pre-release changes. When this is necessary, please 
   only do so with QA's knowledge and understanding.

   Please let me know if you have any questions/comments/concerns.
   
   -The Batman-

Ok, so The Batman has to restructure the QA and bug branch directory layout. While daunting, it didn't really affect the developers, and in fact, it only really affected QA. A short time later, The Batman sent another email:

   From:    The Batman <bwayne@eventmgmt.com>
   Date:    Fri, Jun 13, 2014 at 4:18 PM
   Subject: Thwap! Process improvement!
   To:      Dev-Team <myminions@gothamdev.com>

   I will be moving public site release candidates to the same system as soon as 
   possible. Currently the public codebase makes some hard assumptions about URL
   and path structure which requires the site be installed to /home/username/dir 
   - deeper URL structures cause problems. Once these auto-config issues are solved 
   we'll have all our releases under this process - in the interim I will continue 
   pushing front-end releases to dev-w.

   Please let me know if you have any questions/comments/concerns.
   
   -The Batman-

Again, this also seemed harmless as a few minor code changes were required to eliminate the old assumptions about the old path structure and replace them with new assumptions about the new path structure. The developers were not worried. Shortly thereafter, The Batman swooped in with yet another email:

   From:    The Batman <bwayne@eventmgmt.com>
   Date:    Fri, Jun 13, 2014 at 10:47 PM
   Subject: Sok! Process improvement!
   To:      Dev-Team <myminions@gothamdev.com>

   Regarding databases for these installs: we've had problems in the past where 
   using the test database allowed a branch to go live with database scripts 
   which did not work. In many cases the database scripts specifically named the 
   test database, so in an effort to prevent these "gotchas" I am currently using 
   an entire database for each release.

   On the upside, this means up-to-date test data in the release candidates.

   
   -The Batman-

Ok, so then there were countless database instances to go with countless branches in both development and QA.

But the development staff need not fear all of these issues because The Batman was here!

I think The Joker might have viewed The Batman's actions as impinging upon his domain!

[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!

http://thedailywtf.com/articles/the-batman


Метки:  

CodeSOD: Pointerrific

Вторник, 14 Июля 2015 г. 13:30 + в цитатник

Rusted chain

Working with a legacy codebase is like embarking on an archaeological expedition to a foreign land: you never know what ancient artifacts you're going to uncover. Will it be the mighty fast inverse square root? The rusty yet still operational Duff's device? An old COBOL module forgotten by time, quietly holding the universe together?

Unfortunately for Matteo I., his escapade wasn't nearly as fruitful. Digging through the muddy codebase, all he found were horrible C++ and linked lists. Lots and lots and lots of linked lists.

Now, the thing about linked lists is that they didn't age very well. Back when processors were less smart and locality wasn't an issue, they were a reasonable trade-off—but as technology marched on, new data structures were invented, and processor caches grew, the drawbacks started to overshadow the benefits. And so, they were relegated to college textbooks and old programmers' tales.

Still, in the hands of a skilled programmer, those outmoded structures could still be made to perform well. Judging by the code below, however, "skilled programmers" were not a resource Matteo’s predecessors had in abundance...

REP:
 for (P = PPfirst; P != NULL; P = P->next) {
     if (some_condition(P)) {
         // ...
         PPLinkElem *PL;
         if (P == PPfirst) {
             PPfirst = P->next;
             delete P;
             goto REP;
         } else {
             for (PL = PPfirst; PL != NULL && PL->next != P; PL = PL->next);
             if (PL == NULL || PL->next != P) {
                 DIE("Error in ...");
                 return 0;
             }
             PL->next = P->next;
             delete P;
             goto REP;
         }
     }
 }

According to our submitter, this code is supposed to remove elements from a list based on some_condition(). Normally, that's where linked lists shine. Removing a single element is a simple, constant-time operation, so filtering the whole list is barely O(n)—as opposed to O(n2) in case of an array. So, let's see whether the original programmer was up to the task.

The procedure begins innocently enough, with a standard traversal loop. When the condition is met, we first check if we're on the first element, and if so, we fix the start pointer, deallocate the element... then jump back to the very beginning of the loop. It's certainly an awkward way to handle that special case, and I'm sure that goto made a few people twitch, but so far no points are deducted. We’re still in the linear complexity bracket.

In the other branch, however, things get a little more heated. To remove an element from the middle of a list, we need to have the node before it point to the node after it, effectively bypassing the removed one. But it turns out we don't know where the previous node is, since we forgot to store its location! So we get to walk through the whole list all over again and search for it, which means we've brought our performance down by a notch.

Then, in a show of defensive programming, we protect ourselves from cosmic rays by checking if the previous element was actually found in the list. If not, the program crashes and returns a success code to the OS, like any good crashing program should. But if we're lucky enough to find our previous node, we can then filter the element out... and then go back to the very beginning, starting the filtering from scratch.

For those keeping score at home, the grand total is O(n3). The implementation is not only worse than it should be, but it also takes one of the very few aspects in which linked lists can be better than arrays and turns it into a crippling disadvantage.

Unfortunately, aside from the horrible performance, the code does work—so it ended up copied, pasted and peppered all over the 160kLOC codebase. We just wish we could send Matteo a bigger shovel to dig through all this dirt.

[Advertisement] BuildMaster is more than just an automation tool: it brings together the people, process, and practices that allow teams to deliver software rapidly, reliably, and responsibly. And it's incredibly easy to get started; download now and use the built-in tutorials and wizards to get your builds and/or deploys automated!

http://thedailywtf.com/articles/pointerrific


Метки:  

Loafing Around

Понедельник, 13 Июля 2015 г. 13:30 + в цитатник

Sliced bread bag2

Dateline: Friday, 1:00pm

"Sir? Ah... where are all the helpdesk techs?"

Andrew glanced at the clock before answering Tani the Intern. A year ago, he'd have said they were at lunch, and likely would be until 3:00, but that was before Helga got assigned as the Helpdesk Manager. She ran a tight ship; they'd have to be working an emergency to all be gone at the same time these days.

Andrew pulled up the helpdesk ticket queue, looking for the source of the disturbance. Usually he'd know if there was an outage of some kind, but it was possible it was some esoteric system that had failed. Still, nothing in the queue looked important enough to occupy all four helpdesk operators at once.

What the hell, thought Andrew to himself, as he locked his PC. It's a slow day, let's have an adventure. "I don't know. Let's go find out."


Dateline: Friday, 1:30 pm

"They are definitely not hiding under their desks, sir!" One thing he had to hand to Tani, she was thorough. Not particularly bright, but thorough.

"You tried the lunch room?" Andrew asked.

"Tried there first. And the lounge, and the smoker's deck out back."

"And I tried the restroom," added Andrew, "which means we only have one option left: it's time to head upstairs."

"Upstairs?!" squeaked Tani. "But sir, I've never been up there!"

"The upper floors are just like our basement," he lied, hoping to put her at ease. In truth, they tried to avoid taking the interns upstairs if they could help it; it was best not to show them what they were giving up by choosing a career in IT over something more lucrative in business. Still, with four techs missing at once, there was little recourse but to search the building thoroughly.


Dateline: Friday, 2:00 pm

It was easy to forget how strange and mystical the upper floors felt to those in the IT dungeon. Where in the basement there was the dim light of fluorescent bulbs year-round, upstairs it was high summer, and some strange form of wide-spectrum white lighting was pouring into the room through glass panels flush with the exterior of the building. Where in the basement the interior walls were grey and flimsy, here they were white and sturdier, often decorated with artwork. And, most importantly, while in the basement they had only a small lounge with a brown-down sofa, upstairs they had several cozy meeting spaces with crisp, modern-looking seating.

"Sir... have we died?"

"No, Tani. This is the fabled Upstairs."

"It's so... bright!"

Andrew nodded in agreement, canvassing the space before them. It was so different than their homeland, so strange and unnerving. How would he find clues here? How would—

Just then, one of the missing techs exited a conference room down the hallway from their location. Andrew burst into action, hailing him as he jogged to catch up. "Oi, Steve!"

Steve slowed, turning to wave to Andrew. "Hey! Come to join in the search?"

"The search for the missing techs?" he asked, slowly.

"Nah, the bread!" Seeing Andrew's confused expression, he pulled out a folded printout from his pocket, showing it to Andrew.

It was a helpdesk ticket. Andrew's confusion gave way to shock and disbelief as he read the case description aloud for Tani's benefit:

"'Urgent... high priority... someone has stolen the bread I was planning to eat for lunch. I must have it returned immediately.'" Andrew looked up at Steve, stunned. "First of all, some idiot logged an IT helpdesk ticket for this? Second, Helga has all four of you hunting for a loaf of bread?!"

"Not just any idiot—and not just any loaf of bread," Steve replied. "Richard Milton's loaf of bread."

Andrew's jaw hit the floor. "Steve... Dick Milton's the head of the Canadian operation."

Steve nodded. "So you see why it's super important we get to the bottom of this, pronto."

Andrew cradled his face in his palm. "Steve, he works in Canada! In the Canadian HQ! The missing bread is probably in Canada too!"

"Sure, sure," replied Steve, smiling benignly. "But I'm here. So I figured I'd search where I could."


Dateline: Friday, 2:15 pm

"So what did we learn today?" asked Andrew, flippantly, as he and Tani returned safely to their basement home.

"Steve's an idiot, sir."

Maybe Tani was brighter than she seemed.

[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!

http://thedailywtf.com/articles/loafing-around


Метки:  

Mandatory Fun Day: Classic WTF: Mandatory Fun

Пятница, 10 Июля 2015 г. 13:30 + в цитатник
It's hard to believe that it's been 7 years since the last installments of MFD. Mark's been too busy doing art for things like Release! to waste his artistic talents here with us. From back in 2008, I've grabbed a few of my personal favorites from the old MFD days. --Remy



I'm a sucker for terrible puns, so I love these. But, if you scroll back through the comments on those old articles (back in Community Server!), some of our readers had a slightly different attitude. This Viking lays out our editorial stance on that!

[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!

http://thedailywtf.com/articles/classic-wtf-mandatory-fun


Метки:  

CodeSOD: Classic WTF: XML Abuse

Четверг, 09 Июля 2015 г. 13:30 + в цитатник

Is it still trendy to hate on XML? Of course it is! But this WTF would still be a WTF if it were built in JSON, because this is terrible.

This classic comes from 2008, but finding WTFs in XML knows no decade. - Remy

"Where I work we keep a lot of data stored in XML files," Ben writes. "They're not your average XML files, though — they're special." His colleague invented the following technique (recommended for senior level XML programmers only).


   110
   442 Fake St.
   61 Main St.
   ...
   3881 N 4th Ave. #5D

Ben adds, "Of course this means that an XSD schema is absolutely impossible to define."

[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!

http://thedailywtf.com/articles/classic-wtf-xml-abuse


Метки:  

Classic WTF: A Temporary Problem

Среда, 08 Июля 2015 г. 13:30 + в цитатник
This classic is a perfect example of what happens when you outsource IT functions. You get some short-term, temporary gains, but you'll always lose in the long run.

This one originally ran back in 2014, but it's already a classic. - Remy

Andy Dahl had suffered his share of delays at the hands of the NonLocal HelpDesk, but usually they were simply a matter of insurmountable language barriers or inexplicable delays. Today the threat was somewhat more sinister...

HelpDesk, NonLocal [14:13]: 
regarding your computer slowness issue
share the screen

**SCREEN SHARING INITIATED BY Dahl, Andy** [14:14]

HelpDesk, NonLocal [14:17]: 
give me control 

**SCREEN CONTROL INITIATED BY Dahl, Andy** [14:18] 

Dahl, Andy [14:23]: 
S%Topt
S%TOP
%

**SCREEN CONTROL TERMINATED BY Dahl, Andy** [14:23]

HelpDesk, NonLocal [14:24]: 
do shift+ delete
i am unable to do it form here

Dahl, Andy [14:25]: 
what are you trying to delete?

HelpDesk, NonLocal [14:25]: 
its a temporary files

Dahl, Andy [14:25]: 
You can't delete all those files you selected.
They are not all temp files.

HelpDesk, NonLocal [14:26]: 
they are

Dahl, Andy [14:26]: 
No. They are not all temp files. Just because something has the letters 'temp' in it does NOT mean it is a temp file.
MasterOrderTemplate.xml, CoreTemperatureController.cpp, and UpdateTemporaryJobPostings.SQL are resource that I NEED. They are NOT temp files.

HelpDesk, NonLocal [14:27]: 
while we run this search
(.*temp.*)
we will get only the temp files

Dahl, Andy [14:27]: 
No. You will get every file that has the letters 'temp' in the file name. Not all of those are temp files.

HelpDesk, NonLocal [14:27]: 
No
not like that
what happens is temp files are system generated it should not be the original file that you have on the folders in order to resolve the issue i need to delete it even the next level will do the same

Dahl, Andy [14:30]: 
With all due respect, I'm sorry but I can't allow you to delete those files. Not all of them are temp files.

HelpDesk, NonLocal [14:30]: 
alright
i will assign this ticket to next level

Disaster averted, Andy finally took the bathroom break he had fortunately postponed during the beginning of the screen control session.

[Advertisement] BuildMaster is more than just an automation tool: it brings together the people, process, and practices that allow teams to deliver software rapidly, reliably, and responsibly. And it's incredibly easy to get started; download now and use the built-in tutorials and wizards to get your builds and/or deploys automated!

http://thedailywtf.com/articles/classic-wtf-a-temporary-problem


Метки:  

Tales from the Interview: Classic WTF: Trouble With Founders, the Lost Candidate, and More

Вторник, 07 Июля 2015 г. 13:30 + в цитатник
I think Tales from the Interview are always a special treat, in part because we don't run them very often. It may also be because at my last job, I was notorious for once making a candidate cry and have a panic attack, but I'm an incredibly nice interviewer! I swear!

Enjoy this veritable smorgasbord of terrifying interviews from 2012. - Remy

Trouble with Founders (from Ben C.)
A few of my friends (all CS people) were attending a startup mixer hosted at a little airport near our university. At one point, we all got kind of bored of talking with everyone, so we stepped outside to look at the planes. Soon enough, some business people in suits noticed the nerds talking outside so slowly started approaching.

They started talking with us, trying not to be too obvious about their intents. They asked where we were from and we told them our college. We asked what brought them here, and they said they were starting a company. We asked what it was for and they responded "Data Analytics". At this point, we were a little curious, so we tried to get some more information, and then they gave us their wonderful pitch.

"Ok so you know Star Trek?"

"Yes." most of us replied - after all, this was a group of CS geeks after all.

One of the suits laughed, "Heh. Great! Ok, so imagine you're Kirk, you turn to Spock, your technology officer and tell him, Spock, we've got a problem with the warp drive! And then Spock will plug data into his machine and tell you what's wrong. That's what we want our machine to do. It's going to like Siri but for data analytics."

Then, the other suit piped up, "Ok, here's the kicker: it's going to be agile coded, entirely in HTML5!"

At this point, my friends and I started glancing at each other, trying to keep it together.

One friend in the group decided to ask another question, "So, are you guys technical?"

"Oh no man, we're dreamers, we're entirely conceptual, although my friend here(One co-founder points to the other), he's much more technical than I am."

At this point, the technical fellow seems to want to show that he knows how to talk to us nerds.

"So ya, it's entirely in HTML5, all in the cloud, except, one thing I want to do, I want to kill this whole cloud thing, it's all just a network of computers, it's been around for ever, I hate that cloud name, just call it a network, but our network will be different. It will be an intelligent network that will be completely client-focused...Network 3.0. By leveraging the social web, we'll redefine the semantic web, and then get filthy rich!"

At this point, we just smiled and nodded, waiting for our opportunity to sneak off.

Moral of the story, if you're pitching a startup to CS people, first off you should get your Star Trek facts right, and also, you should really not suggest coding up one of the most advanced data analytics programs in a markup language.


Wasted Candidate (from Marcus D.)
A promising candidate for an open coder position emailed his CV and it was so good that we invited him to a half-day interview the following morning. A spoken interview proceeded by a 1 hour written test.

So this candidate comes and I am called by entrance people to pick him up. He is 5 minutes early, which is good. When I get there I was told that the candidate went back to parking lot to secure his bicycle and to just wait for him to come back. I see candidate from the window, hesitantly going one side near the loading dock (we are in a private park with lots of buildings, so it's common for people to be a bit disoriented), then another side near the parking areas(may be i should help him find his bicycle), then a third side around the garbage bins where I finally lost sight of him. I waited a total of 25 minutes when I received a call from Human Resources:

"He said he won't stay for interview, because we didn't treat him with enough consideration."

"What?!"

"He said he didn't appreciate we didn't tell him main entrance was closed"

I was dumbfounded. There's a huge map at the gate telling everybody where the current entrance is, (with a bicycle, it's a 2 minutes trip). For crying out loud, he actually spoke to someone who was in the building.

"And he said he came for an interview, but not for a technical test, he is not prepared for that"

Despite his credentials, I decided that it was best to accept the loss of this potential candidate.


What's the Square Root of Stupid? (from snoofle)
I applied for this job to upgrade an antiquated legacy system to modern technology. I expected all sorts of "How-would-you xxx?" type questions, but not like this:

Interviewer: How would you calculate a square root (java)?
Me: Math.sqrt(double)
I: What if there were no square root function?
M: I'd Google for John Carmack's formula to calculate it.
I: What if you couldn't use Google?
M: Assuming you mean no access to the internet, since I don't happen to know how to calculate a square root, I'd ask someone...
I: What if there were nobody to ask?
M: I'm not a math whiz; I'd drive to a bookstore and get a book on how to do it.
I: What if there were no bookstore?
M: Ok, so you want me to come up with a formula I've told you I don't know, in the next 10 seconds, without access to any of the usual reference sources?

I thanked him for his time and got up to leave when the interviewer countered "we're not through". I pointed out that he knew nothing of my skills, but I now knew everything I needed to know about him, that HE failed the interview, that he had wasted enough of my time, thanked him for his, and walked out.

[Advertisement] BuildMaster is more than just an automation tool: it brings together the people, process, and practices that allow teams to deliver software rapidly, reliably, and responsibly. And it's incredibly easy to get started; download now and use the built-in tutorials and wizards to get your builds and/or deploys automated!

http://thedailywtf.com/articles/classic-wtf-trouble-with-founders-the-lost-candidate-and-more


Метки:  

Classic WTF: Long Distance DATE$ing

Понедельник, 06 Июля 2015 г. 13:30 + в цитатник

The Fourth of July was this weekend, and this is the perfect time for us to have our little Summer Vacation. For this week, sit back, enjoy some nice weather along with some Classic WTFs (nice weather not guaranteed, definitions of "nice" may vary from user to user).

This story originally ran in 2006, and is one of those examples where we let the submitter speak for themselves. - Remy


Mot did a pretty good job in telling this tale of Long Distance DATE$ing, so I'll just turn it on over to him ...

VBA (not VB) is Visual Basic for Applicaitons, embedded into other apps. A fine, extensible subset and superset of VB commands. Works pretty well if you stay within its bounds.

VBA has a DATE$ command, used to set the workstation date. Why you would want to reset the workstation's date is left to your imagination, but the command is documented in the help.

All was well until a HPC (Highly Paid Consultant) came in and used DATE$ to (try to) store a date string, then parsed it (using US date format) and printed it on a form. The thing is, it worked okay because of the way the data and commands he was using defaulted to 'today' - he was trying to store 'today', and print 'today', and it seemed to work fine. No one knew, but because of the command 'DATE$ = (system date with US formatting) it also kept resetting the system date on the PC to 'today', format MM/DD/YYYY.

So then the app was rolled out to Europe. They use date format DD/MM/YYYY. The first time someone printed a form, if it was during the first 12 days of the month, it would reset their PC's date to by reversing months and days. The second time it would print a form, it would set the date back correctly. So, some people had their PC's time messed up until reboot (or manual date change), some did not. The forms all looked okay (the date format was hardcoded to US format on the forms, but the users were used to things like that coming from the US)

On the 13th and later, it would not mess up, because it would silently swallow the 'invalid date' error. If you printed an even number forms, it would set your date back to 'today' in DD/MM/YYYY format. If you use a US machine to test it, it will work fine, because you have to have a machine set up for a Europe location to make the error appear.

It took over three years to finally find and squash this bug. At first, no one believed the users, especially when they could not repeat the problem very often. Then when people finally believed there was a problem, no one could find the bug, which was hidden under five nested gosubs to other scripts, uncommented, and something that the eye would just pass over as 'just another string assignment'.

After I found the $DATE command in the help, I was then pretty sure I knew what the problem was. It took me two hours to pinpoint the problem. So, three years and two hours later, Europe could stop counting forms before printing, and always printing an even number of them per workstation (or failing that, rebooting after printing, which set the PC time to network time).

[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!

http://thedailywtf.com/articles/classic-wtf-long-distance-date-ing


Метки:  

Error'd: A Defined Sense of Taste

Пятница, 03 Июля 2015 г. 13:30 + в цитатник

"This was in the appetizers section. I wonder if they do 1920x1200 for an entree," wrote Semaj.

"I'd love to see what Amazon has to say when I actually backup my images to Cloud Drive!," writes Connor

Ryan K. wrote, "Went to activate my shiny new copy of Acunetix WVS, and well, it just wasn't having it."

"I opened an account with T. Rowe Price after succumbing to peer pressure and guilt," writes Sam, "Despite clicking all the options to get emails only, I've now received 1 email from them and 11 postal mailings."

"Seems like the old Opera 12 on Linux doesn't quite support the Roboto font like it should," Pieter Van Nuffel wrote.

"Thankfully, only a small fraction of my money happens to be with ING Direct.," Don writes.

Daniel W. wrote, "Got my reminder card for my next oil change... something tells me the brake inspection needed to happen a long time ago though."

"I'm not gonna touch which one is which," Dan R. writes.

[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!

http://thedailywtf.com/articles/a-defined-sense-of-taste


Метки:  

News Roundup: I'm Not Married to the Idea

Четверг, 02 Июля 2015 г. 13:30 + в цитатник

A bit more than 15 years ago, the software industry was barreling straight into a crisis: the dreaded Y2K bug. Vital software was going to fail in odd ways, banks werent going to handle transactions, planes werent going to fly, nuclear reactors werent going to react, cats and dogs living together, mass hysteria, real wrath of God type stuff.

The software industry rallied, software got patched, and at the stroke of midnight, not much actually happened. Over the past week, a different bug has been keeping a small pool of software developers up at night. Welcome to the world of Y2Gay.

In a landmark decision, the United States Supreme Court revised the business requirements and integrity constraints on the marriage relationship, removing some legacy constraints and essentially updating to better reflect the actual needs of their end users. This policy decision now has to be implemented in every state, county, town and hamlet across the country. Every change breaks somebodys workflow, and this one is no exception.

Shortly after the decision was made, stories like this started cropping up. Making software changes, especially in an IT shop as small and disorganized as a local county office (which in many cases have only one staff member doing IT) is a uniquely challenging task. In what might be the first authentic miracle in Texas, Williamson County managed to get a software update out before a week went by.

Other states are having their own rush to fix their software. St. Tammany Parish in Louisiana called their IT tech back from vacation. In the meantime, someone noticed that they still have pens in Louisiana, so theyre just printing the old forms and correcting the language by hand. Poor Denton County, Texas does not have pens, and didnt issue updated licenses until Monday.

Kentucky is another state that still has pens:

But the Kentucky County Clerks Association is telling clerks that shouldnt be a problem. Simply print out the old form and scratch out the words bride and groom and replace them with first party and second party.
… new clerks may not know they can do that

And in Oklahoma, not only are there software glitches, but one county …is using analog forms designed for typewriters to issue licenses, although no one had yet applied.

The recent changes in the US arent the first time software design and this particular social issue have intersected. Back in 2013, when the Federal government attempted to modernize their view of marriage, the DOD glitched out as well. Around the same time, Nintendo was patching an opposite glitch- removing gay marriage from a game, which looks stupid and ignorant to us modern people in the far off year of 2015.

In the end, this might not be changing requirements, as much as it might be poor assumptions. Weve all seen articles like Falsehoods Programmers Believe About Time and Falsehoods Programmers Believe About Names. The choices we make in writing software can reveal our own assumptions and biases, and it behooves us in the industry to keep that in mind when interpreting business requirements. @qntm explores that idea from a database design perspective, both before the Supreme Courts decision, and after.

Finally, from all of us here at TDWTF, this change isnt merely fabulous- its brillant.

[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!

http://thedailywtf.com/articles/i-m-not-married-to-the-idea


Метки:  

CodeSOD: Mistakes Were Made

Среда, 01 Июля 2015 г. 13:30 + в цитатник

As a general rule, dead code should never be commented out, but instead, should be replaced. If you ever need to review the history, source control contains that information.

But sometimes, the Ill just comment it out lets us see the moment of realization, when a developer discovers that theyve done the absolute wrong thing. Clara sends us this:

//HttpPostedFile file = Page.Request.Files["ctl00$phMainContent$fulProfileImage"];
//if (file != null && file.ContentLength > 0)
//{
// try
// {
//  string[] filenameparts = Page.Request.Files["ctl00$phMainContent$fulProfileImage"].FileName.Split('.');
//  byte[] fileData;

//  using (BinaryReader br = new BinaryReader(Page.Request.Files["ctl00$phMainContent$fulProfileImage"].InputStream))
//  {
//      byte[] imageData = br.ReadBytes(Page.Request.Files["ctl00$phMainContent$fulProfileImage"].ContentLength);
//      fileData = CreateThumbnail(imageData, 400.0f, 400.0f);
//  }

//  dealerEntity.ProfileImage = fileData;
// }
// catch { }
//}
if(fulProfileImage.HasFile)
{
    try
    {
        dealerEntity.ProfileImage = CreateThumbnail(fulProfileImage.FileBytes, 400.0f, 400.0f);
    }
    catch{
        throw;
    }
}

Its a beautiful little collection of ignorance, a willingness to do it the hardware, and one of my favorite anti-patterns: swallowing exceptions. The important thing is that the developer clearly learned from their mistakes- or somebody who knew better came through and fixed it. Either way, the real lesson is use source control and don't comment out dead code!

[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!

http://thedailywtf.com/articles/mistakes-were-made


Метки:  

Uncommon Respect

Вторник, 30 Июня 2015 г. 13:30 + в цитатник

Coyne viewed the coming work week with dread. His employer spent roughly the sum of all the employee 401k holdings on a weeklong mandatory communications training course. The problem of no work getting done during training was solved by having mandatory after-hours work to make up for it.

Skylar White holds the talking pillow in a scene from Breaking Bad

The training program centered around three simple tenets to holding effective meetings: Common Respect, Common Purpose, and Common Goals. Before the training started, Coynes manager, Stefen, made an announcement. After completion of this course, he said, there will be no excuse for having an unsuccessful meeting. Well be tracking meeting results, and bad meetings will be documented and reviewed during your annual performance evaluations. Now, let me introduce your trainer, Trent…

Coyne knew where this was going. Meetings would be the same, but now they doubled as ammunition on performance reviews. Worse, Stefen now had three new terms to throw around, ad nauseum, when he decided to hijack a meeting and tell everyone his mandate. The training tried to make that harder for him, though, by introducing a Talking Pillow on the very first day.

Part of Common Respect, Trent explained, is adhering to someones right to speak. If you started blabbering without holding the Talking Pillow, you were violating the Common Respect tenet. You could only speak if you were holding the pillow, and once you were done with your spiel, the talking pillow would be passed on so someone else could give input. Coyne and his team were forced to practice it, and most of them had no trouble with the Kindergarten exercise- aside from Stefen, who kept violating the rules.

The ensuing days of training delved into the Common Purpose and Common Goals part of the program. Common Purpose could be summarized as, Everyone should agree on the purpose of the meeting and stick to it. Stefen gleefully tacked on an or else!. Ever the cynic, Coyne could already see Stefen taking this as a license to focus any meeting on what he wanted it to be about. Disagreeing with Stefen would be trampling the sacred order of the Common Purpose.

As far as Common Goals, these were meant to imply everyone would leave the meeting with the same goals, consisting of a to-do list of deliverables. Anything other than concluding a meeting with Common Goals would be considered a failure. Terms like post-meeting harmony were thrown around to make it seem like an ideal situation.

The week ended, and Trent and his fellow consultants were happy to pack up their talking pillows and take their exorbitant check for a weeks worth of work that could have fit into a one hour webinar. Best of luck, everyone! Trent said through a grin as he shook everyones hand. Im sure youve all seen the importance of RESPECTING each others PURPOSE to achieve GOALS, and you all have that in COMMON now! He chuckled like this were a clever phrase, and Coyne rolled his eyes.

Before the trainers were out of the parking lot, Stefen raised his own talking pillow on high and shouted, Listen up, everyone! First thing Monday morning, were putting this knowledge to good use. Im calling a 7AM meeting to discuss the strategy for the Initrode migration, so show some Common Respect and be there on time!

Most of Coynes co-workers didnt usually start their day until 8 or 9. Common Respect apparently didnt extend to scheduling meetings during core hours. But Coyne and his team members shambled into the conference room, zombie-like, just before 7AM on Monday. Stefen was already seated at the head of the table, with the talking pillow, and had scrawled COMMON RESPECT, PURPOSE and GOALS on the whiteboard.

Have a seat, everyone. Now that were familiar with the communication terms, heres how its going to be. Youre going to respect what I have to say. The purpose of this meeting is to inform you of how were going to do the Initrode client migration. The goal after this meeting is for all of you to take the flat files the clients are going to send us in their database formats and convert it to ours.

Coyne glanced around the table. He, and most of his teammates had already had conversations with Initrode about the migration, and Initrode had agreed to convert most of their data into an industry-standard transmission file, which could be directly imported- no additional conversions required. None of Coynes co-workers objected, so Coyne slowly reached out for the talking pillow in front of Stefen. Im not looking for any input on this, Coyne! Stefen yelled as he snatched the pillow away and launched it out the door.

[Advertisement] BuildMaster is more than just an automation tool: it brings together the people, process, and practices that allow teams to deliver software rapidly, reliably, and responsibly. And it's incredibly easy to get started; download now and use the built-in tutorials and wizards to get your builds and/or deploys automated!

http://thedailywtf.com/articles/uncommon-respect


Метки:  

Поиск сообщений в rss_thedaily_wtf
Страницы: 124 ... 26 25 [24] 23 22 ..
.. 1 Календарь