Hello, World: Part One

blur close up code computer
Photo by luis gomes on Pexels.com

**************************************
Executing Unit Tests……
0/107 Complete; 0 passed, 0 failed, 0 skipped
23/107 Complete; 23 passed, 0 failed, 0 skipped
72/107 Complete; 66 passed, 0 failed, 6 skipped


“And it never finishes?” I ask Alan.

“Well, not in the three hours that it’s been running.”

“Can’t you look at the log and see whose error it is?”

“Yeah, it’s Dave’s new validation stuff.”

I squint as I try to remember the details from my team’s standup meeting that morning… Ah, right. Dave was working on an enhancement for our web-form. Currently we check to see if people enter valid values and complain at them if they don’t make sense. Like if you put just four digits in the Phone Number field. Dave wanted to make the form a little more helpful by suggesting what you might have meant to enter, like putting the @ symbol in a likely place if you forgot it with your email.

“Okay, well did you ask him why his code is breaking the build?”

“No. He committed it late last night and now he’s on vacation until Monday.”

I sigh. That, unfortunately, sounds just like the Dave we know and hate. Always trying to cram things in at the last minute and then not around to clean the resulting mess.

“Okay, I’ll roll back his changes and he’ll have to take care of it when he gets back.”

“Yep.”

I walk away to my machine and open up the build server. Every time a member of our team makes changes to the code there is a gauntlet of tests that it has to pass before it can go to production. Think of it like a filter to catch the bugs before our customers see them. Dave’s code has gotten clogged in that filter, so now I have to pull it out.

I open the page with his code changes and click on the Revert button. My cursor turns into that little spinning icon that means the computer is waiting for a process to finish. Curious, I check what test it got hung up on… It was for the credit card information where you enter the year that your card expires. The test was supposed to enter an invalid year from the past (2012) and get a recommended correction (2021). It’s odd. We really shouldn’t be trying to auto-correct people’s credit card information for one, and also that’s an incredibly basic test. Dave’s code shouldn’t have choked on it.

In any case, that little spinning icon finally goes away and the code gets pushed back. I don’t think anything more about it until the next week.

*

“So yeah, Dave, we had to push your code back out. And frankly, you shouldn’t be trying suggest corrections in the credit card fields, just highlight that the entry is invalid and let the user correct it.”

We’re in our Monday standup meeting where each team member brings everyone else up-to-date on their current work and needs.

“And let me use this as another reminder that no one should be committing code to the main branch unless they’re able to stay around and see that it passes the automated tests.”

“I did, Greg,” Dave pipes up. “But it kept getting stuck on that one, so I didn’t have time to see if it would pass.”

I suppress the things I want to say.

“If a simple validation takes longer than half-a-second it has failed, whether it got the right answer or not,” I say tersely. “What on earth was your code doing that it would take so long anyway?”

Probably he had gotten it stuck in some idiotic infinite loop.

“I dunno what it does. I just used some validation library I found.”

A “library” means a bundle of code that someone else has written to perform a suite of functions. Often we use them to cover basic stuff like validation, because there’s no need to reinvent the wheel. However…

“I don’t remember seeing any proposal for adding a validation library!” I snap. “You’re supposed to clear these things with me. I’m responsible for verifying everything that we’re using. Get it out of there!”

Since anyone can upload a library you always want to be sure of its source. One that’s taking way too long to do a basic task might very well be a trojan horse for all sorts of viruses.

The meeting has me upset enough that I make a few notes in Dave’s file to bring up in our yearly review. He will not be pleased with his end-of-year bonus.

In the meantime, Dave returns to his machine, pounds away at the keyboard for the next while, and I don’t hear anything more about his code breaking our builds. I have a nagging feeling that I ought to do personal inspections on his code for the next couple weeks, but my next meeting is already starting and I grab my headset. In no time Dave is far from my mind.

*

One day, a couple weeks later, I come into the office, log into my machine, load up my emails, and immediately my heart skips a beat. We have been flagged for suspicious behavior by the company’s technology auditing department.

I open the email and my eyes rove over it even while my phone starts ringing. The caller id informs me that it is my boss, and there’s no question what he’s calling for. I gulp, pick up the phone, and begin the unpleasant conversation. Apparently our code in production grew more than 100 times in size overnight. There have been no code commits, which means all the growth is being perpetuated by something running on our servers.

Like a virus.

I apologize to my boss that I don’t have any clue what could be causing this and vow to get to the bottom of it right away. Then I pull our code out of production and call an emergency team meeting. Five minutes later we’re all crowded around the same table with our laptops, combing through the production environment.

“Yeah something’s writing new files like crazy,” Alan says. “The business logic layer has grown two gigabytes just since we got here. We’re going to run out of storage on the server soon.”

“Great,” I say sarcastically. “Now any idea what’s doing it?”

“Naw, these new files being all have auto-generated names. They don’t give any meaningful–oh wait, here’s something… ‘rubricValidationTemplate_0072.json’… that mean anything to anybody?”

“Validation?” I snap, and I see Dave trying to shrink behind his laptop. “Hey, is that the validation stuff you were setting up,” I bark at him.

“Um, its name does sound similar to that library I was using…but I already took it out, just like you told me to!”

But I’ve already been clicking away furiously, pulling up the relevant code files.

“No you didn’t! You removed it from your methods, but you’re still importing the library and initializing it!”

“What–I must have forgotten that. But if I’m not calling any of its functions it shouldn’t be doing anything.”

Alan snorts. “No, it shouldn’t. But its a blackbox, isn’t it? So there’s no telling what it is doing, regardless of whether it should or not.”

The “blackbox” Alan is referring to is the common structure by which these code libraries get shared. You can’t peek inside to see how it does what it does. You just send stuff in and get stuff back, everything in between is encrypted. And normally that’s fine, because all that is being hidden is trade secrets. But for a malicious library it could also be hiding the fact that its hacking your machine on the side. As this one appears to be.

I want to scream at Dave that he’s fired right then and there, but I figure I had better not. We’ll verify that his illicit library is at the root of this all, and then we’ll deliver his head to the higher-ups. Maybe that will be enough to appease them, and I won’t have to lose my own job as well.

Alan pulls up the list of background services running on the server to look for anything named RubricValidation there. In the meantime I tell Dave to send me a link to where he got that library from.

Alan clicks his tongue. He has indeed found a “RubricValidationService” running in the background and he turns it off. Background services are like little programs that run behind-the-scenes on your computer. A few moments pass and then all of the developers start confirming that the rampant growth of files has come to a stop.

We all look to Dave who is sweating now. He informs us that he can’t get the link to where the library came form. It would seem that it has been pulled from the website it was being hosted on for ‘potentially harmful behavior.’

I shout at Dave for a few minutes, but honestly I’m starting to feel better. We have our culprit and the mystery is solved. Still some cleanup to do, but life can start getting back to norm–

“Wait, the files are growing again,” Craig says from the end of the table.

“What?!”

“Oh yeah…” Alan says. “And–it looks like there’s a new service running in the background. RubricEnforcedValidationService.”

“Just shut the whole server down,” I order. “We’ll delete everything, format the hard drive, and do a clean install.”

Suddenly my phone starts vibrating like it’s going to explode. I pull the device open, turn on the screen, and it’s overflowing with messages from my work email:

Unusual behavior detected on server. 48 emails sent in last minute!
Unusual behavior detected on server. 53 emails sent in last minute!
Unusual behavior detected on server. 61 emails sent in last minute!

It’s one of our security checks that has been triggered. Our server frequently sends emails to report when it completes certain tasks, but at most it only ever sends out a dozen in a day.

“And now there’s a RubricCommunicationValidationService,” Alan muses from his chair.

“I said shut the server down!” I see my spittle flying through the air. “Do it now!”

“Hey boss,” Craig says slowly. “I just got an email from the server.”

“Do not open it.”

“I didn’t… but our data scanner service seems to have tripped something in it.”

I wrench Craig’s laptop over to me. Each of our machines watches for emails from the company and automatically extracts data from them for analysis. On his screen I saw a loading bar filling up.

Rubric Validation Data Downloading…8%
Rubric Validation Data Downloading…9%
Rubric Validation Data Downloading…10%

Rubric Validation Data Downloading…4%

“Everyone turn your machines off!”

“What?”

“Do it!” I scream. “It just sent out a virus that gets opened automatically!”

Each of them looks dazed, but they move to obey me.

“But how will we fix this if our machines are off?” Greg asks.

“I don’t know! We’ll figure it out… We’ll–we’ll get some new machines, ones that don’t have our email scanner running in the background. Go over to Stephanie’s team and tell them we’re commandeering theirs until I can get us replacements. Go! Tell them I made you do it…. Wait no! Wait!” Everyone pauses in mid-step. My mind is racing faster than my mind can keep up. “Alan, Did you get the server shut down?”

“No.”

“NO?!”

“You just told me to turn my computer off!”

“I know! But– whatever. You go! Take someone else’s machine and get that server off! The rest of you, come with me. We’ve got to shut down every other computer that was on our distribution list right now!”

Because, you see, it wasn’t just our team that got those reports. It was many of our higher-ups as well.

Everyone rushes to follow my orders and the next ten minutes are a blur. Eight overweight men sprinting, sweaty, and cursing all through the office building, slamming peoples’ laptops closed, hurriedly apologizing for crushed fingers, and rushing off to the next.

And though I try to suppress it, there is a voice voice inside, taunting me that I’m fighting a losing battle. What are a few puny humans going to do against a virus that just went…well..viral? All this time it’s been churning away on the servers, thousands of operations every second. And even if Alan has managed to take it down who knows where it has replicated itself to. We saw the email attacks, but who’s to say that was its only outlet?

In fact we know it isn’t. The servers it is sitting on are public facing. They are the brains behind a website that our customers use every single day. Right this moment there are at least tens of thousands of people logged in to our product, taking in whatever RubricValidation is sending to them!

“What is the meaning of this!” Howard is shouting at me. Trying to wrestle his laptop from my clutching hands.

“There’s a virus!”

“I’ll run a sweep after this meeting!” he pleads as I finally manage to wrench it free.

“I’m sorry boss.”

“You’re fired!”

“I know.”

Part Two

 

So, just in case you were wondering: no, this isn’t an entirely accurate representation of how software development or viruses work. Though I would say its a good deal better than what you get from Hollywood! I’ve taken creative liberties and exaggerated things, but at the core these are exactly the sort of malicious attacks that are every tech company’s worst nightmare.

On Monday I spoke about how we incorporate vague and massive things into our stories. Things that might represent the supernatural, or the unknowable, or something of such profound emotion that it cannot be fathomed. With this story I wanted to combine some of these ideas in the virus that these developers discover.

For one thing the virus is of a mysterious origin. It comes from some unknown “black box,” and no one knows what its secret objective is. It is not just that the answers are unknown, but that they are unknowable. Literally encrypted.

And then it grows quickly. So rapidly, in fact, that it becomes a hyperbole. The men have seen it escalate from a hang-up on an automated test to a malignant virus installing on thousands of machines. And again, this sheer massiveness serves to further obfuscate any clear understanding of the thing. Is its malignant spread random and chaotic, only meant to tie up resources? Or is this simply one piece in a much larger strategy?

Or at least…those were the sorts of intriguing questions I had in my head when I started on this piece. But now that I have written out the first half I will admit it tastes pretty weird. A lot of technical jargon, but also plenty of hyperbole, and some humor that isn’t landing as well as I’d hoped. That’s just how it goes with creativity, though. Sometimes it exceeds even our own expectations, but other times you find yourself saying “that sounded a lot better in my head.”

Usually we try keep those “sounded better in my head” moments from the public eye, but that’s not the purpose of this blog. I want this to reflect my writing journey honestly, the good and the ugly. If this is what I was able to come up with, then this is what I want to share.

On Monday I’d like to take some time to talk more about this. We’ll discuss why it is so hard to accurately predict what is a good idea and what is not, and we’ll talk about how to tell them apart. After that we’ll have the second half of Hello, World. Until then, have a wonderful weekend!

Network Down: Part One

codes on a screen
Photo by Markus Spiske temporausch.com on Pexels.com

Kevyn strode down the sidewalk bearing that satisfied contentment that always came during his midday ritual. Each day around noon he made sure to get away from the office for a bagel and some fresh air. His carefree reverie was interrupted by the triple-honk of a nearing taxi, the cabby calling out to see if he wanted a ride.

“Dani, I don’t want any transportation,” he sighed.

Confirmed. The digital assistant sounded in his ear as she updated his public profile. Now all of the HUDs on the passing taxis would see a red X over his head.

“I thought I set a reminder for that, Dani,” he stressed. “Whenever I leave for lunch I want to just walk.”

Whenever you leave your workplace between the hours of 11 am and 1 pm?

“Figure it out,” he said. It was a phrase that Dani would understand to mean she should use her own algorithms to assume his intent.

Confirmed.

Kevyn reached the alley that led down to his favorite bakery. It had been intentionally positioned apart from the main thoroughfare as the owner valued a personal relationship with all his clientele. No one came here unless they meant to, and everyone who did soon became a regular. It wasn’t business so much as family.

Twenty minutes later Kevyn emerged having enjoyed the combination of good food with even better conversation. He felt invigorated to tackle all of the afternoon’s reports, and maybe even still have time to–

ALERT! ALERT!” A loud voice suddenly cut through the air, simultaneously emanating from every ad-board in the entire city. Everywhere Kevyn looked he was met with the same warning bulletin.

“The Chicago Central Police Department has just been compromised by a network attack. This attack has crippled all communication with automated units. Regular police forces remain in active duty, but citizens are strongly urged to vacate the streets and lock down their premises. Keep watching for confirmation of system restoration.”

An artificial voice began reading the message out loud but Kevyn didn’t need any further warning. He instinctively spun around to seek shelter in the bakery he had just left, but the metal shutters were already clanging shut. No doubt they were automated to do so in such events, and could not open back again, no matter how he begged for admittance. There was nothing for it but to run and grab any taxi that still dared to be on the streets.

As Kevyn sprinted down the alley he watched the small slice of the street he could see ahead. Though the window was small it still communicated the immediate panic that was sweeping all across it. Cars whizzed by at dangerous speeds, horns honking, tires squealing, bodies crunching against one another. Those on foot dashed down the sidewalk, taking wide swaths to avoid passing too near to any of their fellow pedestrians. They stared into one another’s eyes as they passed, trying to tell if this other might be a closet homicidal maniac about to spring loose.

That was the true horror of these episodes. The Police Department’s monitoring and enforcement network was state-of-the-art, and the dismantling of it had only ever been accomplished whenever a very powerful entity had wanted to enact a very dire evil, such as with the terrorist bombing of ’31. But beyond the grand act of terror there was the more common criminality as well. The human officers were simply too limited to hold back the tide of depravity that burst free whenever the dam came down.

There had been years of pent up felonies waiting to be committed. People had been silently seething: hating their bosses, jealous of ex-lovers, feeling a need to silence certain public voices… They had been burning with want, but been too afraid of the guaranteed repercussions that came in a world of constant monitoring and enforcement to do anything about it. Well, now in this brief window of opportunity every degenerate had just been given free license to do as they saw fit, and they were going to take it.

“Dani, flag down a taxi for me,” Kevyn shouted as he neared the end of the alley. “And alert me to any individuals approaching within a hundred yards of me.”

Confirmed. Removing transportation filter from your status.

Even before Kevyn reached the sidewalk he could tell he was in trouble, and as he came to the road, clutching a stitch in his side, his worst fears were confirmed. This was usually one of the busiest, most packed thoroughfares in all the city, and now it was entirely deserted. A few retreating taillights shone eight blocks down, a few doors were still slamming in the nearby apartment buildings, but there was no one near enough to offer him shelter from the storm.

Still, at least deserted was better than being approached by thugs.

“Dani, I…” Kevyn paused as his eyes lit on a wreck. Three cars had plowed into one another during the mad scramble and now all of them were deserted, their drivers having evidently continued their exodus on foot.

“Dani, see if we can buy any of these cars,” he ordered, sprinting over to them and trying to assess if they could still function. The Lexus that had been T-Boned looked pretty bent out of shape, and the Goat was so boxed in he wouldn’t be able to get it out. But maybe the Buick in the back?

The owner of the Lexus is willing to entertain an offer, Dani replied after completing her queries.

“What? No. What about–” Kevyn started at the sound of a loud bang just a few alleys away. “How much are they asking?”

91,670, standard price for a new Lexus Aria.

Kevyn cursed, but made his way around to the driver’s door. “Buy it!” he hissed, tugging at the door’s handle repeatedly.

A pause. And then Purchase completed.

The handle now opened for him and Kevyn dove into the car’s interior. Just as he pulled the door shut another bang sounded behind him and he spun around in the seat just in time to see a band of looters spill out of that nearby alley onto the street. One of them was behind the wheel of massive, black truck which pulled to the side of the road as the rest hopped out from the back and began moving down the street. They all held 3D-printed firearms and blasted away at any lockbox in sight, pillaging the contents inside.

Kevyn swore again and slammed the seat into its most reclined position, laying flat and hoping they hadn’t seen him. They would see the wreck and assume the owners had left it, wouldn’t they?

Sir, I am notifying you that individuals have entered the 100 yard radius you specified, and they are moving in your direction.

“I know,” Kevyn whispered. “Just keep me updated on their distance.”

Of course… 80 yards… 60 yards… 40…

Suddenly Kevyn had a horrifying epiphany. They wouldn’t leave the cars, they would loot them. How had he been so stupid? Panicky he flung the seat back to its upright position and punched the button for the ignition.

The car roared to life, mingled with shouts of surprise from the looters. Kevyn slammed the pedal to the floor and felt a rush of relief as the car lurched away from the rest of the twisted metal it had been enmeshed with. He was curving sharply to the right, though, and as he spun the wheel to correct it he found that the steering didn’t respond. The passenger side was too dented in for the vehicle to drive straight.

A building loomed up ahead and Kevyn was too slow reaching for the brakes. His vision turned white as the body-cushion sprung up around his form, suspending him in space and giving the accident that followed a strangely muffled crunching sound.

“Get off! Get off!” Kevyn shouted, punching the deflating cushion away as he scrambled for the car door. A thought occurred to him and he pulled open the glove box before exiting the car. A gun! A beautiful, glossy black handgun. He grabbed it and leapt out of the seat, pressing his back against the side of the car. The vehicle was a barrier between him and the looters, something he was grateful for as there came the sharp pinging of bullets hitting the car’s other side.

“Stay back!” he roared, shaking the gun where they could clearly see. He squeezed the trigger to fire back a warning shot but nothing happened.

Sir, you do not own this firearm…

“Buy it!”

And even if you did, you would require a weapon permit before its use would be authorized. All permits have been suspended while the Police Department’s security network is down.

Kevyn’s bluff didn’t seem to have impressed the looters very much either, and they were piling into the back of their truck as it rolled down the street, making its way towards him.

Kevyn ducked low and scrambled away towards the nearest alley, his heart thumping painfully in his chest. He reached the gap and gave a silent thanks that it was too narrow for their truck to follow him. It was just a slight gap between two apartment buildings on either side, a place filled mostly with refuse and broken appliances.

“Dani, are any of these apartments vacant?” he asked as he sprinted down the length of the alley towards the adjacent street.

There are numerous apartments available in each of these buildings, ranging in price from…

“Never mind.” He realized that these buildings would also be locked down with metal shutters, and he wouldn’t be able to enter them even if he was a patron.

A loud clap rang out as the stucco wall next to him burst from the impact of a bullet. Kevyn wheezed in shock and flung himself away towards the other side of the alley. The fact that the shot had been so close to his head was evidence of how terrible the looters’ aim was. They needed him alive, after all, if they wanted him to transfer his money into their accounts.

And there would be no negotiating with them if they did manage to catch up with him. In a world where every transfer was registered in a digital ledger it was also possible for each transaction to be reverted. The only guarantee a robber had that you wouldn’t later retrieve the money you gave them was if they left you dead. Their promise was always that the death would be much worse if you refused to transfer the money.

Kevyn continued his run, now bobbing and weaving as much as he could in the narrow alley, trying to throw off the looters’ aim.  The occasional shot clattered around his legs and feet, but thankfully none of them had found purchase yet. He was nearly to the adjacent street now, but no closer to safety.

“Where are we Dani?”

The corner of 13th Street and Mull.

“Where’s the nearest police precinct?”

1.1 miles.

1.1 miles. Normally that wouldn’t sound very far. Now it might as well be in another galaxy.

Kevyn’s eyes flashed as he spotted a mobile trash container at the end of his alley. It was the large, industrial kind, about chest height and wider than the entire alley. It was designed for mobility, with automated wheels on its bottom, so that it could be dropped off to private events and retrieved afterwards if needed.

“Dani, rent that trash box, then tell it to rotate around!”

The cost for immediate use comes with a significant fee…

“Buy it!”

There was a moment’s delay and then the container began to spin, forming a wall between the two apartment buildings just as Kevyn dove through the shrinking gap. There came a grinding sound as the edge of the container scraped along the building walls. It was too large to rotate fully, so instead it just wedged itself in as tightly as it would go.

Kevyn spun around and looked over the top of the trash container at his pursuants. They were still sprinting towards him, streaking to the barrier he had made, crouching low, and then leaping to clear it.

“Dani, open the trash’s lid,” he ordered coolly. The top sprang suddenly upwards and backwards, blocking his vision of the alley just as the looter’s eyes widened in surprise. Kevyn allowed himself a smile at the sound of the bodies slamming into the raised lid, followed by the cacophony of them tumbling back down into the container’s interior.

“Close the lid.” It slammed shut and he heard the muffled shouts of the angry looter’s banging their fists against their metal prison. “You can transfer control of the box back now. At whatever loss is fine. And tell the new owners they ought to–”

Before Kevyn could finish his snarky one-liner he jumped at a sudden squealing noise. Three blocks south of him the looter’s large truck spun around an empty intersection, then turned, and came barrelling towards him once more.

Kevyn grimaced and then began sprinting the opposite direction as quickly as he could. He wasn’t in the clear yet.

Part Two

***

I mentioned on Monday how I wanted to write a story that would feature a small novelty, and then explore all of the implications that would branch out from that seed. When I started working on this story all I knew was that I wanted a world where currency had become entirely digital. I wanted to explore how ownership might be a more fluid notion when the changing of hands could be done without any hands at all, handled instead by the interfacing of different AIs.

The first implication of this was that obviously this story would need to be set in the future. A world like our world, but later. And with that came the setting, the style, and genre of the piece.

Next I drilled deeper into this idea of transactions being conducted entirely remotely. We already see the beginning of this through online shopping, but I wanted to take it a step further. What if every item was tagged with its owner, who could be remotely queried for a purchase? Every item could be tentatively for sale, so long as your offer was compelling enough.

With that in mind I wanted the story to have a reason for someone to be buying a great number of things, one right after the other. That brought up the image of someone running, trying to escape, and purchasing tools to aid him in that flight. Obviously that would mean our main character was in trouble, being pursued by some ne’er-do-wells.

And now that I was thinking about robbers, I started to wonder how that would even work in a future where every transaction could be tracked and reversed. The chillingly fatal implication of how this crime could still be effective presented itself, and I began piecing together the last parts the story.

Of course there is a little bit left to tell of it, and in the second half we are going to learn even more about the digital currency in this strange world. Before getting there, though, I want to examine a theme that has been present in all of my stories for this current series, one that has given each of them a particularly somber tone. Loss. It’s a weighty topic, and yet one that we each need to process in one way or another. I’d like to make the case that stories are a uniquely fitting way to do just that. Come back on Monday where I’ll explain why. Until then have a wonderful weekend!