In Memoriam

When I first met Toby thirteen years ago, I wasn’t much of a cat person.  Honestly, I didn’t really like cats at all.  I was still carrying over some bad associations from a set of strays that my family took in briefly when I was a kid.  I don’t remember much about those cats, save that their food smelled completely disgusting.  All of my memories and opinions of cats flowed from that, as far as I can tell.

Regardless of the reasons, when one of my roommates at the time, Taylor, said that she wanted to get a cat, I wasn’t exactly thrilled.  Fortunately, though I certainly wouldn’t have described it as such at the time, I was outvoted and, conflict-averse as I am, I decided to just roll with it.  As long as the fur-ball wasn’t my responsibility, especially the nasty-smelling parts, I figured it wouldn’t be so bad.

I wasn’t really involved in Toby’s selection process, so I may never know why Taylor chose him, but I’ll be forever grateful that she did.  Toby was a pound rescue, so he probably would’ve been put down in pretty short order if she hadn’t.  He’d been picked up off the street, as I understand it, having lived there for quite a while as far as anyone could tell.  Their vet estimated he was about three years old at the time, and it hadn’t been the kindest of three years.  He had several notches in his ears as well as a few small scars.  Somewhere along the way, he’d lost a good chunk of his teeth from his lower jaw along with his front claws.  His brown tabby coat was quite handsome and he had a nice regal bearing about him, but otherwise he wasn’t exactly pet store material.

Despite all that, though, he was one of the friendliest and most mellow cats I’ve ever met.  He definitely had a lion mentality going, and I don’t mean the fierce-hunting-female.  No, he was more of the laze-about-while-others-do-all-the-work-giving-precisely-zero-fucks male lion.  It wasn’t like he had to worry about one of the pride usurping his position as alpha, after all.

He had a few other oddities about him too, some endearing, others not so much.  The first one we discovered a few days after his adoption, when he puked all over the carpet.  We thought perhaps that this was just a phase, a sign of his anxiety in his new home.  It wasn’t.  In fact, he continued to do so on a pretty frequent basis for the rest of his life.  You might be surprised how normal it can become to clean puke up off the floor once a week after enough time.  Then again, you might not.

Far more amusing was his habit of licking things obsessively, namely people.  And I do mean obsessively, too.  He would keep going for as long as you let him.  It would have been more amusing if his tongue hadn’t been as rough as sandpaper, though.  I remember one time in particular, shortly after I’d graduated college, that I decided I would face down the legend once and for all.  After luring him in with a patch of exposed forearm, we settled down into an epic battle of wills.  Thirty minutes later, I just couldn’t take it anymore.  My skin was raw, despite moving the arm a bit here and there to let him at a fresh patch, and he was showing no signs whatsoever of slowing down.  I fared better than one of my house-guests, though.  She made the mistake of falling asleep on the couch without fully covering herself in blankets; when she awoke in the morning, there was a very large patch of red on her arm, licked raw almost to the point of bleeding.  To this day, he remains the undisputed champion of licking.

We learned to get along better over the years, Toby and I.  Taylor mostly fed him dry food, which avoided dredging up gross memories.  He was a sweet cat and loved to cuddle up next to me as I was on the couch.  And when I wanted to be left alone, usually he would.  Eventually I could no longer deny that I liked the little guy.  This worked out pretty well, because it also eventually became evident that Toby was lonely.  Between school and work, Taylor and I were spending an increasing amount of time away from the apartment, leaving Toby nobody to play with.  So we decided to get a second cat and this time I got to help pick her out.  I confess that I was a little nervous about the prospect; the old anti-cat sentiment reared its ugly head, trying to convince me that we’d just gotten lucky with Toby and that he was abnormally tolerable.  I pushed those fears out of my head, though, and together Taylor and I found Sophie.  Thankfully, the two cats got along quite well, after the always-rocky introduction phase, anyway.  Her story is for another time, though.

The day came, though, when Taylor had to leave and she found that she couldn’t take the cats with her.  Between the distance and the rules of her new home, there was just no way to make it work.  I volunteered to take them for her and she agreed, for which I will also be forever thankful.  In that moment, I completed my metamorphosis into a cat person.

Toby and I have had a lot of time together since then and the time has almost always been good.  He kept me company when I was lonely and gave a helpful ear when I needed one to bend.  He liked to curl up against me in the winter, to knead my leg into uselessness, and to lick my arm far more than could possibly be healthy, but at least assured me that I had a pleasant flavor.  He was exceedingly polite when he wanted attention, simply sitting down next to my leg and tapping it gently, but persistently, with his paw.  I won’t deny that he’s left me exasperated on more than one occasion, but that’s pretty much unavoidable when you’re dealing with a critter who has a mind of his own.  The good has far outweighed the bad, and I don’t regret any of it.

Five days ago, I noticed that Toby was behaving rather oddly.  He seemed unusually low-energy, as if he was depressed, and wasn’t rushing to the food bowls when it was feeding time.  He’d had a few health issues lately, losing a tooth out of the blue and developing a thyroid condition, so seeing him like that made me uneasy, but there didn’t seem to be anything immediately dangerous.  Three days ago, I noticed drops of blood on the carpet near him and realized that they were coming from his mouth.  It was evening and so his regular vet was closed, so I took him straight to the emergency clinic.

I won’t go into detail here about the various symptoms and complications that were discovered between then and now.  They don’t matter anymore.  All that needs to be said is that treatment didn’t help him and, despite a few minor upswings, his condition continued to worsen.  Today it became clear that wasn’t going to change and that I was only prolonging his pain by continuing treatment.  Toby passed on today in as little pain as could be managed, with his head in my hand and my voice in his ear.

He was a cat of many names.  The Tongue.  The Lickenator.  Kunta Kitteh.  But to me, he’ll always be Toby.  He was the cat that taught me to love cats.  He filled a hole in my heart that I hadn’t known was there.  He was a friend to me for almost half my life and now he’s gone.  I miss him so much.

Goodbye, Toby.  I love you.

Posted in Personal | 7 Comments

Shades of Blue

Those of you who’ve been following my blog may have noticed that it’s been pretty quiet around here lately.  I’d started with the intent of writing a post a week.  I even managed to stick to it for a fair bit.  The past few weeks have been difficult, though.  It’s damned hard to think of a topic to write about, much less put in the time and energy into word-smithing it into existence, when I’m in this kind of state.

See, I suffer from depression.  I have good days when I feel like an actual person, of course, but there are long stretches of bad days in between.  If you’re reading this blog, then you probably know me well enough already to know all that, or at least have an inkling of it.  Still, I’m not sure if it’s something I’ve ever actually come out and said before, rather than simply moping about the place.  It’s a little strange for me to do so.  I’m pretty sure that it’s clinical, though I can’t be sure since I’ve never gotten a formal diagnosis from a professional.  For the purpose of this post, though, I’m going to assume that it is.

One of the reasons that I don’t come out and talk about it a lot has been the way that I see a lot of society viewing the condition.  There’s a lot of condescension and patronizing and blame and general, all-purpose “other”-ing.  The general consensus seems to be that the sad sack should just suck it up, pull him/herself up by the bootstraps, and soldier on.  After all, they’ve all felt sad before too and they got over it, so shouldn’t everyone be able to do it?  “Oh, are you still going on about how depressed you are?  Why do you have to be such an attention hog?  Jeez, just get over it and shut up already!”  Thankfully, I haven’t had to put up with that from the people close to me, but the general sentiment is very much out there in the rest of society.

Honestly, though, I can’t entirely blame people who feel like that.  They’re limited by their perceptions and experiences, and since they’ve clearly never felt this kind of depression firsthand they’re forced instead to extrapolate from other experiences.  Clinical depression is a lot like getting old: you have no idea how bad it really is until it happens to you.  There’s no point of reference.  Most people seem to think that being depressed is like feeling other kinds of sadness, like disappointment at being passed up for a promotion, or rejection when you get dumped, or grief when someone close to you dies.  It’s not.  Believe me, I’ve been there too and they’re just not the same.

Those kinds of sadness, the ones that everyone inevitably suffers at some point in their lives, have a lot in common with pain.  The experience, the severing of that emotional tie, is acute and often traumatic.  You cry, you hurt, you want it to stop.  Some early research via functional MRI, which lets scientists watch brain activity in real time, even suggests that the brain may process emotional and physical pain in the same way.  But there’s always a cause, something specific and external, and eventually you get through it, often with the help of friends or activities that you enjoy.

None of that is true for clinical depression, at least not as I’ve felt it for as long as I can remember.  Depression isn’t like pain, it’s a lot more like fatigue.  It’s chronic and pervasive, a slow crushing weight instead of a twisting stab.  When I’m feeling low, I feel exhausted all the time; there’s a reason that depressed people say they can’t get out of bed in the morning.  Just thinking is like trying to wade through waist-deep mud.  Everything, no matter how small or mundane, feels like a monumental struggle that I just don’t have the strength to win.  The worst part, though, is the way that it stifles my ability to cope.  The slings and arrows don’t stop when you’re down, they just hurt worse.  Stuff that I’d be able to shrug off with nary a care on my good days hit me hard on the bad ones, and things that I normally enjoy are dull and flat.  On my worst days, time spent sharing a good meal and playing games with friends has the same emotional uplift for me as collating paper.

But what to do about it?  I don’t know.  I’ve become so used to simply enduring the bad times that it’s easy for me to believe that there isn’t any other option.  Maybe I’ll just always be broken.  Then again, maybe it doesn’t have to be like that.  Maybe there’s treatment out there that can help me.  I’ve taken the first baby steps in seeking it out, but following it through to the end will be another matter entirely.  It always is.  In the meantime, all I can do is carry on.  It’s not like there’s an alternative.

Posted in Personal | 2 Comments

Flash Fiction: Going Nowhere

“Boss, you think – ”

“Shh!  Not so bleedin’ loud, ya damn fool!”

“Sorry, boss.”

“I don’t wantcha t’be sorry, I wantcha t’be quiet.  I’m tryin’ t’focus.”

“…I don’t hear anything, boss.  Maybe they’re gone?”

“Well, o’course ye don’t hear nothin’.  Tha’s just what they be wantin’ ye t’think.  But they can’t be foolin’ me, oh no.  The nose knows, y’know.  I ain’t called Jimmy th’ Smeller all o’er this bleedin’ city f’r nothin’.”

“I thought that was just ’cause of – ”

“No, ‘t’ain’t.”

“But that one time the barmaid – ”

“Tha’s a dirty lie, an’ I’ll be thankin’ ye not t’ be repeatin’ it again.”

“But I can – ”

“Arch’bald Wynne Montgom’ry, so help me God if ye be finishin’ tha’ sentence I will kick yer fat arse right ou’ that door an’ let ye be gettin’ nicked while I run f’r th’ hills.”

“But… but… boss, I didn’t… I didn’t mean…”

“Ah, Christ…  Lad, c’mon, stop cryin’, will ye?  I di’n’t mean nothin’ by it.  I were jus’ joshin’ ye, right?  C’mon, hush up, we can’t have ’em hearin’ ye.  There ye go, tha’s better.  Look, ‘m’sorry, ‘kay?  Y’gonna be a’right?”

“Yeah… yeah, I’m okay, boss.  Sorry about that.”

“Nay, y’got nothin’ t’pologize for.  I know ye’re sens’tive ’bout… y’know.  I shouldn’a gone hittin’ ye o’er th’ head wit’ it.”

“Huh?”

“What ye mean, ‘huh?'”

“Sensitive about what, boss?”

“Ye’re… y’know…”

“No…”

“Y’know… yer… stature.”

“You think I’m upset because you called me fat?”

“Wha…  Ye’re not?”

“You really think that’s…  I can’t believe this, boss!”

“Shh!  Archie, can we per’aps sort this out ano’er time?  Th’ bleedin’ law’s right ou’side waitin’ t’nick us f’r what we got!”

“And you said you’d let them get me!”

“Wha…  Archie, no…  No, no, no.  I di’n’t mean that, I’d ne’er let that happen.  Ye’re like a brother t’me, Archie.  Ne’er.”

“R-really, boss?”

“O’ course.”

“Thanks, boss.  Does, um… does that mean I can have a bigger cut of the loot?”

“No.”

Posted in Flashfic | 3 Comments

Zen and the Art of Code Maintainability, Part 3

I’ve had a lot to say recently about the right way and the wrong way to write your code.  Sure, there are any number of tricks and hacks that you can employ to get your software shipped more quickly.  You’re a freaking wizard, after all, slinging bits and bytes with wanton abandon.  You’re a master of digital arcana, weaving algorithms that lesser monkeys would look upon and despair.  But will you use your power wisely, or succumb to the temptation of the dreaded “quick fix”?  Read on for my last two pieces of advice on how to avoid becoming a victim of your own making.

Document Thoroughly

For all that this point should be blindingly obvious, I’m frequently astounded by the fervor of the resistance that I meet when suggesting it.  The arguments I’ve had flung at me are many.  I’ve been told that it takes too long, that it doesn’t capture information as precisely as the code, and that writing it is just repetition of the code anyway, dismissing it as a waste of effort.  I’ve been told that it’s too great an investment to update when the code changes and that incorrect documentation is worse than no documentation, dismissing it as detrimental.  And I’ve been told my personal favorite, that it doesn’t matter anyway because the code is “self-documenting”, dismissing it as irrelevant.  All this and more I’ve been told by many programmers who should absolutely know better, and whose work I otherwise respect.  Whenever I’m told these things, though, I’m reminded of something a classmate once said to me that I think sums up the backing sentiment perfectly: “If I wanted to write documentation, I would have been a damn English major.”

The unfortunate truth is that, yes, documentation is something of a drag to write.  It takes time and it’s very easy to do wrong.  It can even feel pointless at times, since having the code fresh in your head, after writing or changing it, makes it all so much more clear.  And yet?  It’s still absolutely necessary to writing maintainable code.  Source code is meant to be understood by machines, and takes a lot more time for a person to comprehend than real words.  What’s easy for many programmers to forget is that their understanding of those lines of code will fade, and a lot more quickly than they’d like to admit.  Even worse, that code may end up being maintained by someone else entirely, who’s never seen it before and doesn’t share the familiarity that comes with building that code in the first place.  The worst case is coming on board to a project, cursing whomever wrote that ancient crappy open source library they’re still using, then finally realizing that it was something you wrote ten years ago and don’t remember anymore.

Really, documentation isn’t that hard and the time spent can pay big dividends.  For a good place to start, just add a snippet of documentation above each method.  Give a brief, sentence-or-two description of what it does.  Add a blurb about the parameters it takes and what’s expected of them; number ranges, string formats, nullability, and the like.  Describe what’s being returned, if anything.  For bonus points, describe its expected error conditions and what it does when it encounters one.  Any of this sound familiar?  It should.  It’s what you need to know in order to respect your interfaces, like I told you two weeks ago.  That alone is about 80% of what you really need, and there are plenty of development tools that make it super-easy.  When writing Java code in Eclipse, for instance, you can just type “/**” on the line above a method then hit enter, and the editor will automatically fill in a documentation scaffold for you with blanks to fill in for each of the key items.  Even better, it will automatically parse the Javadoc that you’ve written and display it to you as a tooltip for future references, allowing quick review of documentation without taking you out of the context in which you’re working.

Manage Your Debt

As with every good rule, there are times when any or all of the things that I’ve told you need to be broken.  Occasionally, development speed really is that critical.  Maybe the module you’re fixing is slated for replacement in a couple of months anyway (assuming the replacement doesn’t get cancelled, of course).  There will times when you need to do things quick and dirty, and that’s okay.  What you absolutely must remember, though, is that shortcuts are not free.  When you take one you’re incurring technical debt, as that hacky, unmaintainable code will live on far longer than you’d likely care it to.  You’re borrowing against your future time to make things go faster now, and believe me when I tell you that technical debt always comes back for its due.

Just like with money, taking on technical debt can let you build things that would otherwise take too long.  Eventually, though, you’re going to have to pay off that principal, either by fixing the shortcuts you took or by replacing the whole thing.  The longer you wait to pay off your debt, the harder it will be as the code in question grows in usage and spreads to other modules.  Also just like with money, you’ll be making payments on that debt in the meantime, having to maintain and fix bugs in code that you’re eventually going to have to stop propping up and fix once and for all.  All of this is okay, so long as it’s done with careful consideration as to whether the eventual price is worth the current gain and with a real plan to pay that debt down.  Fail to live up to your obligations and you’d better believe you’re getting sent to collections.

One last thing

So there you have it.  Three weeks, six good practices to making your code easier to maintain.  It takes effort and a modicum of discipline, but even small considerations can yield significant benefit in the long term.  Just remember that every line of code you write will live in production long after you’ve moved on.  Hell, there are people out there still using Windows 95, and that was published almost two decades ago.  It’s not usually feasible to just throw out old code and replace it with something shiny and new; somebody has to maintain it.  Just pretend that the person who has to maintain your code for the next twenty years is a psychotic axe murder who knows where you live, and the rest should fall into place.

What do you think?  Any best practices that you think I’ve left out?  Are these things that you wish the guy before you had known?  Got an axe of your own to sharpen?  Tell me about it in the comments.

Posted in Software | 1 Comment

Zen and the Art of Code Maintainability, Part 2

Last week I started talking about a few of the practices that go into writing solid, maintainable code.  Throwing together layer upon layer of hacks in order to get an application or feature out the door more quickly can be very tempting.  Often it will even appear to have been the right choice, at least for a little while.  After all, if it works for you and your customer/boss gives the nod, you can always go back later and take care of those bugs you swept under the rug, right?  The fact is, though, that most of the time that rug never gets looked under again.  Problems are left to fester, because there’s more profit and satisfaction in developing new software than maintaining existing code.  Writing code to be more easily maintained, and as a by-product need less maintenance in the first place, is a difficult skill.  It requires a greater expenditure of time and an adherence to discipline that can seem overly restricting, but the time and headache that you save yourself later make it all worthwhile.

Be Boring

Shortcuts aren’t the only pitfall waiting to ensnare would-be code-monkeys as they hack their way through a jungle of logic.  More dangerous by far is the trap that you bring with you: cleverness.  See, the dirty little secret about writing computer software is that a lot of it is dead boring.  Your typical programmer is an intelligent person that needs a certain level of mental challenge and stimulation in order to maintain interest in his or her job.  Simply getting the job done isn’t always enough; there has to be a puzzle to solve or a new tool to explore or the simple joy of hearing your peers say, “How did you do that?!”  Unfortunately, opportunities for these career-validating experiences can be few and far between, particularly when so many potential employers think the world really needs is another e-commerce website from which to sell widgets.

In an environment like that, when confronted with the dull reality of the job, many programmers will make the terrible mistake of being clever.  If the end product is boring, we’ll make the implementation of that product “interesting”.  Instead of using a known, existing tool that does what we need we’ll build our own from scratch.  When we could get the job done simply by using known design patterns, we’ll instead opt to spend hours upon hours weaving tangled threads of logic into tortured knots.  And the whole time we’ll tell ourselves all kinds of lies about how we’re just trying to make our code more elegant or optimized, when all we really want is something to sink our mental teeth into.  Don’t fall into this trap.  The satisfaction you get in the short term from admiring your own cleverness will tarnish very quickly in the face of the extra debugging sessions brought on by an over-complicated design and implementation.  Take it from me: it’s not worth it.

Expect Failure

One of the most common mistakes that I see when reading code, whether it was written by a novice fresh out of school, a veteran with dozens of languages under his or her belt, or even myself just five years ago, is the assumption that things will work as expected.  Error codes will be left unchecked.  Exceptions will be left uncaught.  Return values will be left unvalidated.  I suppose I can’t blame them, really.  Building a complex piece of software is difficult, even when everything goes right.  Taking into account every way that any given line of code can fail can be overwhelming to those not accustomed to it.  Plus, since each instruction in your code runs in series like a monstrous line of falling dominoes, the slightest error in your logic can have far-reaching repercussions.

The only way to make sure that your software is stable, that it does the job that it was meant to do, is to accept and embrace its imperfection.  With every line of code you write, you need to ask yourself questions.  How do you expect the instruction to run?  What will it do if it fails?  If you give it a weird input value that it wasn’t expecting?  If it throws an exception that interrupts the normal execution thread?  If you lose connection to your external resources?  Can you recover from a failure and keep going?  How do you alert someone that a failure has occurred so that it can be tracked down later?

A lot of this comes back to one of the points that I made last week, about respecting your interfaces.  Codifying all of the different pre-conditions and post-conditions of a code module will take you a long way towards understanding all of the different ways that it can fail, which should then be codified themselves.  Breaking your code down into small, reusable chunks is a big help with this, as there’s a lot less that you need to understand at once in order to cement that interface.  A program is far easier to write and maintain when it’s made up entirely of small black boxes, whose ins, outs, and faults are all completely understood and documented, held together by thin and simple glue.

And the thrilling conclusion…

Next week, barring a stroke of genius, will finish up this little series with the last two pearls of wisdom I have to share on the matter.  I’ve been light on technical detail, I know, but one of my goals is to keep this accessible to people just starting out.  Good habits are easier to learn at the start, before you have to unlearn all the bad habits you inevitably pick up.  Got any bad coding habits of your own that you’ve managed to break?  Tell me about them!

Posted in Software | 1 Comment

Zen and the Art of Code Maintainability, Part 1

For those of you who don’t know, I’m a software engineer by trade.  I make my living serving as a mediator between man and machine, translating human thought and intent into little ones and zeroes.  I’ve been doing it for over a decade now (gah, now I feel old); I’ve seen a lot of source code and used a number of different technologies.  There are plenty of people out there who are more experienced than I am and have a wider breadth of knowledge, sure, but I’ve been around the block enough times to recognize some of the patterns and practices that separate good code from cryptic, rotting spaghetti.  Describing even just the ones I recognize could fill whole books, though, and is far more than can be meaningfully discussed in a single blog post.  But even without delving into too much detail, there are still several high-level concepts that, in my opinion, one must embrace to write truly effective, reliable, and maintainable software.

Be Explicit

One of the biggest hurdles that new software engineers have to overcome is learning how to think like a machine.  As human beings, we have the fantastic ability to overlook and ignore detail.  We don’t have to think about how to make that peanut butter and jelly sandwich that we’re craving, we just get the stuff and make it.  Computers don’t have that luxury.  A computer has to be told every tiny little step, from finding the fridge to identifying the desired ingredients to laying out the workspace, and on and on and on.  If you’re lucky, you’ve at least managed to find a third party library that will handle the actual physical movements involved, otherwise now you’re stuck trying to teach the computer how to walk, too.

The devil is in the details, and software is all details.  Assumptions lead to mistakes, and those mistakes can wait a long time before they rear their heads.  Hell, just today I fell victim to the assumptions of the coder who came before me.  He thought that it would be a good idea to fetch a customer record directly from the ID entered on his form, not realizing that it can take an ID or an email address.  Finding and fixing that error cost me almost an hour.  Even if you can get your program to work, making assumptions when writing code just makes it that much harder for the next person to come along and figure out what you were doing in order to fix that one-in-a-million bug.  If you’re really unlucky, that person will be you in five years.

Respect Your Interfaces

Any piece of software of non-trivial complexity gets big.  It just follows from the previous point: having to spell out all those tiny little details takes a lot of bits.  The only real way to handle this is to break up your code into smaller chunks, the most common type being called functions, which you then snap together like so many Legos.  While this is great for simplifying your code, by virtue of breaking up large tasks into smaller and more manageable ones, it can turn your code into a bunch of inscrutable black boxes if your functions don’t define strict, detailed interfaces.

Interfaces are very much like contracts; in fact, many programmers like myself call them such.  When you write a function, you’re making a promise.  You’re promising to everyone that will ever call it that your function will take certain inputs and yield certain outputs.  But like real legal contracts, unless you nail down every last little detail, you’re going to end up with behavior that you didn’t expect.  Some languages let you write better interfaces than others.  A well defined contract will specify exactly what types of data are coming and going, ideally custom data types that represent exactly what you want (e.g. a geographic longitude) rather than simpler primitive types (e.g. an integer); this lets you know exactly what you’re dealing with, what it means, and what you can do with it.  Worse languages just give you the name of the variable but don’t bother to detail anything regarding its type, assuming that you just know.  While such languages can be easier and faster to work with in the short term, those kinds of assumptions are breeding ground for errors and will come back to bite you in the ass, repeatedly.  The really bad languages?  You don’t even get a name.

Next Time, Gadget…

Well, that ended up being a lot more words than I was expecting.  There are a few other principles that I think are critical to developing good software, but I think I’m going to leave those for another day.  It can be a real series!  How about the rest of you code monkeys out there?  Share some of your own words of wisdom in the comments.

Posted in Software | 2 Comments

PSA: Don’t Spread the Plague

I’ve been miserably sick for the last week, which hasn’t left me much brainpower for writing or even thinking about writing.  So, all that you all are getting this time around is a short public service announcement.  People, please don’t go places when you’re sick.  Stay home.  Rest.  Use your sick leave if you have it so that you’re even getting paid for it.  You’ll recover faster and the people around you won’t catch what you’ve got, just to give it right back to you.

I understand that many people don’t get the luxury of sick time at their jobs, and I can empathize.  Do what you have to do to keep a roof over your head.  But going to social events and parties when you’re obviously sick as a dog is not cool.  Then you just end up infecting some other poor schmuck who has to stay home from work with a brick up his nose and write a public service announcement in place of a real blog post.  And, really, nobody wants that.  Especially the schmuck.  In short, please, don’t be a dick.  It’s better for you and better for everyone around you.

What about the rest of you?  What’s the worst illness you’ve ever caught from someone who refused to stay home and recover?

Posted in Uncategorized | 1 Comment

Flash Fiction: Cold Calculus

“No,” he stammered.  He even pointed his gun at her, though he knew full well that it wouldn’t do any good.  “No, I won’t do it!  You’re lying!”

“Saul, I know you’re scared,” she said, like a parent telling a child that he needed to be brave when going to the doctor.  “I know you’re confused.  And I’m sorry, I really-”

“Don’t you fucking tell me you’re sorry!  Don’t you fucking dare!”  Saul fought against the tears pushing irresistibly from behind his eyes as he glanced wildly around.  His hopes that nobody had noticed him were rewarded; everyone else at the park was too absorbed in their own perfect day to see what was happening in a random car in the parking lot.  Well, almost everyone.  One little girl gaped at him from the swing set, but nobody was going to believe her when she told them about the angry man in the car, yelling at a passenger who wasn’t there.  “How can you do this?  I’ve done everything you’ve asked, everything!”

Her wrinkles seemed to deepen as she frowned disapprovingly at him, giving her the appearance of a reproachful grandmother.  “And it’s all been for the better, hasn’t it, Saul?  What I’ve told you has helped you, helped your family.  You were about to lose your house when I came to you, remember?  My information got you the money that let you save it.  And your wife?  Do you really think the doctors would have found her cancer in time if I hadn’t told you it was there?  You’d be a single parent if it weren’t for me, Saul.  You trusted me then.  You need to trust me now.”

“Is that what all this has been?” he accused, sobbing freely now.  “Throw the wash-up a few bones, get him to trust you, believe he’s not going crazy?  That he really is getting tips from some woman from the goddamn future that nobody else can fucking see?!  Then when he’s on the hook say, ‘Oh, by the way, now you’ve gotta kill a guy or lots of people are gonna die,’ is that it?  Like it’s my goddamn responsibility?!”

A long moment passed before she replied, barely louder than a whisper, “Yes.”  Her stern demeanor cracked for the first time since she’d found him, and for just a moment Saul caught a glimpse of the old woman beneath, lost and tired and consumed with regret.

“But why?  Why me?  Why him?  Shit, look at him, he’s got kids right there!  You want me to shoot a guy, what looks like a decent guy, in broad daylight?  In front of his kids?  Why?!”

She snapped at that, eyes locked on Saul, ignoring where he was pointing.  “Because it has to happen!  Here!  Today!  Because it has to be you.  Because it has to be him.  Because his death will set events in motion which must occur, because others’ lives will go the wrong way if they don’t, and because millions of people will die without them!  Dammit, Saul, I don’t want this either.  I’m not a monster.  I didn’t think it would end up like this, that you’d be so… decent.  But you have to do it.  There’s no other way… believe me, I’ve tried everything.  Absolutely everything.”

They sat together in the car for a short time, companions in helplessness and despair, interrupted only by his fading sobs.  “They’ll catch me,” Saul said quietly after a few minutes.  “They’ll lock me up, I’ll never see my family again.”

“No, Saul,” she replied, her voice distant and numb, “you get away.  Fire three shots and run straight back to the car.  You’ll get away.”

“But all those people-”

“Will be panicked and confused.  It’ll be chaos, everyone will have a different story.  Everyone will see what happened, but nobody will know.  Do what I tell you and you’ll get away.”

He paused, coming to a decision.  After a moment, he began to reach for the door, then paused.  “You’ve never even told me your name.”

She smiled sadly.  “Isabel.”

“And his?”

Her mouth twitched, her smile turned to a rueful grimace.  “Daniel.”

Saul seemed to weigh the words in his mind a moment before nodding curtly and getting out of the car.  His legs seemed to move of their own volition as he walked into the park, his mind a fog.  He vaguely registered the girl from the swings run up to the man and his wife, tugging on the woman’s sleeves as he approached.  “Daniel?” he heard himself ask from a long way away.  The man hadn’t even finished turning when Saul raised his gun and pulled the trigger once, twice, thrice.  The park exploded in panic, but Saul didn’t hesitate.  He turned to dash back to the car, gun still in hand, but only made it six strides before the world dropped out from beneath him.

As his subconscious brain brought him to a stumbling halt, his conscious mind finally registered the two beat cops that had just come around the tree-lined path between him and escape.  For a moment, everything became still and clear.  The cops’ coffee cups hung in midair, dropped as they frantically drew their sidearms.  Saul whirled on his car’s ethereal passenger, who sat silently weeping in the front seat, screaming and pointing the gun despite himself.  “You lied to me!”  The first bullet struck him in the shoulder, spinning him around before the second sent him sprawling.  The last thing Saul saw was Daniel’s wife clutching the girl from the swings and another young boy, shielding their eyes from the carnage before them, as they all wailed in grief and horror.

“Why, Mom?!  Why did he shoot Daddy?!” the girl cried.

“I don’t know, Izzy.  Oh God, I don’t know…”

Posted in Flashfic, Writing | 2 Comments

Flash Fiction: Stowaway

[Note: For those unaware, flash fiction basically just means a very short, encapsulated story.  There’s no hard-and-fast definition of just how many words counts as “very short”; some people cite a limit of fifty-five words, though I prefer a somewhat meatier thousand.  Even that ends up being tight for me sometimes.  It’s a fun format that my friend Bika got me started with a while back, and I thought maybe it was time to bust out the fiction chops again.  So, enjoy!]

It never ceased to amaze Marcus just how quickly he snapped to his senses when staring up the barrel of a gun.  The last hour or so had been a blur of darkness and breathless silence, brought to a painful end in a frenzy of yelling and kicking.  As they’d dragged his sorry, battered hide out of the gasbag compartments he couldn’t tell whether the nauseous swaying he felt was from the pummeling or mere airsickness.

“You got even the slightest inklin’ o’ just how must shit you’ve landed yourself in, tosser?” said a cockneyed voice from somewhere on the other side of that spiraling barrel.

He came so close to saying it.  The line materialized in his mind like an aether wraith, unbidden and, given the circumstances, just as deadly.  It hadn’t even been a particularly inspired line, just a generic crack about the general aroma of the zepp and its crew.  But even now, beaten to a pulp and surrounded by killers, it was all he could do to pass up that kind of straight line.  If I’d had that much willpower last month, he thought to himself, maybe I wouldn’t be in this mess.  Instead he had to settle for the much less satisfying response of, “Can’t say I do, sir, no.”

The giant man towering over him snorted something that might have been a laugh.  “Well ain’t you just as dumb as a sack o’ hair.  Almost enough t’ make me feel sorry for ya.”  He grinned down at Marcus with the ease of someone who’d had this conversation dozens of times before.  A few knowing chuckles emerged from the crowd surrounding the two of them as he cocked the hammer.  “Almost.”

“Wait, I’m…” Marcus barely had the chance to begin.

The captain’s contemptuous grin broke into a snarl as he kicked Marcus squarely in his kneeling chest, hard.  The force of the blow actually lifted him up into the air a little before sending him sprawling onto his back.  “Wait?!” the captain roared down at him.  “D’you know who the hell I am, you bloody tosser?!  I’m Captain Ezekiel Barnizan, most feared goddamn pirate above these bloody islands, that’s who I bloody well am!  There’s people all ‘long this ‘pelago what piss ’emselves at the sound o’ my name!  But you think you can stow away on my zepp?  Tell me what to do?!  I was gonna be merc’ful an’ just give ya a bullet in the brain.”  Barnizan reached down with one massive arm, careful not to break his aim even in his rage, and lifted Marcus bodily into the air by his throat.  “Now, though?  Only thing yer gettin’ is a long drop an’ a sudden stop.”

Marcus dangled helplessly in the giant man’s grip, barely able to breathe.  He struggled weakly as the captain effortlessly carried him through a bulkhead door and into what looked to be a large hangar bay.  Even at his best, though, he knew there was no way he could compete with Barnizan’s raw strength.  The captain kicked some kind of mechanism, knocking it clean off its post in the process, and Marcus had little choice but to stare in horror as the bay doors opened to reveal endless blue sky beyond.  He redoubled his struggles on instinct as the two moved ever closer to death’s door, but Barnizan didn’t even notice.

“Any last words, tosser, ‘afore ya live up t’ yer name?” the captain growled as they reached what might as well have been the edge of the world.

He was surrounded by nothing but air, but he couldn’t breathe.  He had to speak, but the air wouldn’t come.  Panic rose from primal depths within him as the blackness closed in, but the vice grip on his trachea was unrelenting.  Somehow, he managed to choke out the word, “Ran… som…”

Barnizan’s eyes narrowed in suspicion, but not quickly enough to hide the flicker of greed from deep within.  “What’s that, now?” he said, carefully neutral.

The pressure on Marcus’s throat yielded by the tiniest of measures.  The small mercy let him breathe just a little more but also setting his heart racing even faster as he slipped imperceptibly downward.  “My father… noble… he’ll pay…”

Those suspicious eyes narrowed further, but he didn’t let go.  “D’you think I’m bloody stupid?  That I’ll just lap up some story o’ a rich daddy?  That maybe I won’t be askin’ meself why some noble’s son would be dressed like a damn gutter rat?  Or why he’d be stowin’ away instead o’ flyin’ his own bloody private zepp?”

“Lost everything… gambling…  Trying… to get… home…”

The pirate captain’s features twitched almost imperceptibly as avarice and fury vied for dominance.  The battle raged for several long and worrisome seconds before he finally turned and threw Marcus back down onto hangar deck.  “Get this tosser down to the brig, ‘afore I change me mind.”  For a moment nobody moved, pirate faces a medley of confusion and disappointment, but they sprang quickly into action when their captain turned and yelled, “Now!”

Time blurred by for Marcus.  How much he couldn’t say.  When he came to his senses, a small metal room and a night sky were all that were there to greet him.  End of the line, he thought.  Gathering his thoughts, he allowed himself several minutes to recover before he sprang into action.  It had been difficult to conceal his gear underneath the ratty clothes of his disguise, but the effort had paid off.  Document replicator, lockpicks, signal flare, detonator for the bombs he’d planted in the gasbag; all had been missed when they searched him upon discovery, even the micro-parachute at the small of his back.  Ship schematics put the brig right underneath the captain’s cabin.  Right where I need to be.  All right then, time to get to work.  For Crown and country.  A small smile, as unprofessional as ever, crossed his lips.  And maybe a little extra for my troubles.

Posted in Flashfic, Writing | 4 Comments

Mass Affected

[Note: This post discusses Mass Effect 3, including its story and ending.  While I’ve tried to ensure that I keep things spoiler-free, if you’re concerned about such things then you may wish to skip this post for now.]

Of all the things which have conspired to devour my time in recent weeks, Mass Effect 3 has been on top of the list by a wide margin.  If you’re reading this and don’t know what Mass Effect 3 is, then there’s a better than average chance that you’re my mom, in which case I love you dearly and will absolutely forgive you if you need me to explain what the hell I’m talking about next time I call you.  For the rest of my adoring readers, you know what ME3 is.  You may have even played it.  It’s the one with all the shooting, and the diplomacy, and the sentient bio-mechanical elder-god spaceships, remember?

Oh, and Earth on fire.  Like, all of it.

In any case, this lovely little game has done a lovely job of consuming every last iota of my spare time for the past few weeks.  Thankfully, I finally beat it this last weekend.  This is something of a mixed blessing, however.  On the up side, I have a lot more free time now, and its even time when the Bioware writers aren’t yanking at my heartstrings like some kind of sadistic game of emotional tug o’ war.  On the downside, however, I’ve instead gotten to spend a sizable chunk of time reading all of the various reactions that people have posted about the game on the internet, the ones I’d previously been ducking like mad for fear of spoilers.  And boy howdy, are there a lot of reactions to be read.

Reaper

Reapers: You might never look at calamari the same way again.

See, there’s been a bit of a brouhaha winding its way around the internet about the game.  While it’s generally agreed that the vast majority of the game is excellent, there are an awful lot of people who believe that the game’s ending just isn’t up to snuff.  And I don’t mean that they think that it could have used a bit of polish before going out the door, either.  We’re talking reactions like “so terrible that it darkens my opinion of the entire series”.  We’re talking people forming online campaigns like “Retake Mass Effect” hoping to persuade the game’s creators to change the ending, with a charity drive to demonstrate how strongly they feel.  People are downright heated about this.

Now, I confess that my own opinion of the game’s ending wasn’t terribly high, but that’s not what I think is the interesting bit here.  I mean, it’s not like this is the first time that people have disappointed by the way a story ended.  It certainly isn’t the first time that a lot of people have felt that something sucks, either.  Remember the Matrix movies?  Oh, man, talk about a let-down with how those progressed.  There are all kinds of books, movies, and games galore that have disappointed people before, but I’d be hard-pressed to name any other story where people seem to have taken things so… personally.

Dallas's Dream Season

If you can remember back to TV in the mid-80s, you might understand.

So what’s different here?  Involvement.  One of the key features of the entire Mass Effect series, from the word go, has been that the player has a large measure of true choice in how the story unfolds.  It’s not quite an unprecedented feature, as any reader of Choose Your Own Adventure books can tell you, but it’s certainly the most far-reaching and ambitious attempt to yet hit the video game shelves.  This ability to make choices which profoundly impact the characters to whom you grow attached is huge.  They’re likeable, they’re three-dimensional, they’re well written.  And because of the choices that you the player make, they can change.  Maybe they find a measure of peace from their past demons.  Maybe they form relationships of their own because of your support.  And maybe they die, at your hand, another’s, or even their own.

This isn’t just an epic tale of heroism in the face of adversity, it’s stepping across the border into full-on collaborative storytelling.  Players aren’t just watching a story unfold before their eyes, they’re becoming actively engaged and making choices that drive the story forward.  This kind of involvement and collaboration is usually limited to tabletop role-playing games like Dungeons and Dragons, but with a plot of breadth and depth that few D&D Game Masters could match and a level of sensory detail that none could even dream of.  That’s why this stings so much and for so many.  They haven’t just been let down by a movie that they spent eight bucks and two hours to watch.  It’s a personal investment of choices and dreams that each of them feels is going up in smoke.  For them, being let down by the end of the Mass Effect series isn’t just a disappointment, it’s an invalidation of everything they’ve contributed to their version of the story.

Are the game’s creators under a moral obligation to change their work to better satisfy their players?  No, of course not.  Should they anyway?  I don’t really know.  Sometimes it’s best to leave old wounds behind.  The important part of this is that there are wounds in the first place, that a video game can become a vessel for a story in which people can make such a personal investment.  It’s a whole new frontier of story-telling.  I, for one, can’t wait to see where it leads.

Posted in Gaming | 2 Comments