Recent Articles

Dec 2021

Fin

by in Error'd on

At the end of the year, it's customary to reflect on the past and imagine a future. Here at Error'd, reflecting on the past is natural, but all we can do about the future is hope. So to close out the longest 2020, here are a handful of little muffed missives.

Occasional contributor Peter diagnoses a counting error. "Looks like the web server had a thing or two to add to the discussion."


Best Of 2021: Totally Up To Date

by in Best of… on
2021 has been a year that flew by so quickly it's hard to keep up. But keeping up with changes can frequently be harder than it seems.

NOAA Central Library Card Catalog 1

The year was 2015. Erik was working for LibCo, a company that offered management software for public libraries. The software managed inventory, customer tracking, fine calculations, and everything else the library needed to keep track of their books. This included, of course, a huge database with all book titles known to the entire library system.


Best of 2021: The Therac-25 Incident

by in Best of… on
It's not always "fun" bugs and flaws. Earlier this year, we did a deep dive on a much more serious example of what can go wrong.

A few months ago, someone noted in the comments that they hadn't heard about the Therac-25 incident. I was surprised, and went off to do an informal survey of developers I know, only to discover that only about half of them knew what it was without searching for it.
I think it's important that everyone in our industry know about this incident, and upon digging into the details I was stunned by how much of a WTF there was.
Today's article is not fun, or funny. It describes incidents of death and maiming caused by faulty software engineering processes. If that's not what you want today, grab a random article from our archive, instead.

When you're strapping a patient to an electron gun capable of delivering a 25MeV particle beam, following procedure is vitally important. The technician operating the Therac-25 radiotherapy machine at the East Texas Cancer Center (ETCC) had been running this machine, and those like it, long enough that she had the routine down.


Best Of 2021: Worlds Collide

by in Best of… on
As we take inventory of the past year, let's look back on one way people track history. --Remy

Cundoki

George had gotten a new job as a contractor at a medium-sized book distributor. He arrived nice and early on Day 1, enthusiastic about a fresh start in a new industry.


Best of 2021: It's a Gift

by in Best of… on
Per tradition, we're taking the week before the new year as a chance to review some of our favorites from this year. We open with this one from way back in January. Consider it… a gift.

Tyra was standing around the coffee maker with her co-workers when their phones all dinged with an email from management.

Edgar is no longer employed at Initech. If you see him on the property, for any reason, please alert security.


Some Like It Hotter

by in Error'd on

Fast approaching the end of the Gregorian calendar, things start to happen all at once, just to get them over with. According to Daniel D. "It's November 21 and Facebook can't decide which tomorrow comes first."

november


Git Pull, for the Holidays

by in CodeSOD on

We're heading into the holiday season. We had some rather ambitious plans for a special Christmas event, but for a variety of reasons, all the various moving parts couldn't come together.

There's always next year, though. Instead of rehashing Christmas carols or doing our own parodies of holiday specials, I figured we should share one of the songs we wrote for that unfinished special event. It's got good advice for those of us heading into the holiday season: don't release anything to prod in the next few days.

Lyrics


Masking Errors

by in CodeSOD on

Dirk's employer bought some software from a vendor, and the vendor promised that it was a cutting edge system, which was pushing the boundaries of technology. Digging through the API documentation, Dirk definitely found some unusual innovations, like the way it tracked log levels:

[FlagsAttribute] public enum TraceEventType { NoTracing = 0, Critical = 1, Error = 2, Warning = 4, Information = 8, Verbose = 16 }

Again and Again

by in CodeSOD on

"It's a fix for a fix for a fix, apparently," writes Joan.

In this case, it's some Ruby code, which… gets a bit repetitive in that it repeats itself and does the same thing over and over again, in a repetitive fashion. Repeats.


Voicemail to Email to Nothing at All

by in CodeSOD on

Mike's co-worker doesn't like to write code that gets tightly coupled to one system. Everything should be completely abstracted so that, if something on the backend changes, your code doesn't need to change.

Which is an admirable goal, perhaps, but is also premature abstraction. For example, Mike's company uses Asterisk, an open-source PBX system. This co-worker wanted to script a few actions in that system, but didn't want his scripts to be tightly coupled to the system that he was scripting, so he… overgeneralized. But also didn't. But also did it wrong.


pop

by in Error'd on

Alas, I have only the following five submissions to share, as my controversy generator is on the Fritz today.

Ex post autumnal Adam R. warmly reflects "I'm not quite sure how the math works out here, but I'm apparently a one-percenter in the home energy savings department."


A Learning Opportunity

by in CodeSOD on

At various points in my career, I spent my days delivering technical training. If your company wanted to adopt a new technology, or upskill your developers, you'd hire me and I'd do crash course sessions. I generally didn't design course material: the books, slide decks, and labs. I just delivered the course. Most of the course material I worked with was pretty good, but there were some which were clearly written by people who were just trying to get a course out the door fast while a new technology was buzzwordy enough that nobody knew what they were buying.

I hated those courses.


Don't Lookup: The Log4j Debacle

by in News Roundup on

All the headlines for the past week have touched upon the "Log4Shell" bug, CVE-2021-44228. This is a "big deal" bug that's coupled with some surprising features of how Java works.

Before we get into the news roundup portion of this, we need to discuss a little history. Today, the buzzword is "microservices". We break up our large, complicated application into a bunch of tiny services, and focus on how messages travel between these services. Usually, these services are communicating through some sort of network protocol or a message bus. The topology of a large and complicated application can turn into a forest of unclear and difficult to parse dependencies.


$art000

by in CodeSOD on

Many years ago, Brian was on the lookout for a new contract. While hunting, he found an opportunity to maintain some Intranet software for a large European news agency. He contacted them, and had a series of conversations with one of the managers.

"You see," the manager explained, "Sven was the code guru behind this entire system. He was… a colorful personality, but extremely smart. We don't have a lot of confidence that we could just slot a contractor into his role and expect them to be able to deliver what Sven could deliver for us."


Just A Temporary Thing

by in CodeSOD on

Daniel inherited some code which depends heavily on stored procedures. The person who developed those stored procedures was incredibly fond of overengineering things. Incredibly fond.

The result is a big pile of not incredibly interesting T-SQL code. I'll share the whole block of code in a moment, but there's one specific comment that I want to highlight before we look at it:


Some Like It Hot

by in Error'd on

Admittedly, this holiday season is culturally dominated by the Anglo-American tradition of a wintertime Christmas. Currier & Ives notwithstanding, most of the various holidays obviously originated in some summer event, or else a harvest one. For these hot holidays, our mate Peter starts things off with a very warm greeting from down under. Following that are a few of my favorite stocking stuffers, until Peter's antipodal ally Michael closes everything out with an appeal to warm the heart but not blister the sole.

Aussie Peter G. mutters weakly "I think this warning is bit superfluous (for the non-metric, that's 550 degrees F)."


Stop, Watch

by in CodeSOD on

On one hand, we should all be doing our revision tracking in our source control system, and we shouldn't let code comments tell the story of why or how the code changed. On the other, when it leaves us the history of WTFs in the current version of the code, it's actually delightful.

Take this anonymous submission, which includes the whole story of the code, all at once.


Dummy Round

by in CodeSOD on

Different languages will frequently have similar syntax. Many a pointy-haired-boss has seen this similarity and thus assumed that, if their programmer knows C, then C++ should be easy, and if they know C++ then going into C# must be trivial. I mean, the languages look the same, so they must be the same, right? Boats and cars are steered by wheels, so clearly if you can drive a car you can pilot a boat, and nothing will go wrong.

Andreas S inherited some code that started at C/C++ and was then ported to C#. The original developers were the sort to reinvent wheels wherever possible, so it's no surprise that they kept that going when they moved into C#.


Unseen Effort

by in Feature Articles on

Hermann Safe Co. Safe

Anita, a senior developer, had recently been hired at a company with around 60 employees. Her first assignment was to assist with migrating the company’s flagship on-premises application to the cloud. After a year of effort, the approach was deemed unworkable and the entire project was scrapped. Seem a little hasty? Well, to be fair, the company made more money selling the servers and licenses for running their application on-premise than they made on the application itself. Multiple future migration attempts would meet the same fate, but that's a whole other WTF.


Leading From Affronts

by in Feature Articles on

Scientists frequently need software to support their research, but rarely are strong developers. And why should they be, that software is written to accomplish a goal, and it's the goal which matters to them more than anything about the software itself.

That's where Jared comes in. He worked in a university IT department and his job was simply to write the software the researchers needed. They frequently had a very clear picture of what they needed, along with big piles of math to explain it, plus piles of example input and expected output data.


The Other Washington

by in Error'd on

This week, anonymous Franz starts us off with a catch-22. "I opened MS Word (first time after reboot) and a dialog box opens that tells me to close a dialog box. This was the only open dialog box... I guess even software makes excuses to be lazy on Fridays."


A Split in the Database

by in CodeSOD on

Oracle is… special. While their core product is their database software, what they actually sell is layers and layers of ERPs and HR systems that run on top of that database. And what they really make money on is the consulting required to keep those monsters from eating your company's IT team alive.

Because these ERPs are meant to be all things to all customers, you also will find that there are a lot of columns named things like attribute3. Your company's custom logic can stuff anything you want in there. "Do as thou wilt," as they say. And suffer the consequences.


Two Comparisons, Hold the Case

by in CodeSOD on

There are a lot of times when we want string comparisons to be case insensitive. It's quite a lot of cases, so every language is going to give us a way to easily specify that's what we want.

Take, for example, this C# code, written by one of Robin's team-mates.