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

Поиск сообщений в 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: Still Empty

Понедельник, 13 Марта 2017 г. 13:30 + в цитатник

A few months ago, Hannes shared with us some recycled code. In that installment, we learned that one of his team mates has… issues with strings. And naming things. And basic language features.

These issues continue.

For example, imagine if you well that you have a file. This file contains certain characters which you want to remove. Some need to be converted into other forms, like the letter G should become 6, and B should become 8. Think through how you might solve this.

private bool CleanFile(string FileName)
{
        bool result = false;
        try
        {
                string s1 = string.Empty, s2 = string.Empty;
                FileStream aFile = new FileStream(FileName, FileMode.Open);
                using (StreamReader sr = new StreamReader(aFile, System.Text.Encoding.Default))
                {
                        while (sr.Peek() > -1)
                        {
                                s1 += sr.ReadLine();
                        }
                        sr.Close();

                        s2 = s1.Replace("INS", Environment.NewLine + "INS");
                        s1 = s2.Replace("[US]", "");
                        s2 = s1.Replace("-", "");
                        s1 = s2.Replace("_", "");
                        s2 = s1.Replace("G", "6");
                        s1 = s2.Replace("B", "8");
                        s2 = s1.Replace(" ", "");
                        s1 = s2.Replace("^", "");
                        s2 = s1.Replace("•", "");
                        s1 = s2.Replace(":", "");
                        s2 = s1.Replace("<", "");
                        s1 = s2.Replace(">", "");
                        s2 = s1.Replace(".", "");
                        s1 = s2.Replace("lb", "");
                        s2 = s1.Replace("/", "");
                        s1 = s2.Replace("(", "");
                        s2 = s1.Replace(")", "");
                        s1 = s2.Replace("A", "");
                        s2 = s1.Replace("?", "");// still empty - can be used
                }
                using (StreamWriter sw = new StreamWriter(FileName))
                {
                        sw.Write(s2);
                        sw.Close();
                }
                result = true;
        }
        catch (Exception ex)
        {
                MessageBox.Show(ex.Message);
                result = false;
        }
        return result;
}

Im going to ignore the pair of alternating elephant in the room for a moment, because I want to pick on oone of those little pet-peeves: the exception handling. A generic exception handler is bad. An exception handler that does nothing but show the error in a message box is also bad. Especially in a private method.

We could puzzle over the use of both s1 and s2, we could roll our eyes at doing a close inside of a using block (which automatically does that for you), but look at this line, right here:

                        s2 = s1.Replace("?", "");// still empty - can be used

What does that mean? What could it mean? Why is it there? This sounds like something that should be featured on Screenshots of Despair. Still empty - can be used. Its like a mantra. The left side and the right side of my brain keep trading it back and forth, like s1 = s2.Replace(…) but nothings being replaced.

Im still empty. I can be used.

[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/still-empty


Метки:  

Error'd: The Travelling Error Problem

Пятница, 10 Марта 2017 г. 14:00 + в цитатник

"Microsoft has really stepped up their remote publishing game with their Visual Studio 2017 RC!" writes Robert M.

Ronan wrote, "I was reading an article on ArsTechnica when suddenly, PHP."

"The USPS has a new offer where I can either wait until Monday, or pony up more than double the shipping cost, for the package to arrive...Monday," writes Richard H.

"I inherited a project that uses Razor and soon after, headed off to Google," Jim B. wrote, "I'm all for trying anything but I might have to wait until after work."

"Thankfully, I now won't have to worry about little things like where I'm going on my holiday, since Royal Jordanian's booking engine seems to think my plane will be visiting every airport in the world!" writes Murray C.

Nikola writes, "Um, Skype? Are you feeling ok?"

"For me and using Steam, it's errors all the way down," wrote Matthew W.

[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/the-travelling-error-problem


Метки:  

Representative Line: The Installer Configuration

Четверг, 09 Марта 2017 г. 14:30 + в цитатник

John N supports a C# project that, on first run, needs to initialize a database. It pulls that data from a dbInstallFilePath, controlled by the application .config file. This brings us to our representative line:

    

Isn't that just terrible? Aren't you just cringing, or calling for the responsible developer to be sacked? Oh, wait, you're sitting here, scratching your head, wondering about how this is a WTF, aren't you? Let me provide a little more context.



         
        


[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-installer-configuration


Метки:  

Misdirected Emails

Среда, 08 Марта 2017 г. 14:30 + в цитатник

John C was a vigilant protector of justice, a dark guardian of a public who didnt even know he existed, striking fear into the hearts of criminals. Specifically, he did IT support for the local police department. It wasnt a great job. Their infrastructure was ancient, underfunded, and under-supported. He was expected to provide just as much support for the departments website as well as their radio system. The customers were a special brand of ignorant, and often pretty angry about it. The department provided service 24/7, which meant John was expected to be available at weird hours, and not even for emergencies. Many of his customers only worked night shifts, and he had to support them.

At around 3AM, John caught a ticket, entered in by one of the secretarial staff. Officer Bishop reports her email is broke. With that cornucopia of information, he called Officer Bishop.

Newman, the mail-carrier character from Seinfeld, in uniform

I had a high school student participate in a ride-along, she said. He wanted some pictures of what our shooting range looked like for a presentation, so I tried to email them. I emailed them to napoleon dot wilson at hot mail dot com, but I got an error message about it was undeliverable.

Well, John said, are you sure the email address is accurate?

Yes! Bishop said. It was his first name, dot last name, at hot mail dot com.

And its spelled correctly?

Yes! Bishop said, becoming increasingly indignant. n-a-p-o-l-e-o-n-dot-w-i-l-s-o-n-at-h-o-t-m-a-l-e.com

John chuckled. I dont think thats quite right. I think its hotmail, as in postal mail. Like a letter. M-a-i-l.

I know what email address he gave me, Bishop said. He said hotmale. I know what he said.

John took a breath and tried a different tack. The words male as in a man and mail as in letters sound the same. If he just said his email address aloud, you might have simply heard him wrong.

I know what he said, Bishop said. Do you think Im stupid? I know what words mean. He told me his address was hot male!

Officer, Im not saying youre stupid, John said, summoning every ounce of self-control that he could. But hotmail, like the letter, is a popular email service. Hotmale, like the restroom, is… um… something very different.

Look, I know you IT people think youre soooooo smart, but stop treating me like an idiot. Ive been a police officer for longer than youve been wearing diapers. I know what he said.

Maam, can I just get you to try sending an email to napoleon.wilson@hotmail.com, like the letter? Just try it for me?

He said hotmale.

Fine, John thought to himself. It was 3AM, and Officer Bishop was on his last nerve. Maam, lets try something here. I want you to open hotmale.com in your web browser. He was the IT person- and thus he knew that there was a lot of porn-browsing on station computers, what was a little more, right?

Thats the little blue E, right?

Yes.

After a beat, he heard, ACK!

John waited a beat, hoping to hear Officer Bishop could finally turn her powerful investigative mind to understand what he had been trying to tell her. Her ack segued into a gasp of understanding. John started nodding to himself, happy that Bishop had finally figured it out, now that a gay pornography site was staring her in the face.

Oh, I didnt know… hes gay?! He didnt look gay.

No, hes not- I mean, he might be, but-

Bishop wasnt listening to him at all. Oh, but I guess you can never tell these days…

No, try and go to hotmail, like the letter now…

Hey, theres a link to contact them at the bottom of the site. Maybe we should tell them that their email is broken.

John looked at the clock- it was 3:15 at this point, but it felt like hed been working on this ticket for hours. Okay, actually, so it sounds like the problem must be on their end. Why dont you do this: start a new email, and send it to admin@hotmale.com. Tell them that you were trying to get in contact with Napoleon Wilson, and include the error message that you were getting, along with the message you were trying to send to Napoleon.

Okay, Ill do that, but let me give you a piece of advice- dont talk to people like theyre stupid.

Ill definitely keep that in mind, John said. Im just going to go ahead and close this ticket.

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

http://thedailywtf.com/articles/misdirected-emails


Метки:  

CodeSOD: WriteTenMemoryLocations

Вторник, 07 Марта 2017 г. 14:30 + в цитатник

Lets say you needed to initialize a buffer to be 260 bytes long, and they all should be 255. Now, youre using a high-level language, like C#, to talk to a legacy device, so you might have to jump through some hoops to deal with the device API, but how hard could it be? A better question might be, how hard can you make it?

Theres an old saying: fast, good, or cheap: pick two. Massimos employer doesnt want to be greedy, so they consistently pick one: cheap, which means they get code like this:

class ContainerClass : ISnippedAutogeneratedBase {
    // Not shown: 6200 lines doing everything and its opposite in several different flavours and variations.
    /*************************************************************************************************
    * This method initializes our BRAND A or BRAND B device memory block
    * with all cells written to FF
    *
    *************************************************************************************************/
    private DeviceResult InitializeDeviceMemory()
    {
        try
        {
            int Block  = 1;
            bool res = false;
            int Destination = Project.Properties.Settings.Default.DST;

            List Out = new List();

            for (int i = 0; i < 26; i++)
            {
                if (Out.Count < 260)
                {
                    for (int k = Out.Count; k < 260; k++)
                    {
                        Out.Add(255);
                    }
                }

                int Start = i * 10;

                //byte[] data = new byte[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
                //List values = new List(){0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
                List values = new List() { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

                for (int z = 0; z < 10; z++)
                {
                    //data[z] = Out[z + Start];
                    values[z] = Out[z + Start];
                }

                res = WriteTenMemoryLocations(Destination, (byte)Block, (byte)Start, values);
            }

            if (res) return DeviceResult.OK;
            else return DeviceResult.UnknownError;
        }
        catch (Exception ex)
        {
            Logs.WriteLog(ex, "ContainerClass.InitializeDeviceMemory");
            return DeviceResult.UnknownError;
        }
    }
}

The first thing I want to note is the interface this class implements- ISnippedAutogeneratedBase. You might think to yourself, Oh, so this code was autogenerated, but no- the interface was autogenerated.

The obvious attraction here is the loops. At some point, someone wrote the highly specific WriteTenMemoryLocations method. Since setting 260 memory locations means calling that method 26 times, we need loops.

But why do we need Out? The most puzzling thing in this code is that they build all 260 copies of the number 255 into the Out list, and then take ten element slices out of that list to populate values- even though theyre all the same value. At some point, thanks to the comments, we know that values was being defaulted to ten elements of 255, making everything involving the Out list pointless and redundant.

Thats the obvious WTF, but its not the best part. Notice this line:

int Destination = Project.Properties.Settings.Default.DST;

Once upon a time, someone wanted to be able to configure whether the device was in daylight saving time or not, so the flag was created. But no one ever actually implemented the feature, so the flag was left at its default value of 62- which also just happens to be the memory address where we want to initialize these values.

[Advertisement] Easily create complex server configurations and orchestrations using both the intuitive, drag-and-drop editor and the text/script editor. Find out more and download today!

http://thedailywtf.com/articles/writetenmemorylocations


Метки:  

The Automation Vigilante

Понедельник, 06 Марта 2017 г. 14:30 + в цитатник

Sipping Bird

Fresh off an internship, Trace landed his first full-time job performing customer service and administration at a large company.

Oddly enough, customer service wasn't the worst part of the job. He barely had time to help customers due to all the tasks required just to tread water in the company's lumbering beast of an ERP system. All day long, he had to click the same buttons, generate the same PDF files, and send the same emails.

This drudgery wasn't limited to Trace, either. Everyone in his department, from other young graduates to the most senior reps, performed the same grueling ritual. It'd been devised long before Trace was born, and it was taken for granted—right along with the resultant stress, weariness, and repeated mantra of "I'm too busy right now!"

Trace saw no reason why the repetitive process couldn't be automated in some fashion, but Trace wasn't a programmer himself. Undaunted, he scheduled a meeting with his boss to go over his idea.

"Let's bring in someone who can write a program for this. It'll save lots of time and effort in the long run, which we can then use to help our customers." Trace smiled, excited by the prospect of making a real difference at his new corporate home.

There was no crack in his manager's tired expression. "It's not an ideal process, sure, but it works. Besides, we don't have room in our budget to hire programmers."

That was the day Trace learned that there wasn't a single sound suggestion in the universe that couldn't be shot down with the words, "There's no budget for that."

He returned to his desk, discouraged. Just as he was about to plow back into his paperwork, he had a new thought. Wait, why can't I make this happen? He wasn't a programmer, but that didn't mean he couldn't learn. Hadn't his college roomate always told him that 90% of his CompSci major came down to how well he phrased his Google searches?

During downtime and after work, Trace began to teach himself how to code. At first, he'd learn operations and then copy/paste them like mad—he hadn't learned loops yet—but over time, the program gained sophistication. It could click buttons, create PDF files, send emails, and lookup and consolidate important information.

It was time to show it to the team. Trace spent a few coffee breaks approaching people at their cubes, demonstrating his achievement. "Isn't this great?"

Some of the newer coworkers saw the benefit at once. The more veteran employees frowned with confusion, scorn, or outright fear.

"Are you trying to get us all fired, kid? If you show this to management, we're screwed!"

"I don't have any control over this!"

"My way works for me!"

Trace reluctantly left these folks to keep clicking the same buttons, generating the same PDF files, sending the same emails, and making the same old tired complaints about their workload. He learned another important lesson about how easy it was to become complacent with, and even dependent upon, the status quo.

With that lesson firmly in mind, he spent his free time deepening his programming knowledge, refining his existing code, even throwing in a few loops. It paid off as his daily administrative chores became a matter of clicks rather than hours. Customers gave him great feedback because he had time to give their issues the attention they deserved.

Over time, Trace climbed the ladder with promotions, and quietly shared his program with each new hire. Whenever they suggested process improvements of their own, he made sure to listen.

[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-automation-vigilante


Метки:  

Error'd: Rebooting Space Mountain

Пятница, 03 Марта 2017 г. 14:00 + в цитатник

Hugo K. writes, "Space Mountain is closed for refurbishment. It will reopen when all security patches are installed."

"Thanks TeamViewer for copying every picture 1.1 million times over," writes Michael L., "You can, um, stop whenever you like."

"I had no idea that Report Builder depended on 2972!" wrote David G., "If I ignore this will 30584 still get updated?"

"While I have unlimited phone and text, it seems odd that Verizon would track my data usage so precisely," wrote Ken L.

Adam K. writes, "My day was going great until Atlassian changed how reputation was tracked."

"Today Spotify played the same song on my daily mix twice, at the same time. I guess the album title explains it," wrote Matthijs W.

Prutser writes, "Someone forgot some tags while making this website and, all of a sudden, broken HTML was painted all my old dormitory."

[Advertisement] Otter enables DevOps best practices by providing a visual, dynamic, and intuitive UI that shows, at-a-glance, the configuration state of all your servers. Find out more and download today!

http://thedailywtf.com/articles/rebooting-space-mountain


Метки:  

CodeSOD: Cloning Date

Четверг, 02 Марта 2017 г. 14:30 + в цитатник

We get a lot of bad date code samples. Since we all learned to read a calendar in elementary school, everyone assumes they actually understand how dates work, and then tries to codify that knowledge in code. Bad date code is like entry level awfulness, and it takes a lot to surprise me when I see bad date handling code. Mike R knows how to do it, though. He found this code buried in a 30+ file commit, with the helpful commit message, asdf;:

public class DateUtil {
    private DateUtil() {
    }
    public static Date setDate(Date date){
        if (date == null) {
            return null;
        }
        return new Date(date.getTime());
    }
    public static Date getDate(Date date){
        if (date == null) {
            return null;
        }
        return new Date(date.getTime());
    }
}


public class DateUtilUnitTest {

    @Test
    public void testSetDate() throws Exception {
        Date date = new Date();
        Date result = DateUtil.setDate(date);
        assertThat(date,is(result));
    }

    @Test
    public void testSetsNullDate() throws Exception {
        Date date = null;
        Date result = DateUtil.setDate(date);
        assertThat(date,is(result));
    }

    @Test
    public void testGetDate() throws Exception {
        Date date = new Date();
        Date result = DateUtil.getDate(date);
        assertThat(date,is(result));
    }

    @Test
    public void testGetsNullDate() throws Exception {
        Date date = null;
        Date result = DateUtil.getDate(date);
        assertThat(date,is(result));
    }
}

Its not fair to say that this does nothing- it does successfully clone the Date object. Im not entirely sure, based on the method names, thats what they meant to do, but thats what it does. It may not even be what its used for. I suppose we should just be happy that it has unit tests, even if theyre not testing the clone and just confirming equality.


Normally, this would have been a Software on the Rocks podcast date, but we're taking a hiatus this week, because of illness. We'll be back in two weeks.
[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/cloning-date


Метки:  

Tales from the Interview: It's No Big Deal

Среда, 01 Марта 2017 г. 14:30 + в цитатник
Snoofle's tale is a little different than our usual Tales From the Interview, but these kinds of negotiating tactics are TRWTF. -- Remy

After more than 3 decades in our field, I find my self in the position of being able to afford to retire, but not yet actually ready to retire. This is partly due to the fact that my wife still wants to work. While walking off into the sunset together seems enticing, biding my time until she's ready seems somewhat boring (for the unmarried, having too much fun while she's still at work, even by her choice, is not conducive to marital bliss).

Once you realize that you've cleared the financial hurdles where the big bills like college tuition and the mortgage are paid and retirement is funded, your priorities at work change. For example, when you need to pay tuition and a mortgage, you are willing to put up with a certain amount of stupidity so that you can take care of your family. Once those bills are paid, your tolerance for idiocy shrinks quite a bit. To that end, I left my last job - for the first time - with no job to go to.

While I'm waiting for my wife to decide to join me, I've decided that taking another job could fill the time. Since I no longer need the money, however, my criteria for taking another job are far more stringent than usual. Specifically, no more managers who offer randomly chosen delivery dates without taking the amount of work into account. No more places that deploy directly to production. No more tolerance for managers that say one thing and then do another, leaving you holding the bag. No more teams of one experienced person to fix the onslaught of wrong-ness inflicted by a bevy of inexperienced junior developers.

A pile of $100 bills

As you might imagine, most of what crosses my in-box doesn't measure up. However, every now and then, something of interest (that seems to measure up) appears. The latest of these was a position as a highly experienced architect/developer at a non-financial company in NJ. The technology stack they were using was in line with my experience. The phone screen with the developers yielded some honesty about the differences between where they were and where they needed to be, but at least they recognized the shortcomings. It was a try-buy deal (usually a turn-off for me) with the numbers in the right range (e.g.: commensurate with my experience). I decided to go on the interview.

Don't get me wrong; if I could find a good position at half the money, but near home, I'd grab it (convenience trumps income). Unfortunately, there's very little in the way of tech offerings near where we live. If I have to make the long daily shlep, then I feel it's only reasonable to be paid along the lines of typical salaries in the industry and location where I'll be working. The fact that I don't actually need the money is personal and should be of no consequence to the company who will be getting my services.

The interview went well. A few days later the offer came, but at $50K less than what they had listed in the job posting. Upon querying, I was informed that although they said I had all the qualifications and experience they were seeking, they decided they only needed mid-level experience and so they adjusted the offer to reflect that. Although it's not about money, I don't like being taken advantage of, and declined based upon the discrepancy.

The hiring manager called me to try and convince me to take the position as we had all hit it off and seemed to be on the same page. I said that it seemed that they wanted 30+ years of experience but were only willing to pay for 15 years of experience, and that since the number they originally discussed and the one they offered were so different, that I was not interested in giving it away (would they be willing to let me dumb down my skills, knowledge and experience to match the compensation, or did they want me to use all of my expertise to do the best job possible?)

Of course he said the latter. He then pointed out that $50K wasn't that much money and it shouldn't be a deciding factor. I said that money wasn't the issue, but how they changed the terms on me after the fact was. I further pointed out that if it wasn't that much money, then I would take the job at the offered rate if he would personally make up the $50K difference.

Naturally he railed at that suggestion.

I pointed out that it was interesting that $50K was no big deal when it was coming out of my pocket, but it was a huge deal when it was coming out of his pocket; then I declined the offer.

A few days later, he called me again and informed me that he got the budget to pay the originally agreed-upon rate.

I am presently doing volunteer work, instead. If I'm going to take a paid position, it should be a fair wage given the skills/experience/location/industry/etc. I am not going to give it away. The fact that he tried to renege on a financial agreement just to make his budget look better - to me - is a huge warning sign that dealing with him would be an ongoing WTF, so I chose to pass on the position.

When you have fiscal obligations, getting paid something - anything - is better than nothing, but we all know that someone who is qualified but underpaid is someone searching for a new position. When you have the luxury of not having monetary obligations, dealing with someone who treats you fairly and honestly trumps - pretty much - all.

[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/it-s-no-big-deal


Метки:  

Representative Line: The Longest Method?

Вторник, 28 Февраля 2017 г. 14:30 + в цитатник

An anonymous reader was chatting with their fellow developers on Slack. They work for a telecom, and thus have to support software and hardware from a variety of vendors. In one Apple-provided API, they found this method.

ALUnlockWebServiceRequest appleUnlockWSRequest = new ALUnlockWebServiceRequest();
appleUnlockWSRequest.getAddPendingUnlockDeviceRequestAndCheckUnlockStatusDeviceRequestAndRemoveUnlockDeviceRequest();

The code in image form, with the caption, 'new contender for longest method name'

Now, that is a pretty long method name, and its certainly a WTF. That said, Java has classes like this one, and theres always Spring, if you want to find something really long. Besides, its not the length of the name thats important, its how you invoke it.

[Advertisement] High availability, Load-balanced or Basic – design your own Universal Package Manager, allow the enterprise to scale as you grow. Download and see for yourself!

http://thedailywtf.com/articles/the-longest-method


Метки:  

Copy Protected

Понедельник, 27 Февраля 2017 г. 14:30 + в цитатник

Dominique finished her instant cup of ramen, her third day straight. She and the other developers at Bento had gone a month without pay as they finished the beta version of their only application: a browser for promotional materials of yet-to-be-released merchandise.

Her cellphone rang. It was CEO Stephen, who was wooing investors with a demo. How hard is it to block a user from capturing a screen image?

A menu offering a screen recording option

Its possible, she began. Wed need to encrypt all copyrighted images that are stored to disk, disable the print screen button, disable the context menu when a user right-clicks

Great, thanks. Stephen hung up.

Stephen returned to the office an hour later. Well need copy protection for a new demo next Monday, he said.

I didnt even get to the hard stuff, Dominique replied. Like screen capturing software. Youre talking about a dozen different applications wed need to write fixes for.

Sure, but you can do it by Monday, right? Its the one thing theyre insisting on.

The List

Dominique assembled the other developers for a stand-up meeting. She wrote on the whiteboard:

SCREEN CAPTURE SOFTWARE
1) SnagIt
2) ImageMagick

Listen. If we want to get paid, we need to sell Bento to those investors on Monday. We need a list of every piece of software that can capture video, still shots, even low-resolution images. These are the two obvious ones.

The other developers took turns at the whiteboard, listing different applications that could potentially grab screen captures. By the end, the list was twenty items long. Dominique gave each developer, including herself, two items from the list to finish by Monday.

Pizza and Coffee

After much prodding, Stephen gave the company credit card to Dominique, which she used on pizza and coffee to feed the team, who worked 16-hour days through the week and into the weekend. Every four hours, Dominique would cross off the applications on the whiteboard that had been successfully blocked, writing the commit hash next to each. They used everything, from registry hacks to dirty assembly tricks.

Sunday evening, Stephen came to check on their progress. Dominique showed him the board. Theres one item left, she said. We cant find any documentation on it that isnt in Korean.

We have to cover everything, he said. If they discovered that we knew about this vulnerability, wed be culpable if someone snagged an image.

Dominique checked in her last fix the next morning, just a few hours before the presentation. Giving up on trying to find English documentation, instead she made Bento crash the Korean application if it was running alongside their own software.

Screen Shot

Dominique washed up and slept a few hours before meeting Stephen at a nearby office park. The investment group were situated in an office covering an entire floor, and the conference room was bigger than their own office.

Seated among the investors was a scrappy teenager with red-spiked hair.

This is my nephew, one of them explained. He knows his way around computers. Consider this the bull in a china shop test.

Dominique watched as the teenager tried out as many ways as he could to get a screenshot of Bentos images. He went through almost all the tricks they had found the week before. After ten minutes, most of the investors seemed satisfied.

Then the teen pulled out his cellphone and took a picture of the screen.

The uncle of the teen examined the photo. You can make out a lot of detail on here, he said. You lied to us. You said this would be foolproof.

The investors declined to fund Bento.

Stephen looked deflated as he left the office building. Dominique felt worse: there would be no money for payroll next month. Glumly, she wondered if that investor who brought his nephew didnt want to fund Bento in the first place, and was just trying to get them out the door. The only other explanation was worse: a software investor was stupid enough to think a desktop application could prevent a digital camera from taking photos.

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

http://thedailywtf.com/articles/copy-protected


Метки:  

Error'd: Meats or Exceeds My Expectations

Пятница, 24 Февраля 2017 г. 14:00 + в цитатник

"Sure, it's a bit expensive, but hey, where else can you find a place with a huge outside baloney?" Keith S. wrote.

"People think that nobody plays Candy Crush any more," writes Maddie, "It seems their testers agree."

Alex writes, "Well, looks like Facebook is testing in production again."

"These empty groups in Facebook Workplace are definitely where things take off...any minute now..." Bj"orn E. wrote.

Janez writes, "Seeing a stack trace while driving hits you a little differently than when you're at your desk."

"Ok, name parsing can be tricky, but sometimes it's best to just not to try so hard," wrote Geoff G.

Peter K. writes, "Now we know that XP is hiding out in the French Alps."

[Advertisement] Incrementally adopt DevOps best practices with BuildMaster, ProGet and Otter, creating a robust, secure, scalable, and reliable DevOps toolchain.

http://thedailywtf.com/articles/meats-or-exceeds-my-expectations


Метки:  

Editor's Soapbox: The Billable Hour

Четверг, 23 Февраля 2017 г. 14:30 + в цитатник

For every line of code that ends up in software the general public sees or interacts with, for every line in your Snapchats and Battlezone: Call of Honor Duty Warfare, there are a thousand lines of code written to handle a supply chain processing rule that only applies to one warehouse on alternating Thursdays, but changes next month thanks to a union negotiation. Or its a software package that keeps track of every scale owned by a company and reminds people to calibrate them. Or a data-pump that pulls records out of one off-the-shelf silo and pushes them into another.

Thats the iceberg of software development. In terms of sheer quantity, most software is written below the waterline, deep in the bowels of companies that dont sell software, but need it anyway. Thats the world of internal software development.

And internal software development, in-house software shops, have a problem. Well, they have lots of problems, but were going to focus on one today: Internal Billing and the Billable Hour.

At a first pass, internal billing makes sense. If you are a widget manufacturer, then you want the entire company aligned with that goal. If you buy raw materials, those raw materials are going into widgets. If you pay laborers, their labor should be going into making widgets. If you buy capital assets, they should be things like widget-stamping machines.

A person using a computer and a calculator at the same time for some insane, stock-photo related reason

But you cant just build widgets. Your workers need to organize via email. The new Widget-Stamper 9000 needs network connectivity, so you need network drops and routers and switches, which in turn need regular maintenance. This is, in pointy-haired-boss speak, overhead. You need it, but it doesnt directly make widgets. Its a cost center.

So what do large companies do? Well, they take all those non-productive activities and shuffle them off into their own departments, usually in a corporate SBU. Then all the departments doing real work get a budget to spend on those cost centers. And thus, internal billing is born.

Each employee needs an email account. Lets assign that a cost, a rough—sometimes very rough—estimate of the total cost of managing the email account. Our corporate IT department will charge $20/yr per employee to cover the storage, configuration, management, and helpdesk support associated with their email account—and so on through the list of IT-related goods and services. Now the idea is that individual departments know their IT needs better than anyone else. By putting them in control of their IT budgets, they can spend their money wisely.

If youre a widget-making company, you view software and IT support as an overhead cost, and recognize that you only have the capacity to pursue a certain number of IT projects, this makes perfect sense. Budgets and billing create a supply/demand relationship, and they give corporate the ability to cut overhead costs by controlling budgets. (Of course, this is all founded on the faulty assumption that in-house software development is simply overhead, but lets set that aside for now.)

The problems start when internal billing meets software development, usually through the interface of the billable hour. The combination of these factors creates a situation where people who are ostensibly co-workers are locked into a toxic client/vendor relationship. The IT department is usually in a disadvantageous negotiating position, often competing against external vendors for a business departments IT budget. Treating corporate IT as the preferred vendor isnt all sunshine and roses for the business, either. There are definitely cases where external vendors are better suited to solve certain problems.

Putting IT resources on a billable hours system introduces a slew of bizarre side effects. For one thing, hours have to be tracked. That overhead might be relatively small, but its a cost. Idling becomes a serious concern. If developers arent assigned to billable projects, the IT department as a whole starts looking like its being non-productive. Practices like refactoring have to be carefully concealed, because business units arent going to pay for that.

Spending more billable hours on a project than estimated throws budgets out of whack. This forces developers into adaptive strategies. For example: padding estimates. If you can get an extremely padded estimate, or can get a long-running project into a steady-state where no ones looking too closely at the charges, you can treat these as banks. A project starts running over your estimate? Start charging that work against a project that has some spare time.

Of course, that makes it impossible to know how much time was actually spent on a project, so forget about using that for process improvement later. It also makes every project more expensive, driving up the costs of internal development. This drives business users to seek external solutions, spending their IT budget outside of the company, or worse: to find workarounds. Workarounds like maybe just building a big complicated Excel spreadsheet with macros in it.

This isnt even always restricted to hourly charges, either. I saw one organization that had a charge-back rate of $10,000/yr for a SQL Server database. That wasnt licensing or hardware, that was just to create a new database on an existing instance of SQL Server. The result? Pretty much no business unit had a working test environment, and theyd often stack four or five different applications into the same database. Rarely, theyd use schemas to organize their tables, but usually youd have tables like: Users, Users_1, UsersNew, UsersWidgetsoft, ___Users.

Forget about upgrades, even if theyre required. Short of making organization-wide modernization a capital project, no department or business unit is going to blow their IT budget on upgrading software that already works. For example, Microsoft still supports the VB6 runtime, but hasnt supported the VB6 development environment since 2008. So, when the users say, We need to add $X to the application, IT has to respond, We cant add $X unless we do a complete rewrite, because we cant support it in the state its in. Either the business ends up doing without the feature or they make it a demand: We need $X and we need it without a complete rewrite. Then your developers end up trying to breathe life into a Windows 2000 VM without connecting it to the network in hopes that they can get something to build.

Billable hours turn work into a clock-punching exercise. Billing time is how youre judged, and whether or not that time is spent effectively becomes less relevant. Often, by the end of the week, employees are looking for ways to fill up their hours. This is a task that should be easy, but Ive watched developers agonize over how much theyre going to lie to make their timesheet look good, and hit their 85% billable targets. This gets especially bizarre since youre not self-assigning tasks, but you have to have 85% of your time billable, and thus you need to take the tasks youve been assigned and spend a lot of time on the billable ones to make sure you hit your targets, turning five-minute jobs into ten-hour slogs.

We could go on dissecting the problems with billable hours, and these problems exist even when we assume that you can just view your in-house software as a cost center. Some of these problems can get managed around, but the one that cant is this harsh reality: software isnt a cost center.

Ive heard a million variations on the phrase, we make widgets, not software! Twenty years ago, perhaps even ten years ago, this may have been true. Today, if you are running a business of any scale, it simply is not. Its trite to say, but these days, every business is an IT business.

One project I worked on was little more than a datapump application with a twist: the data source was a flow meter attached to a pipe delivering raw materials to a manufacturing process. The driver for reading the data was an out-of-date mess, and so I basically had to roll my own. The result was that, as raw material flowed through the pipe, the ERP system was updated in real-ish time with that material consumption, allowing up-to-the-minute forecasts of consumption, output, and loss.

How valuable was that? Its not simply an efficiency gain, but having that sort of data introduces new ways of managing the production process. From allowing management to have a better picture of the actual state of the process, to helping supply chain plan out a just-in-time inventory strategy, this sort of thing could have a huge change on the way the business works. That wasnt a skunkworks idea, that wasnt IT just going off and doing its own thing. That was a real hook for business process improvement.

Smart companies are starting to figure this out. Ive been doing some work for a financial services company that just hired a new CTO, and hes turned around the We make $X, not software, and started his tenure by saying, We are a software company that provides financial services. Instead of viewing IT as a sink, hes pushing the company to view IT as a tool for opening up new markets and new business models.

So, yes, IT is a cost of doing business. Youll need certain IT services no matter what, often fulfilled with off-the-shelf solutions, but configured and modeled to your needs. IT can also be a cost savings. Automation can free up employees to focus on value-added tasks.

But the one thats underestimated in a lot of companies is ITs ability to create value-added situations. If you make widgets, sure, its unlikely that your software is going to directly change the process of making widgets, so its unlikely that your software is itself technically value added. But a just-in-time supply chain system is more than just a cost savings or an efficiency booster. It can completely change how you manage your production process.

By placing the wall of billable hours between IT and the business, youre discouraging the business from leveraging IT. So here are a few ways that corporations and management could possibly fix this problem.

First, as much as possible, integrate the IT staff into the business-unit staff. This might mean moving some corporate IT functionality out into individual departments or business units (if theyre large enough to support it), or dedicating corporate staff to a relationship with specific business units. Turn IT workers into a steady flat cost, not a per-hour cost. When trying to handle priorities and deciding how to spend this limited resource to get new software developed, business-unit management can set priorities.

If an organization absolutely must use internal billing to set priorities and control demand for IT resources, move as much work as possible into fixed-rate, flat-fee type operations. If a business unit requests a new piece of software, build a fixed-bid cost for that project, not an hourly cost.

While a 20% time approach, where employees are allowed to spend 20% of their time on their own projects, doesnt work in these kinds of environments, an organizational variation where some IT budget is used on speculative projects that simply might not work—a carefully managed skunkworks approach—can yield great benefits. Its also an opportunity to keep your internal IT staffs skills up to date. When youre simply clocking billable hours, its hard to do any self-training, and unless your organization really invests in a training program, its easy to ossify. This can also involve real training, not I sent my drones to a class, why dont they know $X by now? but actual hands-on experimentation, the only way to actually learn new IT skills.

All in all: billable hours are poison. It doesnt matter that theyre a standard practice, they drag your IT department down and make your entire organization less effective. If youre in a position to put a stop to it, Im asking you, stop this. If you cant stop it, find someone who can. Corporate IT is one of the most important yet under-prioritized sectors of our industry, and we need to keep it effective.

[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-billable-hour


Метки:  

CodeSOD: Well Padded

Среда, 22 Февраля 2017 г. 14:30 + в цитатник

We dont receive many CSS-based submissions, possibly because CSS is already pretty horrible. There are real-world, practical things that you simply need to take a hacky, awkward approach with.

Matthew found this code, however, which isnt a clever hack to work around a limitation, and instead just leaves me scratching my head.

    
    @media (min-width: $screen-lg-min) {
      padding: 1rem 1rem 9999px;
      margin-bottom: -9999px;
    }

I liked this approach so much I went ahead and used it on this article. It's a brillant way to control page layout.

[Advertisement] BuildMaster integrates with an ever-growing list of tools to automate and facilitate everything from continuous integration to database change scripts to production deployments. Interested? Learn more about BuildMaster!

http://thedailywtf.com/articles/well-padded


Метки:  

Blind Obedience

Вторник, 21 Февраля 2017 г. 14:30 + в цитатник

Murray F. took a position as an Highly Paid Consultant at a large firm that had rules for everything. One of the more prescient rules specified that for purposes of budgeting, consultants were only allowed to bill for 8 hours of work per day, no exceptions. The other interesting rule was that only certain employees were allowed to connect to the VPN to work from home; consultants had to physically be in the office.

The project to which Murray was assigned had an international staff of more than 100 developers; about 35 of them were located locally. All of the local development staff were HPCs.

With that much staff, as you would expect, there was a substantial MS Project plan detailing units of work at all levels, and assorted roll-ups into the master time line.

A soccer ref holding up a red card

The managers that had created this plan took all sorts of things into account. For example, if you attended three hours of meetings two days a week, then you only had 34 hours available for work; if you had to leave early one day to pick up your kid, it set those hours aside as non-work, and so on. The level of detail even took into account the time it takes to mentally put down one complex task and pick up another one. It was awful to look at but it was reasonably accurate.

Until...

Weather forecasters are wrong as often as they are right. However, the spiraling pin-wheel of snowstorms was getting bigger and barreling down on the local office, and was so imminent that even the forecasters were issuing absolute warnings. Not "It looks like we might get six inches"; but more along the lines of "Get groceries and plan to be shut in for a while".

The storm hit at night and by first light, anyone who looked out the window immediately realized that the forecasters were right and that they weren't going anywhere. In an attempt to be good team players, the consultants called their managers, pointed out that they were snowed in and unable to travel, and given the special circumstances, could they use the VPN and work from home?

The managers all responded that the rules were very specific and that the consultants could only work from the office. Since the consultants were powerless to do anything about the weather or the mountain of snow that had to be shoveled, they took snow days and no work was done.

That's 35 consultants for 2 days or 70 days of (loaded) work, or about 2 ½ months of work that vaporized. Needless to say, this turned the otherwise green time line quite red.

The managers called a meeting to discuss how to make up the time. Their first suggestion was that the consultants put in more time, to which they responded The rules specify that we cannot bill more than 8 hours each day. The managers then asked the consultants if they would work without pay - to get it done. Wisely, the consultants said that they were required to play by the rules set forth by the company, and could not falsify the billing sheets with the wrong number of hours worked.

The sponsoring agencies of the consultants all agreed on that one (free labor means no commissions on said labor).

This went back and forth for a while until it came time for scheduled demos. Only the work was about ten person-weeks behind schedule and the features to be demo'd had not yet been built.

At this point, the senior people who could not see their expected features in action had no choice but to address the snow delay. After much discussion, they decreed that the budgets had to be adhered to (e.g.: billing was limited to 8 hours per day), but the line development managers could hire additional consultants to make up the missed work. The managers got to work adjusting the master project plan.

The existing consultants pointed out that it would take a substantial amount of time to find new consultants, get computers, set up development environments, do general on-boarding and get new developers up to speed; and that it didn't make sense to hire new developers for something like this.

It was decreed that rules had to be followed, and it didn't matter if it wasn't cost efficient to follow those rules.

So they spent about a month interviewing (new project task for existing senior consultants and managers), bringing new consultants on board (getting them equipment, access, etc. - a new project task for managers) , and giving them architecture and code walk-throughs (new project task for existing senior consultants). This necessitated increasing the expense to the project to cover all the additional overhead.

All to save a few bucks in additional billing by already-trained-and-equipped developers, which would have been completely unnecessary if they had just let them work from home in the first place.

But hey, those were the rules.

[Advertisement] Application Release Automation – build complex release pipelines all managed from one central dashboard, accessibility for the whole team. Download and learn more today!

http://thedailywtf.com/articles/blind-obedience


Метки:  

CodeSOD: A Date With a Parser

Понедельник, 20 Февраля 2017 г. 14:30 + в цитатник

PastorGL inherited some front-end code. This front-end code only talks to a single, in-house developed back-end. Unfortunately, that single backend wasnt developed with any sort of consistency in mind. So, for example, depending on the end-point, sometimes you need to pass fields back and forth as productID, sometimes its id, productId, or even _id.

Annoying, but even worse is dealing with the dreaded date datatype. JSON, of course, doesnt have a concept of date datatypes, which leaves the web-service developer needing to make a choice about how to pass the date back. As a Unix timestamp? As a string? What kind of string? With no consistency on their web-service design, the date could be passed back and forth in a number of formats.

Now, if youre familiar with the JavaScript Date datatype, youd know that it can take most date formats as an input and convert them into a Date object, which gives you all the lovely convenience methods you might need. So, if for example, you wanted to convert a date string into a Unix timestamp, you might do something like this:

    var d = new Date(someDataThatProbablyIsADateStringButCouldAlsoBeANumber); //Could also use Date.parse
    return d.getTime();

That would cover 99% of cases, but PastorGLs co-worker didnt want to cover just those cases, and they certainly didnt want to try and build any sort of consistency into the web service. Not only that, since they knew that the web service was inconsistent, they even protected against date formats that it doesnt currently send back, just in case it starts doing so in the future. This is their solution:

/**
 * Converts a string into seconds since epoch, e.g. tp.str2timestamp('December 12, 2015 04:00:00');
 * @param str The string to convert to seconds since epoch
 * @returns {*}
 */
function str2timestamp(str) {
    if (typeof(str) == "undefined" || str.length == 0) {
        return;
    }

    if (typeof(str) != "string") {
        str = "" + str;
    }

    str = str.trim();

    // already a unix timestamp
    if (str.match(/^[0-9]{0,10}$/)) {
        // TODO: fix this before january 19th, 2038 at 03:14:08 UTC
        return parseInt(str);
    }

    // most likely a javascript Date timestamp that is in milliseconds
    if (str.match(/^[0-9]{13,}$/)) {
        return parseInt(str) / 1000;
    }

    var ts = Date.parse(str);
    if (ts) {
        return ts / 1000;
    }

    // fix 00:XX AM|PM & 00:XX:XX AM|PM
    str = str.replace(/00:([0-9]{2}(:[0-9]{2})?\s*[AP]M)/i, "12:$1").replace(/([0-9]{2})([AP|M])/i, "$1 $2");

    // remove any "on, at, @, or -" from the date
    str = str.replace(/\s*(at|@|\-|on|\|)\s*/gi, " ");

    str = str.replace(/\s*(mon(day)?|tue(s?day)?|wed(nesday)?|thu((rs)?day)?|fri(day)?|sat(urday)?|sun(day)?)\s*/gi, "");

    str = str.replace(/([0-9]{1,2})(st|nd|rd|th)/, "$1");

    // replace bad time zone
    if (str.match(/\s+ET$/)) {
        if (d.getTimezoneOffset() == 240) {
            str = str.replace(/\s+ET$/, " EDT");
        } else {
            str = str.replace(/\s+ET$/, " EST");
        }
    }

    str = str.trim();

    var ts;

    ts = Date.parse(str);
    if (ts) {
        return ts / 1000;
    }

    // jan/3/2001
    if (m = str.match(/!^([a-z]+)[-/ ]([0-9]+)[-/ ]([0-9]+)(.*)$!i/)) {
        str = m[2] + " " + m[1] + " " + m[3] + m[4];
    } else if (m = str.match(/!^([0-9]+)[-/ ]([a-z]+)[-/ ]([0-9]+)(.*)$!i/)) {
        // 3/jan/2008
        str = m[1] + " " + m[2] + " " + m[3] + m[4];
    }

    ts = Date.parse(str);
    if (ts) {
        return ts / 1000;
    }
};

I particularly like that, if its not a string already, they turn it into one, because regexes are the best way to count the digits in a string, apparently.

In the end, is TRWTF this code, or the inconsistent representations of the web service endpoints?

The Mexican girl from the taco commercial who says, 'Why not both?'

[Advertisement] Otter enables DevOps best practices by providing a visual, dynamic, and intuitive UI that shows, at-a-glance, the configuration state of all your servers. Find out more and download today!

http://thedailywtf.com/articles/a-date-with-a-parser


Метки:  

Error'd: Taking Things a Little Too Literally

Пятница, 17 Февраля 2017 г. 14:00 + в цитатник

"Web design pro-tip: If it takes a while to load data, just put an 'Animated loading spinner' on the screen," wrote Stuart L.

Jeremy W. writes, "Not what you'd expect to see on Microsoft's site and especially not what you want to see when trying to install an IIS extension."

"I think someone needs to fidget with their calculator instead," writes Al.

"Yeah, I logged into Credit Karma Tax's site around that time, but I'm pretty sure that it wasn't with the computer I had back in 1998," Shawn A. writes.

Jay C. wrote, "Apparently the special ingredient is HTML."

"When you change your logoff sound to 'Bohemian Rhapsody', you and your computer are going to wait a while to shut down," Geoff O. wrote.

"Gosh, I could play it safe and get the this drawer in the color 'small' to match my decor, or throw caution to the wind, live a little and order a 'medium' color instead!" writes Mike S.

[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/taking-things-a-little-too-literally


Метки:  

Software on the Rocks: Rolling for Dollars

Четверг, 16 Февраля 2017 г. 14:30 + в цитатник

Today, we present our second installment of Software on the Rocks, complete with new features, like an actually readable transcript done by a professional transcriber. Isnt that amazing?

In todays episode, Alex and Remy host a special guest, Justin Reese, founder of Code & Supply, one of the largest developer community organizations out there, with a nearly constant stream of events. In this episode, we discuss what building a community is like, when is it fair to really tear into bad code, and that time Alex made 10,000 people late for work.

This episode of Software on the Rocks is brought to you by Atalasoft.


MP3

Web Player

Tune in two weeks, when well have Jane Bailey, one of our writers, to discuss working for the site and the perils of Programmer Anarchy. Follow future episodes here on the site, or subscribe to our podcast.


Transcript

Alex: I guess this is another podcast we’re doing.

Remy: We are doing this again, and you know what? Not only are we doing this again, Alex, but we have brought a friend. This is Remy Porter, editor of The Daily WTF. We’ve got Alex.

Alex: Hello, everyone. Hello, Remy.

Remy: And we have with us Justin Reese. So, uh, Justin, why don’t you tell us a little bit about yourself?

Justin: Oh. Oh, no. Remy met me through Code & Supply, which is an organization that I started to kind of foster a strong software community here in Pittsburgh.

Alex: What sort of things do you do?

Justin: Well, so, Code & Supply started because there were lots of disparate meet-ups around the city and just holding events. And there were some really small ones that had great ideas and great people involved but they were really small and they were susceptible to one person failing to do something. And the whole community around a language would die in the city. So, I wanted to make a stronger organization, bring on sponsorship money, and pay to do really cool things, and it just kind of –

Alex: And so, this is all Pittsburgh-based, all Pittsburgh local. It sounds like a pretty interesting idea.

Justin: Yeah, along with something like 8 to 12 events every month, we held Abstractions this year. You know, it was a very, very large conference.

Alex: Oh, that was your conference?

Remy: That was his conference. I was an attendee. I just showed up. This was an amazing conference.

Justin: What’s really amazing is, like, we had a lot of people there. We’re really focused on creating connections between people, so we – The whole focus was building a bridge between, like, a design community, the ops community, the development community into one thing. But we ended up doing some really amazing things, like Larry Wall, the inventor of Perl, for the first time ever, meeting Joe Armstrong, the inventor of Erlang.

Alex: Now, Justin, is Abstractions a not-for-profit or – This whole Code & Supply thing, like, is this someone’s full-time job? I mean, it sounds almost hobby-like, but then, you know, a conference – that’s, like, gone beyond a hobby. You know, there’s some real risks you have to take on to do that.

Justin: That’s kind of the reason behind Code & Supply, though, is so that the risk is minimized a little bit. I signed contracts with venues and things that would have financially ruined me if something went wrong, but, you know, having Code & Supply as an organization at least protects me, personally, a little bit.

Alex: And just to be clear, when you say, “huge financial risks and liabilities,” you know, this is the thing with conferences that always amazes me, right, is that, you know, we’re talking, like, hundreds of thousands of dollars. And why take on all that liability for, effectively, a hobby?

Justin: Alex, you have a pretty good point. It is –You know, I mean, it is, to a point, fun, and I’d love to get to a point where I can make it my full-time job. It’s not quite there yet, but, you know, all the money we’ve made so far has been re-invested into our community. So, we took that Abstractions money that we made and we signed up for a really long lease for a community center so that we can have a place to hold events in perpetuity. And most of the time, I’m making decisions based on how to make the community more welcoming, ‘cause growth is kind of what makes Code & Supply awesome, is its incredible size to do really fantastic events. To grow, you got to be welcoming and get all the people involved.

Alex: Now, Justin, I’m actually in the midst of organizing my own conference here. Well, I shouldn’t say “my own.” It’s DevOpsDays Tokyo. And this is one of the same issues that we’re facing is this whole notion of being open and being welcoming. The things that I see a lot are the elitism.

Justin: Alex, I think that combating that feeling of elitism is kind of important. You know, we’re a polyglot community, and that means a lot of language, so people make choices for different reasons, and that “best tool for the job” mentality really goes a long way.

Remy: And so, Justin, what would you say to the – there’s this one kind of tribe of elitists I see. They’ll grab code samples from other people’s codebases, usually offered by a disgruntled co-worker, and then they’ll post these code samples on a website. They, like, have this “Code Sample of the Day,” and they do these very critical code reviews. I don’t know. I feel like these people could be part of the problem.

Justin: Remy, are you talking about something specific?

Remy: I’m talking about The Daily WTF.

Justin: Yeah, yeah, yeah, yeah. That’s –

Alex: Oh, hey. That’s –
[All laughing ]
That’s the podcast we’re doing today, isn’t it?

Remy: Yeah. Wow, yeah.

Alex: The pieces come together. Well, I guess –

Justin: I know it’s a podcast, but I’m pulling my collar nervously.

Alex: Well, well, um, there really is a difference between this hobbyist code – you know, the stuff you’re gonna go – now, obviously, it’ll be the stuff you post on GitHub or things like that, right? Code that you’re doing either for a hobby or trying to learn versus “This is your job and you are failing so bad at it that you should not be accepting money to do this.”

Justin: When you work at a company of a certain size, you kind of lose these excuses. I’ve seen shaming of open-source code, and that’s sad and never – never right. But I’ve seen production products from companies that are gigantic and have huge software teams on really simple ideas and core features to their product, and I have no problem calling that out, because if FedEx has a help link that leads to a 404 page, that’s a problem.

Remy: That’s actually a good segue into one of the things I wanted to bring up. This may come as a shock to everyone, but I am a bit of a giant nerd, and as a giant nerd, that does mean I play D&D-type campaigns, right, role-playing games of all the different stripes. And one of the groups I play with, we meet weekly online using a service called Roll20. Roll20 was a big Kickstarter success story. They wanted to build an online tabletop. They did a Kickstarter. They got umpty-ump millions of dollars to do this, and this is where, kind of, the wheels sort of come off, because it is an incredibly small team, from what I understand, and the team that they’ve built doesn’t really have the talent to do what they need to do. Just today, they actually did an announcement, and this is partially a piece of good news. They’ve enabled a new feature. They call it QuantumRoll.

Alex: Ooh, that sounds cool.

Remy: Ooh, isn’t that fancy? They now utilize a, quote, “true random” source of entropy. But it’s the thing that goes before that announcement that really got my attention, ‘cause we’re talking about certain things you don’t do and certain signs of bad software quality. And their announcement actually starts off, quote, “Rather than relying on client-side pseudo-random number generation,” client, in this case, being your web browser –

Alex: Oh, actually, that’s a nice system, because, now, what if you want to roll a natural 20?

Remy: That’s right.

Alex: What if you want to roll a 14? This is perfect. So, you know, and I think that’s a good differentiator. If this was just some hobby website where we can excuse it because it’s just, you know, their fun little side thing and who cares, right? This is literally their job. And, yeah, I think this is absolutely a case where you should call them out on it. Yeah, absolutely. That is – I don’t think, at all, it’s elitist to call that, you know, what it is – just crap software.

Justin: The moment you start to take money for something is the moment that someone has the right to start complaining about that thing.

Alex: Now, Justin, that’s a great point. Now, just, I got to ask, though – garage-sale rule. When does that apply?

Justin: Hmm.

Remy: What’s the software equivalent of that, though? ‘Cause there’s no garage sale of software, except maybe Good Old Games, right?

Justin: I would say that open source is kind of the garage sale software.

Remy: Well, you could always go and, uh, start open-sourcing BuildMaster.

Alex: You know, so, that’s a great point, Remy. So, Inedo’s products – we have open-sourced all of our extensions. But our core product code is not open source, and there’s actually a very, very good reason for it that I don’t think is that obvious. When we started, there was no GitHub. There was no community portal. We have everything inside of this ancient, source-control tool called SourceGear Vault. SourceGear Vault, I believe, still today is marketed as a better replacement for SourceSafe.

Remy: That’s what I wanted – I was gonna ask that. I was like, “How does this compare to SourceSafe? ‘Cause it sounds like it’s similar.”

Alex: Yeah. Yeah. It is, but better, so…

Remy: Well, that’s not hard.

Alex: No, no. And to be fair, it really is a lot better than SourceSafe. That’s actually all I can say about it. But, you know, for what it was, it’s fine. But now just picture – We’ve got this giant legacy of code. We’re a small team. What week do we spend completely getting all of the code outside of SourceGear? It would be nice to do, but it just – Everything that we’re doing right now works, and there just hasn’t been enough of a demand to do it.

Justin: Uh, guys, I just Googled SourceSafe, so that shows you how much –

Remy: Oh, no! Oh, he’s so young, so na"ive. Oh, my goodness.

Justin: The last stable release happened when I was in high school, so…

Remy: When I left PPG, my last job – I left them in 2014 – they had just, just gotten their last SourceSafes migrated into TFS.

Justin: You know what, Remy? Interesting fact about me – I am probably one of the few people that has been paid to do both COBOL and Ruby. So, you know, just talking about, you know, dead languages, some of these languages will never die.

Remy: COBOL will outlive everyone listening to this podcast, hands down.

Alex: That’s a really scary thought. But true. So, you might find this particularly interesting, Justin. So, currently, I’m in Japan, and COBOL is a surprising part of I.T. A lot of this not-wanting-to-change is endemic in their culture because the change has nothing to do with driving business requirements.

Remy: And that segues, really, into an interesting topic, because one of the things – There’s not just a cost of changing, right? There’s also a risk, because that change might fail.

Alex: Yeah, really, it comes down to an unknown amount of work. It’s a significant risk. And it would be awfully nice if there was an easier way for us to identify or sort of manage these sorts of risks.

Remy: We brought up, and the end of our last episode, that we wanted to talk about, you know, risk management, risk mitigation, and how that impacts working in I.T. in ways that I don’t think a lot of developers think about, and we had some homework to come up with some buzz words.

Justin: How about YoloOps?

Alex: Oh, my God. I love it.

Remy: Ooh.

Alex: Are we talking, like – Did you say YOLO or yellow?

Justin: Yeah, YOLO. YOLO.

Alex: Oh, my God. Those are actually both really good, because neither of them makes sense, kind of a lot like, you know, uh, DevOps, but I like it.

Remy: Yeah, ‘cause over –like, the first time you said it, I honestly thought you said YellowOps, and I actually was kind of excited about YellowOps, ‘cause, you know, you think about what does every manager want to see, right? They want that dashboard with a stop light on it that’s red, yellow, or green. Right? YellowOps, man. “We want to get out of the yellow and into the green. How do we do that? That’s what we need.”

Alex: Well, Justin, I think we may actually have a term now, and that could be YellowOps. Either “Yellow” or “YOLO.” Say it fast enough, doesn’t really matter. But I really like where you were going with it, Remy, of the red, yellow, green stop light. How could we work YOLO into Ops?

Justin: So, YoloOps – Hold on, hold on. YoloOps – There are three circles in YoloOps, and turn it sideways, boom.

Remy: Oh, my gosh. It’s the stoplight!

Alex: Whoa, whoa.

Remy: Oh, that is so good.

Justin: I just made a logo on a podcast.

Alex: And, you know, Remy, please tell me more about what YOLOPS or YoloOps is and how it can help my organization.

Remy: All right. So, you know how you’ve got an organization with a legacy project and they just can’t change it? Or when there’s a new process that you could employ, like, say, DevOps, and management just can’t get behind it? YoloOps understands that the reason these things happen isn’t because management is just hidebound. It isn’t because people are just lazy. It isn’t because people are afraid of new things. It’s because they’re trying to estimate how much risk they’re taking on and reacting based on that risk. Let’s say you’re working at a company with a craptacular process, right? It’s just awful. They’re changing code in production, and they got all of these problems. But they’ve been delivering software that way for the past five years. Well, folks, you shouldn’t be writing changes into production. You’re now proposing a change, and there is risk. There’s risk to making the change. There’s risk that it is the wrong change. And they have to now measure this against the process that they’re already doing, which, while it’s got its flaws, it works.

Alex: Okay. I’m starting to see this. I’m gonna rate that as a solid 6.5 out of 10 on the “It Made Me Excited About Learning About This Topic,” but what I feel is missing from the explanation is tying it back together to the absurd name.

Justin: So, Alex, I’m gonna cut straight to the point here. Um, you know, people really just drive fastest through the yellow lights anyway, so we’re really just trying to always live in the yellow lights. So, do you want your business to live on a red light, when everyone’s stopped, on a green light, when everyone’s just taking their time moseying around, or do you want to live on a yellow light, where everyone’s dashing through the intersection, trying not to die?

Alex: This is brilliant. No, I think YellowOps, YOLOPS, YoloOps – I still am not clear on what the term is, but you know what? As a manager, I generally don’t understand most of the terms you developers are throwing at me, so I like it. What I want to know is when is this gonna be the keynote speech at Abstractions, and how many developers do I send there to learn about this topic so we can implement it in our organization?

Justin: I mean, I still don’t really know what it is, but I am already selling consulting on it, so, um, I would say by the end of the month I will have a full conference on it, and you should send your entire team.
[ Laughter ]

Alex: You know, so it’s not quite traffic/driving related, but, you know, you might appreciate this thing. So, Remy, I don’t know if you’ve been to Japan. Justin, have you been to Japan before?

Justin: I have not.

Alex: Oh. Anyway, I strongly recommend it. Wonderful place. You know, everything you’ve seen about it, all the stereotypes, everything you’ve seen on TV  completely true. You know, I was out cycling the other day, and, you know, there’s, of course, railroads. You know railroad crossings where the little hand comes – not the hand. What the hell is that thing? A railroad crossing where the divider thing comes down and it’s like, “Oh, a train is coming.” I cycled up. The thing came down. “Oh, now it’s time to just take a quick break.” I lean my bike against the arm that’s sitting there. I notice a train is slowing down ahead of the intersection. Okay. Fine. “Oh, this train – Why is it slowing? I don’t get it.” So, then the train stops. Dude runs out of the train, in his uniform, right, apologizes to me, and then tells me to please take the bike off of the little arm, and then runs back to the train and starts it again. I – Mortified is not exactly a strong enough word. Traffic was lined up. I literally caused a train delay because I leaned my –

Remy: You made, like, 10,000 people late for work. I want to, first off, thank Justin for coming along with us on this little podcast adventure. Before we wrap up, you mentioned this community center.

Justin: Our events have gotten a bit too focused on lecture-style content over the past year, and I felt that there was a really strong need to make things a bit more social again, and what better way to do that than get space above a bar with 70 beers on tap? I’m really excited because it’s going to be something that we can really optimize for what we do. We can, you know, put a camera in the ceiling so we can have better live-streaming. We can keep programming books on hand, have lounges that are optimized for people showing off their code to some other people. You know, the permanency of it is just really its main advantage, and I’m really excited for being able to create this home. And, you know, during the day, we’re gonna actually rent out desk space to all the people that work remotely in the city and…

Alex: So, Justin, that sounds really interesting. So, basically, you know, if I had to sum up the Code & Supply space, right, it is like a co-working space, but primarily for coders, that happens to be above a really cool bar.

Justin: During the daytime.

Alex: During the daytime, of course.

Justin: During the daytime, yeah, yeah. But, you know, once it’s night, we’re gonna be this super awesome place for people to come learn for free with our community events.

Alex: Yeah, by and large, that sounds like a pretty interesting place. I mean, I’ve certainly seen the co-working spaces. I’ve certainly seen, you know, the companies that try to put on events here and there, but I really like the combination of the two. And, you know, based on all the stuff that you’re trying to do with getting this community built, I think it’s a step in the right direction.

Remy: I do want to give a shout-out to our sponsors – Atalasoft. Again, Atalasoft is sponsoring this podcast. They make an SDK for doing document management, document scanning, and things like that. You can go check them out. We’ve mentioned that this co-working space is above a bar. The bar in question is a Pittsburgh chain called the Sharp Edge. They specialize in Belgian beers. They have a huge draft list. We are not sponsored by Sharp Edge, but if they wanted to sponsor us by donating beer to Software on the Rocks, I would love that. I’m 100% in favor of that.

Justin: Or even just, you know, take a little bit off of my rent or something this month.

Remy: Well…

Alex: I would actually prefer the beer, to be perfectly honest.

Remy: Yeah.

Alex: Yeah, I think that would be a better system for all involved.

Automated Machine Transcription

[BREATH][COUGH] [UH][BREATH] and.
Welcome to software on the rocks and a leader you to has brought you buy a possible.
So i guess what this is another part of gas were doing.
We are doing this again and you know that not only are we doing this again.
Its but we have brought a friend this is room border at to the daily desert weve got alex and load every wont.
So ready and we have with a just in reach so just in one it tells a little bit about yourself.
For me that to me through caused by which is an organization that i started to kind of foster strong software commanding here in pittsburgh hell sort of things to do.
So while kids by started because there were on onto.
The spread me no choice around the city and just holding the advanced there some really small ones that had great ideas and great people nepal.
But they are really small on it they were susceptible to one person failing to do some.
[BREATH] and then the whole commuting around a language but die in the cities i wanted to.
So stronger organization im in sponsorship me.
[UM] and paved to do really cool things and at risk.
So this is all hit surveys style expert local it sounds a pretty interesting idea.
You know along with hosting something like a the toilet months every month we have.
This options this share it was a very very large coffee and.
This was this so that was discovered this was as an attendee i know i just showed up this was an amazing calm rock and that.
And once whats really amazing as we have a lot of people there but we are really folks.
They started creating connections between people and so the whole focus was getting.
For between one day desire to me the opposite community that development meaning to one thing but we ended up doing some really amazing things like.
Larry well the mineral for the first time ever meeting im showing the into her low.
Now just in his abstractions.
Not for profit this whole code and supply thing because this is like someones.
Before can child i mean how do you it sounds almost have.
[UM] then at a conference that thats like on beyond how you have is something cross to take on view.
Thats kind of the reasons behind coins pie though is so that the risk is minimized a little bit by side.
Contracts with then use and things that would have fun actually reminded me of something that wrong.
But you to having to inspire as an organization at least protects me personally in a little bit and just interest to declare you know we use.
A huge financial risks and liabilities you know this is a thing with conference is that always amazes me right is that were talking like.
Hundreds of thousands of dollars white taken all that i ability for effectively a hot.
So to have a pretty good point is i mean [BREATH] two points on and id like to [SMACK] and make it my fault and thats not quite but all the mind weve made so far it and reinvested into.
Our community so that a facts and find that we made and we signed up for a but on these for our communities and [COUGH] so that we can do have a place the whole.
But events for ink opportunity and most thats i dont making decisions based on how to make that can be more work.
Human because growth these kind of me scans for awesome is its incredible size the do really fantastic events to grow youve got to be welcoming and get all the people of.
Now just an actually in the midst of organizing my own conference here well i shouldnt said my old its death upstages tokyo.
And this is one of the same issues that were facing is this whole notion.
And of being opened the welcoming the things that i see a or the disease.
And so i think the combating that feeling believers im is the of.
For the polyglot.
The community and that means a lot of language has so people make choices for different reasons and that this talk for the job mentality really goes along.
Coming and so just in what would you say so theres this one kind of tribe of a leaders i see a failed grab.
The code samples from other peoples code bases usually offered by a disgruntled coworker and the post.
These code samples on a website they have this code sample of the day and they.
These these very critical code reviews i dont know i feel that these people could be part of the problem.
[BREATH][SMACK] [SMACK].
Im talking about the daily and know.
[SMACK] thats the palm cast reducing to be.
The [BREATH] just cutting well i guess this is a point cast but themba my color deliriously [BREATH] well.
You know there are really is that the difference between you know this hobbyist.
So you know the stuff that youre going to go now obviously itll be this eighty percent cape higher were things.
Very called that youre doing by her for a hobby are trying to learn verses.
This is your job and your failing silk.
By that is that this you should not accepting money to do this when you working a company.
Of a certain site he cant use these excuses.
Ive seen shaming of open source code and that said.
Who never never rain.
Ive seen production products.
From companies that are gigantic can have huge software teams on the really simple idea core cores.
The features to the product and i look becoming the because if fenix has a health.
The work that leads to for four page that is a problem.
That thats actually get segue into one of the things that i wanted to bring up this make it was shocked everyone but i am a bit of a joint.
I heard and as a giant heard that does mean.
[SMACK] did detroit role play games of all the difference.
Sites and one of the groups i play with we meet weekly online using.
The third is called role twenty group twenty was a big kickstarter success story.
They want to build an online tabletop they did a picture or they the millions of dollars to do this and this is where kind of.
The wheel sort of come off because it is an incredibly small team from.
I understand and the team that theyve built doesnt really have the talent to do what they need to do just today they actually.
Get an announcement and this is partly a piece of good news.
People the new feature they call it quantum rowlands hulu does that can see they now utilize equals true random source of entropy but its the thing that goes both.
For to that an announcement that really got my attention is were talking about.
Things you dont do and sort of signs of bad software quality and their announcement actually starts off quote rather than.
Relying on clients side pseudo random number generation client in this case being your web browser.
Ill actually thats thats a nice system because.
Now what if you want to roll a national twenty had re want to roll fourteen this is perfect.
And i think thats a good differentiate if this was just some hobby website.
An excuse it because its just you know theyre there fund little side thing and who cares right this is a little their shop and yeah i think this is absolutely.
Is where you should call them or not.
Absolutely that is i dont think at all his leaders to call that.
You know what it is just crap software the moment he stood.
To take money for something [BREATH] case is the moment that someone has the right to start complaining about that they just and thats a great point not just.
And.
[UM] flu.
On sale rule wind is at a fire.
Whats the software equivalent of that those because youre not going to and theres no garage sail of software its that may be good old games rate.
I would say that i hope and so its kind of grow growth still song.
Well you can always go and start open source and built master.
You know so thats a great point randy so it needs products weve open source all.
Over extensions but take your product how does not open source.
And theres actually a very very good reason for.
That i dont think is that obvious when we started there was no how there was no community coral we have everything inside of this ancients.
He was controlled to is called source years old source years old.
Really still today is marketed as a better replacement for source is.
And here i am but when i was not a ask that i was how does this compared to source it because it sounds like it.
[BREATH] as it is but better so well thats not hard.
I know to be.
Theyre really is a lot better can source safe.
Thats actually all we can say about that.
You know for what it was its fine but not just picture weve got this giant legacy of.
So were a small team what we do we spend.
Completely getting all the code outside of.
For hear it would be nice to do but in just.
Everything that were doing right now it works and that hasnt been enough of a demand.
To you.
Ok i just saw safe to show how much.
And he so young so not eve oh my goodness the lines.
They were really happened when i was in high school so life.
As my last by [BREATH] thousand fourteen they had.
But youre still lost.
Map in there are lost source saves migrated into.
And what worries teaching fact about me i probably one of the few people those been paid to do both coal.
And grubby so you know just talking about languages some of these like just never.
And coal outlive everyone listening to this spot gas hands down thats a really scary thought but.
So this is my friend this really an interesting just.
Heart in an inch and coal is a surprising part of it.
A lot of this not one thing to changes.
Endemic in their culture because the change has nothing to do a driving business acquirers and that.
No raises segues is really into an interesting topic because one of the things theres not just a cost of change.
And right theres also a risk because that changed might fail.
Only it comes down to a unknown and unknown.
Im work its its a significant risk and it would be awfully and if there was an easier way for us to identify sort of manage these sorts of risks and we.
Brought up at the end of our last episode that we want to talk about you know.
Risks management risk mitigation and how that impacts working in it in ways that i dont think a lot of developers think about and we had some home.
Mark to come up with some buzzwords.
[UH] yell it looks and youre little i go home.
Why are we talking [BREATH] she said youre lol word.
I had no lol you go home.
Those are actually both really good because neither to make sense kind.
You wont lee you know designs board [UH].
[UH] because the first time he said i am mostly but you said yellow ups and to is kind of excited about yellow because you know you think about.
What does it reminded you want to see right they want that dashboard with a stop way on it thats.
Red yellow were green right yell alarm and we want to get out of the yellow and into the green how do we do that thats what we need.
Well is that i think we may actually have a time.
And that could be yo when other yellow yellow.
The state fast enough doesnt really matter that i really are going to me of the red yellow.
So green stoplight how could be work.
Joel going into into.
So so that yellow ops on put on your whole arms there are three circles in your little ops and turn out ways do.
Actually my gosh its this stop the world.
That i just made a little gone.
His ready please tell me more about what you up is or yellow ups and and how it you hoped my organs.
Its so you know how youve got an organization with a legacy.
The product and they just cant change it.
Bl or when theres a new process that you could employed like say deaf ups and management just cant get behind it youll go up.
From her stands that the reason these things happen isnt because management is you as high bad.
This is because people are just all easy it is because people.
Youre afraid of new things its because theyre trying to estimate how much risk theyre taking on and reacting.
Based on that risk and lets say youre working at a company with a crap tack youll or process its just off.
People they are changing code and production and it got all of these problems but theyve been delivering software that way for the past.
Five years well folks these should be right in changes into production youre now propose.
You take a chain and there is rips theres was to making the change theres risk.
That it is the wrong change and they have to know measure.
[SMACK] this against the process and that theyre already doing which while its got its flaws it works ok im.
Learning to see this i think im going to rate that as a solid sixpoint fire about ten on the it made me excited about learning about this topic but what i feel is missing from the excellent.
Nation is time it back together to year certain name.
So how its on the can straight to the point here you know people.
Really just dr fast as through the elites anyway so we really just.
And to always live in the other leads so you want your business.
A live on a red light when everyones stopped on a green light when i was just take it in their time amazing around put one live on that a yellow late where it ones to actually through the intersection try and of today this is really now.
Yellow ops youll lots you as i still them not clear what the term as but you know as a manager i generally dont understand in most of the terms you develop presenter and i get me so.
I like what i said what is is going to be the keynote speech at abstractions and.
How many developers do i send her to learn about this topic so we can incremental in our musician.
I mean i still dont really know what it is but im already selling consulting on it so.
I would say by the end of the month i will help full conference on it and you should send your entire team.
No its not quite traffic.
Rising related but you might have.
We this things so sorry i dont know if youve been the japan.
From the recommended wonderful place all everything youve seen about are all the serious.
[SMACK] everything youve seen on tv completely true you know i was out cycling the other day and you know.
Now theres of course railroad gene of real with crossing that the little little hand comes at the hand of the hells i think but were element crossing where this.
The divider thing comes down is like a chinese coming.
Michael up the thinking down known now time to just take a quick great i leave might buy against the or that thats sitting there.
I know this trained as rolling down the head of the.
Russian find this trained wise is swelling i dont get it so then the prince stops do runs.
[SMACK] out of the train then you uniform i apologize is to me and then tells me to please take the by.
And off of the little arm runs to the train and starts in again i mortified.
Is not an artist drug worth traffic was lined up and literally cause a train dull because it you a.
As people later i want to first thank just.
And for for coming along with us on this little podcast of.
Nature before we wrap up to mention this community center.
Once have gotten to focused on let you style content over the past year and.
Now that there was a really strong need to make things a bit more.
Social again and better way to the then.
Kids space of a borrow with seventy peers on top im really excited because its going to something that we can.
And really optimize for what we do can.
And play.
I have the same one so we can have a better lives streaming we can keep.
Our booming books on hands have lounges that have been or optimized.
For people showing off their coat to some other people.
You know the prominent so that was just were really its a man advantage and.
Really excited for being able to create this has been during that.
They were going to actually when youre in out for as space to all the people that work remotely in the city and so.
Just in the essentially the interesting so basically if the some of the code and supplies.
This space right it is a black coworking facebook primary for colors that happens to be above a really cool bar.
From the daytime [SMACK] showing the daytime.
Here but you know when once.
This like were going to be this super and place for people to come and learned for free from both are can you.
That [BREATH] that something.
On the interesting place of enough starting the seen the cotton spaces i certainly scenes.
You know the companies that try to put on events here and there but i really like the combination of the two and.
You know based on all the stuff that youre trying to do with getting this community build i think its a step in the right direction.
How do you want to get to shed out to our sponsors a tablet soft again until a soft is sponsoring this podcasts.
They make a a for doing document management document scanning and things like that the them how weve mentioned.
This coworking spaces above labor the bar question is is a pittsburgh chain called the sharp as these special.
Lies in melting beers they have a huge tracked list we are not sponsored by a sharp edge but they wanted to sponsor us by dominating beer to software of the rocks.
I would love that [UH] hundred percent in favor of that.
For you ingesting take a little bit off my iran or something thats found team.
We actually prefer appear to be perfectly on and i think that youd better system for all would fall.
[BREATH][UH] [UH].
The british has been cloud [UH] uses for some give commonplace [UH].
The problem.
Now.
[UH][SMACK].

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

http://thedailywtf.com/articles/rolling-for-dollars


Метки:  

CodeSOD: Notted Up

Среда, 15 Февраля 2017 г. 14:30 + в цитатник

Theres an old saying, that if your code is so unclear it needs comments to explain it, you should probably rewrite it. Dan found this code in a production system, which invents a bizarre inversion of that principle:

static BOOLEAN UpdateFileStoreTemplates ()
{
  BOOLEAN NotResult = FALSE;

  NotResult |= !UpdateFileStoreTemplate (DC_EMAIL_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (DC_TABLE_HEADER_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (DC_TABLE_ROW_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (DC_TABLE_FOOTER_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (WS_EMAIL_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (WS_TABLE_HEADER_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (WS_TABLE_ROW_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (WS_TABLE_FOOTER_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure

  return !NotResult;
}

Here, the code is clear enough that I dont need comments, but the comments are so unclear Im glad the code is there to explain them.

Not-ing a fail certainly does not make a win.

[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/notted-up


Метки:  

Announcements: Hired: Salary Trends

Вторник, 14 Февраля 2017 г. 18:00 + в цитатник

You may remember our new sponsor, Hired. To help them match up talent with employers, theyve created their own proprietary dataset about salary and hiring trends, and have published their annual report about what theyve found.

There are a few key things in this report. First, as we all know, you dont need to go to Silicon Valley for a good job in the tech sector- and even though the salaries are among the highest at an average of $134K a year, with cost of living factored in, even the notoriously expensive New York and LA can give you an advantage in purchasing power.

Hired's map of salaries by region

If you are thinking of a move, the hot cities are Austin, Singapore and London. Non-local candidates are getting more offers at higher salaries than anywhere else. Even if you dont want to go to one of those cities, in 12 of Hireds 16 markets are offering better salaries to relocators.

Age and race still matter. While African-American candidates are actually more likely to get hired, that may be because theyre being hired at a much lower salary than white candidates. Latino and Asian candidates ask for salaries comparable with white candidates, and are both less likely to get hired.

If youre between 25 and 30, youre much more likely to get an average job offer for your experience level, but past 45, youll start to see a decline.

Theres a lot more in here, including lots of global data. Read the white paper yourself, and if you think you could take advantage of these trends, get on Hired today and get some offers.

[Advertisement] Otter, ProGet, BuildMaster – robust, powerful, scalable, and reliable additions to your existing DevOps toolchain.

http://thedailywtf.com/articles/hired-salary-trends


Метки:  

Поиск сообщений в rss_thedaily_wtf
Страницы: 124 ... 48 47 [46] 45 44 ..
.. 1 Календарь