Tuesday, April 30, 2013

Open Letters

Dear Authors of the Software Library I'm Working With,

If you provide a base class that I need to subclass in order to provide certain functionality, and your base class has a simple getter and setter method (such as getDebugMode and setDebugMode) whose purpose is obviously just to encapsulate a private int within the class, then please do not declare these methods as pure virtual and force me to implement them. Even assuming that there was a legitimate reason to include functionality in these methods besides the obvious, there's no reason not to provide a default implementation which just gets and sets a private int. Forcing me to implement textbook one-line getter/setter methods makes me feel like I'm being forced to participate in a Computer Science 101 exam.

Regards,
Don

...

Dear Patrons of The Gym I Go To,

For whatever reason, the towel supplies at our gym are somewhat limited, and experience has shown that the gym laundry service can occasionally be unreliable. There have been several occurrences during peak hours where the locker room has been without towels for lengthy periods of time, which , I'm sure you'll agree, is inconvenient for everyone involved.

To that end, for the past several years, every available surface in the locker room has been plastered with signs requesting that all patrons limit themselves to one towel. It is impossible to attend the gym without being confronted by one of these reminders of the scarcity of supply and of the need to be mindful of the existence of your fellow guests.

So what, exactly, goes through your mind when you take two or three towels for yourself? Are you being deliberately hostile to the rest of us, or have you somehow managed to convince yourself that the extra towels you took are some sort of magic towels that automatically reproduce themselves after you take them? Or is there something inherently special and valuable about your existence that means that it's more important for you to use an extra towel just to dry your feet while you get dressed, than it is for someone else to get to work on time?

I hope that you will take the time to contemplate these questions and take the appropriate actions in the future.

Regards,
Don

...

Dear Creator of the Universe,

I look forward to discussing several implementation flaws in your product at some point in the future. I have several suggestions for a patch or hotfix.

I am not at this time demanding a refund, as I intend to be using your product indefinitely; however, I believe that there are several opportunities for improving the overall experience for all of your registered users.

Regards,
Don

Monday, April 29, 2013

Review: Crimson: Steam Pirates

Crimson: Steam Pirates is a turn-based naval combat game from the fine folks at Harebrained Schemes. It's available both on the Apple App Store and on the Chrome Web Store, so it's playable on the PC. It's an enjoyable game, but I'd really like to see a more full-featured sequel.

As you might have guessed from the game title, there is a steampunky theme to the game, but if you prefer, you can think of it as alt-history pulp action. You take the role of a pirate captain, set loose in the Caribbean with a colorful crew and a fantastic array of vessels and weapons, including steam-powered dreadnoughts, airships, and lightning guns. For each mission, you are given a few ships, a few officers, and a few mission objectives, and your end-of-mission score is based on how many objectives you completed, how much loot you collected, and how many targets you knocked out.

Actual gameplay is simple: during each turn, you plan out the movement of each vessel under your command. (Anyone who's played Steambirds will find the movement system familiar.) You don't choose firing targets; your ships will automatically fire at any enemy vessels that move into their firing arcs. You do get to choose a special ability for each of your ships to use, which include such abilities as "fire faster" or "move faster" or "repair damage". Each ship can use one special ability a turn, and when an ability is used, it must recharge for a fixed number of turns before it can be used again.

You can also attempt boarding actions, by using the appropriate special ability and then bringing your ship in contact with a chosen enemy ship. The boarding action occurs in three waves: you may designate which of your officers (each with a different combat strength rating) to send out in each wave. If your total strength in a wave is sufficient to defeat the enemy officers in that wave, you win the wave. You must win all three waves to win the boarding action. A successful boarding action gives you control of the enemy vessel, so long as you transfer at least one of your officers to that vessel. Each officer grants one or more special abilities to the ship that officer is in, so you need to think about which abilities are best placed on which vessels.

Overall, I found the difficulty level fairly low. Out of the first eight missions, I won seven on the first try, and had to run the eighth mission twice. The simple strategy of "keep your ships grouped together, keep the enemy in your firing arcs, and use your special abilities often" was sufficient to overcome every challenge.

The first eight missions of Crimson: Steam Pirates are free to play, and took me about two hours to get through. There are two other mission packs available to purchase, each with eight more missions and each costing $2 USD. So if you buy into the whole package, that's $4 for six hours of entertainment. (If the add-on missions are more difficult or lengthy than the first eight, then your play time might be even longer.) Not a bad deal for a solid, if simple, game in my opinion.

What I'd really like to see is a sequel that allows you to choose which ships to deploy on each mission, and to choose the weapons and officers to assign to each ship. This would add some strategic depth as well as some replayability ("I wonder if I could beat that mission using entirely airships...").

As for the story in the game, it's nothing special or memorable, though I expect it would be challenging to develop a deep story with nothing more than a paragraph of narrative at the beginning and end of each mission. More impressive is the collection of lore about the world of Crimson, posted at the Hairbrained Schemes site. There's a timeline of significant events, lists of notable places, persons, and technology, and a quick sketch of the political situation. There's more than enough information here for a solid roleplaying campaign. Once again, I'd love to see a sequel that provides a deeper exploration of the world.

Overall I recommend it: it's turn-based strategy, it's easy to learn and to play, and the art and style bring back fond memories of the alt-history pulp action of Crimson Skies (it's probably safe to say that the similarity is deliberate). For a total price of zero dollars for the first eight missions, it's certainly worth a look.

Thursday, April 25, 2013

Really Extremely Very

I expect that most authors are well aware of the problem with the word "very", and other words of that ilk: they don't add anything of substance to the text, and they're a lazy way of providing emphasis. For instance, if an author says "the night was very hot," just how hot is that? One person's "very hot" might be another person's "mildly hot." Is it hot enough that no one can sleep indoors? Is it hot enough that the crickets are panting instead of chirping? Or is "hot" even the right word for the type of weather the author has in mind? How about "sultry"?

I'm actually encountering this same problem in my programming life as well. The contractors who are testing our software can't seem to use the word "confusing" without prefixing it with the word "very", as in "the controls on this page are very confusing." Wouldn't the defect report communicate the same information if it just said "the controls on this page are confusing"? Is there any additional benefit in trying to specify different levels of confusing? If so, why aren't we seeing any reports of UI elements that are merely "confusing" and not "very confusing"?

I've tried to remain vigilant about the use of "very" words in my novel, but recently I've begun to wonder about similar lazy words in my own speech: specifically, profanities. Craig Ferguson has told us that "sometimes, only a cuss word will do," but is this really true? When I use one of the words that you can't say on broadcast television, what information am I trying to convey? "I'm angry"? "I'm disappointed"? "I want you to pay attention to this"? How about when I use words with a religious context, like "God"? I haven't been a practising Catholic in over twenty years; why am I lending emphasis to a statement by referring to a mythological entity whose existence I do not assert any belief in? Wouldn't statements such as "by Odin" or "by Osiris" have the same weight? Why bring religion into it at all?

It might be useful, as an exercise, to try to omit any expletives from my speech and try to achieve the same emphasis and emotional weight through more polite and descriptive words. I don't know if I have the self-discipline to pull it off, but the results would be interesting.

Wednesday, April 24, 2013

Review: Strikefleet Omega

One of the first things I did after I bought my new Android phone was to install Strikefleet Omega on it. It's by the same people who will, eventually, release Shadowrun Returns. I'm pretty happy with Strikefleet Omega so far. The game concept is similar to Battlestar Galactica; a bunch of bad critters have launched a surprise attack on humanity, and you are in command of the lone surviving human space fleet, warping from star system to star system and fending off increasingly dangerous hostile attacks.

The game starts pretty simple; the bad alien ships fly in from the edges of the screen, you tell your starfighters to go kill them. But then they start layering in complexity; asteroid mining, and extra ships you can warp in as reinforcements, and artillery strikes, and different flavors of bad aliens that require different tactics to destroy. It's an entertaining little "I have ten minutes to kill and I have my cell phone" game. The story is pretty generic, but the character art is well-done, and there are a few little in-jokes for the fans (like star systems named "Plissken" and "Dunkelzahn").

It's a free game, supported by microtransactions, but the microtransactions aren't terribly offensive. You can buy Alloy and MegaCreds; Alloy is used to buy new ship types and to upgrade your ships, and MegaCreds are used to buy perks (special advantages like increased XP or increased fighter damage), to buy special ship types, and to pay for firing your flagship's Deathblossom, a superweapon that kills everything on the screen. The rates they're charging seem kind of expensive for what you get, but so far as I can tell, you can play the game just fine without spending any real money. You earn Alloy during play, so you'll be able to expand and upgrade your fleet just by completing missions. You don't earn MegaCreds past the initial 10 you get when you install the game, but the game is perfectly enjoyable without the premium ships and bonus perks. (You get to choose one free perk every mission anyway, so you're not entirely cut off from that part of the game). It's a shame that you have to spend real money to fire the Deathblossom, but you can think of this as encouragement to improve your play so that you don't have to rely on it.

Overall, well worth my download time, and I recommend it for Android and iPhone users.

Tuesday, April 23, 2013

Very Busy

I'm going through another edit cycle with my novel, based on recent reader feedback. I'm trying to arrange to do a volunteer shift at a local community center. I'm still arguing with BulletPhysics. There's probably a dozen other things I ought to be doing and don't have time for. If Wolfram and Hart showed up at my door and offered to remove my sleep so that I could have more hours in the day, I'd sign up in a heartbeat.

Maybe not. I do like my sleep. But a few more hours in the day would be nice.

Monday, April 22, 2013

Refining

I've been thinking that my novel-writing process needs to include more planning time before I actually get to the point where I'm typing "Once upon a time." While writing Stone of Names, I hit several points where I realized that I hadn't really thought certain events through, and that I needed to go back and rewrite my earlier scenes so that my later scenes made sense.

I didn't have much in the way of an outline for this book. I started with three specific scenes in mind -- one at the start, one in the middle, and one at the end -- but with nothing specific planned out in between. It was fairly obvious to me what needed to happen between the first scene and the middle scene, but as I wrote, I realized that I wasn't sure what to put between the middle scene and the last scene. I wound up adding a couple of new characters, which made the last half of the book more interesting, but then I had to go back and introduce them briefly in the first half of the book to keep things tidy.

There were also plenty of little details that I needed to go back and add so that the main character was properly prepared to overcome a variety of obstacles. If I'd thought through those obstacles up front, I might have been able to plan for them ahead of time.

What I think I'd like to try for the next novel is something like this:

Step 1: General statements about the book's action. This could be as simple as two sentences: one describing the physical action (legendary warrior Aria Aviplix must find and destroy the Eye of Elfador) and one describing the emotional action (Aria is forced to confront her ex-lover, the Duke of Dredskul, and resolve her feelings for him). With these two statements made clear up front, I can design the rest of the novel to continually reinforce these themes.

Step 2: Chapter outline. This would be a brief outline, giving a few sentences to describe each chapter at a very high level. This lets me set the pace of the book and ensure that I've established a continuous line of action from the beginning to the end.

Step 3: Scene outline. I'd then break up each chapter into scenes, and for each scene, make a bullet-point list of what needs to happen, what information needs to be delivered, and what needs to happen in prior scenes to make the current scene work.

Doing this work up front would allow me to manipulate the action and the plot elements so that they're nicely distributed through the book, and so that there's no discontinuity or awkward shifts of direction.

The trick would be getting through this planning phase as expediently as possible. It won't be immediately obvious when I'm done with the planning phase, since I could easily wind up tinkering with the story outline for months. At some point I'll need to say "good enough" and start generating prose.

I have no doubts that I'll still wind up doing some level of revision and rewriting. As I'm writing the book and experiencing the characters and events, I may change my mind about a variety of things. But at least with a decent outline up front, I won't be in danger of hitting a dead end halfway through the book.

I'm quite sure that just this sort of planning is recommended by a variety of "how to write a novel" books, but I think that trying to follow someone else's recipe for art is a bad idea. You need to develop your own process that agrees with your own pace and your own goals. My process will probably continue to change with each book; hopefully this means that each book will be better than the last.

Friday, April 19, 2013

The Data Center Always Rings Twice

One of the very, very few good things I got out of my time at Borders was a profound appreciation of the luxury of a full, uninterrupted night's sleep.

Within a couple of weeks of my joining Borders, I was handed a pager and given on-call responsibility, 24x7, without rotation. I remained on-call more or less non-stop from that point on. I actually managed to get myself into an on-call rotation for the last couple of years, but all this meant was that I wouldn't be the first person called in case of trouble.

So, on any given night, I might be awakened by the phone ringing at 2 A.M. to notify me of some critical issue that had to be resolved right away. Sometimes it was an issue that had never occurred before and had no obvious cause; sometimes it was an issue that required me to get dressed and drive down to the offices; sometimes it was an issue connected with a system that I no longer had any formal responsibility for.

I don't know how other folks deal with that kind of responsibility, but after ten years, I got to the point where I went to bed every night dreading the ring of the phone. Sometimes I would lie awake, imploring the local benevolent spirits for the blessing of a night without a phone call. If I had stayed there much longer, I would have been rubbing lamb's blood on the door every night so that the Angel of On Call would pass me by.

I have not been on-call since October of 2009. And even now, when I go to bed, I get a twinge of horror when I look over and see the telephone. But then I remind myself that those days are passed, and that my slumber is no longer threatened by the possible failure of a computer program somewhere else on the planet. I assure myself that my life without on-call for the past four years has not been a dream that will shortly be interrupted by the ring of a cell phone.

And then I sleep.