Monday, October 30, 2017

Simply Said

At a meeting of the Minnesota Speculative Fiction Society (MinnSpec) critique group, a veteran said that I had “said bookisms” in my story. In the days when the Hardy Boys and Barsoom books were written, it was common for new authors to avoid the use of the word “said”. They even had a book of alternatives. However, this often results in the author sounding purple--like Frasier Crane at his most presumptuous trying to impress someone. At worst, you end up using a word with other associations and turning your work into a “Tom Swifty.” In Hardy Boys, Biff often “ejaculated” in public. Authors like Stephen King and Elmor Leonard advise that you should avoid all but the most basic invisible words: said, asked, replied, and sometimes whispered. Shouting is effectively conveyed by the use of the exclamation point (!). Of course, there are always times when you want to pick exactly the right tool for the job. In military fiction, one could make a case for words like ordered and reported. A dying man with a punctured lung might rasp or wheeze, but these should be the exception rather than the rule.

I made my own list of synonyms for “said” and taught my editing program to flag them. Below are the first 188 I came up with. Other more physical variants like “spat, giggled, chuckled, laughed, shrugged, or smiled” aren’t considered valid dialog tags at all.

acceded, accused, added, admitted, admonished, advised, agreed, alluded, amended, announced, answered, apologized, argued, asked, asserted, assured, averred,
barked, bellowed, bemoaned, berated, blurted, blustered, bragged,
cajoled, cautioned, chanted, chastened, chastized, cheered, chided, claimed, coaxed, commanded, complained, conceded, concluded, confessed, confided, confirmed, continued, corrected, countered, cried, croaked, crooned,
declared, decided, decreed, deduced, demanded, demurred, directed, drawled,
echoed, ejaculated, elaborated, elucidated, embellished, encouraged, enthused, espoused, evinced, exclaimed, explained, exposited, expounded,
fibbed, finked, fretted, fussed,
gasped, gloated, goaded, griped, groaned, growled, grumbled, grunted, guessed,
hinted, hissed,
implied, inquired, insinuated, insisted, interceded, interjected, interrupted, intoned,
japed, jeered, jested, joked,
lamented, lectured, lied, lobbied,
marveled, motioned, mewled, moaned, mumbled, murmured, mused, muttered,
objected, observed, offered, opined, ordered,
persisted, pleaded, pontificated, posited, prayed, pressed, proclaimed, proffered, promised, prompted, proposed, protested, purred,
queried, quibbled, quipped,
railed, ranted, rasped, reasoned, recited, recommended, reflected, reiterated, related, relayed, remarked, reminded, repeated,  reported, requested, responded, retorted, roared, rumbled,
sang, scoffed, scolded, screamed, screeched, shouted, shrieked, snapped, sobbed, soothed, squealed, stammered, stated, stipulated, stressed, stuttered, suggested, summarized, swore,
taunted, teased, temporized, threatened,
urged, uttered,
ventured, volunteered, vowed,
waffled, wailed, warned, wheedled, wheezed, whimpered, whined, wondered,

yammered, yelled,

Saturday, September 30, 2017

Mewtwo Battle Results

For those who haven't received an invitation, here is what one looks like in your pokebag (left). When you click on it, it tells you the date, place, and time range of the raid. (right) Note that this was a field test version.

Only three of the four of us received the invitation on Tuesday night for Saturday. Everyone caught pokemon like crazy for days to pump up their front lines. I had no pokeballs left. I was reduced to feeding 65 bananas to my people in the gym for stardust. It also freed up space in my bag. Today, we left at intermission during a volleyball tournament to attend the big EX raid event. 28 people arrived for a contest that could only hold 20. With only three minutes, two groups wrestled for control of the gym. By spamming it with berries, Blue held the day to gain an extra ball's bonus. Then came gamer's revenge. We divided up into "equal" teams, with the Blue group getting only 11 players.

In a last minute twist, one of our players was so nervous that she deleted the Pokemon Game from her phone. We had to loan her an iPhone. The next surprise was worse: this Mewtwo wasn't shadowball or focus blast. Instead, he caught us off-guard with hyperbeam. Fortunately, we still took it easily with 175 left on the clock. My Murkrow cannon was a resounding success! I earned extra balls for dealing the most damage in our group. I hit him 4 times with the big crow attacks--lasting a record 30 seconds in the arena. The boss had only a millimeter of red remaining when my third and final Umbreon fainted. I let the computer pick the second wave because we were so close to victory. Mistake. In the last twelve seconds, he burned through three of my biggest bullies (2800 CP). Everyone noted that his tail end was far more vicious than the opening.

My daughter caught her Mewtwo on the first ball. My first ball phased through him like he was a ghost (this happened 3 out of the 14 balls). My son caught his on the last ball, but I went home empty, consoling myself with 9 rare candies.

I worked the concession stands until about four when an alert was posted to the group's Facebook page. The legendary Entei had arrived early. My wife sent Pierce and I with all four phones. We took him with 11 people. Gyrados, Rhydon, and Tyranitar wiped the floor with him. We didn't even burn through our first wave of attackers. My kids caught him, while I got nine more rare candies. My second Blissey will be evolving any day now.

Thursday, September 28, 2017

Pokemon Go Mewtwo Raid Battle--or a Poor Man's Tyranitar

My kids and I got invitations to the EX raid battle against Mewtwo this Saturday. We're very excited. They both have two Tyranitars they're pumping up, the dark weapon of choice against the psychic terror. But what if you're not lucky enough to have caught one in a raid battle? My son takes his killing machine Ryan on walks around the neighborhood while I stay at home and cry. [ insert Bohemian Rhapsody line about being a poor boy from a poor family ] I just have one new Blissey and one decent Lugia who's been my goto bully for raids. The damage being dealt is so fast and furious that I'm expecting to go through three complete sets of Pokemon. Who do I use for the remaining 16 sacrificial lambs?

I've been reading the blogs, and opinions vary. Most list Gengar (known as a glass cannon) if you can keep him around long enough to fire his big attack once. Conventional wisdom also favors the popular battle monsters Blissy and Snorlax. Umbreon, Scizor, and Houndoom are mentioned grudgingly as well. I thought I would do my own math because I have a theory about using an army of disposable Murkrows and maxed-out hyperbeam Furrets with sucker-punch (dark move for double damage). To prove my theory, I made a table of everything in my pokebox. The first conclusion I drew was that no one gets out of this arena alive. It boils down to how much damage you can do and how long you last. Since bringing in a new set of pokemon can take 15 seconds, I factored this dead time in when I computed average damage per second. Your mileage may vary, but the experiment revealed a few surprise heroes.

name type seconds survival damage per sec
Umbreon dark 10 34
Gengar ghost 7 30.5
Murkrow dark 7 28
Tyranitar dark 14 27
Steelix* steel 9 27
Lugia psychic 14 26
Wigglytuff fairy 14 26
Granbull faerie 7 26
Houndoom dark 9 25
Furret normal 7 25
Slowking psychic 14 24
Ditto vs shadowball normal 7 23.5
Lapras water 7 22
Magneton steel 7 20
Vaporeon water 14 19
Dragonite dragon 7 19
Snorlax normal 14 18.5
Rhydon ground 13 18
Girados water 12 18
Blissy fairy 21 17
Alakazam future sight psychic 7 13
Chansey fairy 21 8.5
Ursarang normal 6 8
Pinsir bug 5 7
Scizor steel 7 6

* Note: Steelix is just an estimate because I've never hatched more than one Onyx. But it's one of the best defensive pokemon when you factor in steel's resistance to psychic. It can also be trained to have a dark fast attack.

Tactic 1: Disposable Rocket Launchers
The pokemon highlighted in yellow are ideal candidates for the first wave. Youfurrets "wild weasel" like the missile. Place these pokemon in with your Umbreons and Gengars in the initial charge to pump up your damage bonus and earn more capture balls.
You want to do as much damage as you can in the opening round with dark attacks. I've renamed all these first wave candidates with the number 1 at the front so I can replace all the computer-selected fodder. Murkrows might not be good for much, but the thousand-CP ones I find every day (and Furrets) can be used and then traded away WITHOUT BEING REVIVED. This also solves the cleanup problem. I'm thinking of renaming my war

Tactic 2: The Dogs of War
In D&D, we often found loopholes to the rules and exploited them mercilessly. When our characters found out that 25GP war dogs were twice as tough as we were at first level, everyone bought two. In our case, there are several pokemon (in orange) who may only last seven seconds but can dole out disproportionate damage due to immunities or special cases. 
  • Granbull has a ton of hit points, coupled with a 12 point dark attack which doubles to 24 due
    to Mewtwo's weakness. He might not always get in his 100-point close combat move, but by then, you've done almost as much as the Tyranitar standing next to you.
  • Ditto would half damage fom psychic like his opponent. He also gets the same attacks. If your Mewtwo has shadowball as its main attack, he just provided the way for you to hit him with his biggest weakness! 
  • Lapras was unexpected. I mean, who expects something the size of a house landing on you. Fortunately, he is just over the hit point threshold to survive until he can use his charged attack, and as a dragon, he has some huge attacks.
  • Magneton is one of the rare steel types which I believe take half damage from psychic. If your MewTwo uses focus blast, this one is your first line of defense. His electrical attacks pack a punch, and he has enough hit points to deliver one big blast.
Tactic 3: The Anchor
The final person in a relay race is more important than the first because their endurance will win or lose the race. So on the final wave when the raid boss is almost through, the computer starts picking STUPID things for you that won't last two seconds. Take five seconds or ten seconds to change a couple to some of our surprise finishers (in pink). 
  • Wigglytuff might not have a big CP value, but he can have 200 hit points. Combined with his dark fast attack (feint) that does 20 every second before his opponent can react, he is a can of whoop-ass waiting to be opened. With a some creative dodging, he can take you into your final stretch when no one else has the heart.

  • Slowking gets a bad rap because he acts like a drunken Homer Simpson.
    However, as part psychic, he only takes half damage from the devastating confusion and focus blasts. His confusion does the SAME damage as the boss, but his fire attack does MORE. MewTwo only does 60 to the bro, while he dishes out 140. Who cares if he can't find the door? We want him there for the coup de grace.

  • Wobuffet is a late entry. When spinning on Victory Memorial Parkway in Minneapolis, we caught ten of them. What good are they if they don't evolve and are only 800 CP? It's psychic with almost 300 HP, which means it can last as long as Blissey or Lugia! It only does an average of 13 points a second, but that could be enough to finish the boss, 
As mentioned before, none of these theories have been tested in battle yet, but lacking a pet dinosaur, a boy has to get creative. Game on!

Saturday, September 9, 2017

How Amazon Star Ratings Work.... and Don't

Every time you rate a book, 1-5, it goes into a cumulative rating for that product. Amazon considers a 3 rating as unfavorable. I've had a number of 3-star reviews with titles like "great read," but this balances out over the span of dozens of reviews. The number-one value the customer judges your product by (apart from your cover) is the cumulative rating, How does Amazon compute this all important number?

If you hover over the cumulative rating of a book, it explains that the value isn't an average of all the reviews but a sophisticated proprietary result of machine learning based on review age and verified purchase status. Finding a bug in their algorithm, I explored.

In 21 out of my 23 books over a span of 5 years, it was exactly the average. The two exceptions are the interesting part.

1) My book "The Redemption of Mata Hari" has a straight average of 4 for 6 reviews, yet they rated the book a 3.7. The verified reviews averaged 3 and the unverified were all 5s. The primary reason was a 2-star rating that complained the book talked about sex too much...when the main female character was a succubus. Therefore, there is a clear discrepancy between the two rating groups. To compensate, the formula for the overall star value is weighted,
0.65 * verified + 0.35 * unverified.
On the face, this is fair. It does seem to be a way to avoid those who are "cheating" the system. Unfortunately, Amazon doesn't automatically mark a review as verified if you bought it. Even after the fact, Amazon provides no way to change that flag. Customer service doesn't have that capability. When asked how one can get the designator, they said the only certain way is to go in through your recent orders page on My Account to do the review. If Amazon sends you a "rate this" email, it also connects the dots. Why not when you're logged in normally? At the moment of submittal from your account, the code could easily check the purchase history, or do a periodic system-wide update of this status. The "we can't get there from here" statement doesn't hold water for a company that employs so many experts on data mining. The page for the book itself tells you in a blue banner across the top when you purchased it. That means it's already in an active variable for the java script, no trouble to access when you hit the review button.

2) My book "Foundation for the Lost" had a correct average of 4.5 after 14 reviews, the same as every other book. Then, on 9/1/17, I earned another 5-star review from a verified purchase. Excited, I computed that this would bump my rating by either metric to 4.7. After a week, nothing changed. The computation wasn't updating from the database. So I called support. They agreed that this wasn't reasonable behavior, but there's a special group dedicated to just this issue. He sent in a ticket and told me I would have an explanation by email. A couple days later, I got an email that was literally someone mousing the info text you see when you hover over the star rating, stressing that it was machine learning--nothing more or less. I completed everything but my dissertation for a PhD in computer science with a minor in math. I have 12 software patents and 30 years of commercial programming experience. While learning might phase out the emphasis of the oldest data, it would never throw out the latest and more reliable category. This response is stonewalling for a bug. Amazon needs to be accountable like any company taking 30 percent of my sales in exchange for these services.

I should probably just keep trying until they give me an honest answer, right? For my first audiobook bounty, it took me over 10 months before their bureaucracy gave me a response. That was the best case. In the worst case, Amazon support people gave me another phone number to call for help:
1-888-280-4331. This number offers you three too-good-to-be-true deals that require your credit-card number. If you don't fall for any of them after five minutes, the recording demands that you hang up. It shouts the demand three times and then plays a loud, annoying tone. This is also stonewalling. When asked to rate this interaction, I gave them the lowest possible and used words like "unacceptable." In any company, this would have merited an apology. Either they don't read these objections, or one-star customer service is so common that they can't reply to all of them.

I'm not saying this "machine learning" emperor has no clothes, but the fig leaf is pretty small.

Tuesday, August 29, 2017

Leaving Houston, or How Krispy Kreme Saved Our Vacation

After 50 inches of rain and four days of telling us the port would open Monday, Carnival finally admits that our cruise is canceled. They will give our money back plus a $192.20 cruise credit if we schedule with them in the next 60 days. For the record, that amount is not enough to reimburse me for the hotel wait, let alone entice me to undergo this ordeal again. We had trip insurance, but they are reluctant to pay anything because Carnival gave a refund.

We had 90 minutes after finishing breakfast to check out, and a very brief window without rain. While waiting for the luggage cart, I chatted with people being rescued from their homes by volunteers in boats. They all showed me cell phone pix of their submerged homes. I mentioned to the front desk that we were considering New Orleans or Florida for our replacement vacation. The woman shook her head violently. "What we got, they're getting now."

The moment we were packed, the rain started again. They were expecting another 15 inches before the President's arrival, and people were worried the levees might break. If it weren't for the heavy rain, I would have gone 80. As it was, I could only manage 55 in the dry lane. As we traveled north, I used language I shouldn't have in front of my kids. We were stunned to see the access roads deep underwater. You can just make out the top to the "construction zone" signs.

Thank God we had plenty of gas already because I wasn't slowing down for anything. Another 12 inches of rain, and there would be no escape. When we finally did pull over for lunch, the Jack in the Box had countless leaks in the ceiling, with drips hitting half of us. Three-quarters of the sky was still black. 

My daughter had been naming the Pokemon she caught things like "mysuckyvacay". As a thirteen-year-old, she is on the dangerous verge of teenhood angst. When we asked her what she wanted to do before going home to make this a better vacation, she replied, "Krispy Kreme." We don't have them in Minneapolis anymore. So we made one last stop in Texas to make a little girl's dreams come true... or at least make the 20-hour drive home more tolerable.

Sunday, August 27, 2017


An appropriate song

Here's the weather map for our vacation.

Everything north of Houston is CLOSED, including the freeways. We went to the mall again to play Pokemon go, and everyone had to go to the bathroom.

Empty Malls of Conroe, Texas:

After half an hour of driving, we found a Marriott with sandbags and towels in front of the doors that let us in to use the facilities. We almost didn't make it back to our own hotel because of flooding.

Note the barricades in front of 45S. People who ignored these ended up on the evening news.

Saturday, August 26, 2017

Harvey Holds Holiday Hostage

My wife has been waiting all year for her vacation--a cruise because she loves sea days. We chose the last week we could before the kids going back to school. We also chose the port of Galveston because we've been considering a retirement home there. I reserved a hotel for two nights on the seawall, with easy access to the beach and the houses we wanted to look at.

Instead of flying, we drove down over two days. We even scheduled a realtor for Friday. The hotel we picked was once a Super 8, but had changed to America's Best Value. The area had experienced flash floods, limiting our choices. The hotel reeked. Someone had propped open the front door with a towel because the air conditioning wasn't working well. The utter lack of security made the family nervous, but we soldiered on. Nothing in the room worked as intended--clock, light switches, etc. Even the water from the faucet smelled. We put all the clothes we wore in those beds into plastic bags to be washed as soon as possible.

Thursday morning, we saw Galveston had a tropical storm warning. The hurricane would hit far away in Corpus Christi. The Galveston hotel said that everything was still good there.

That afternoon, we were passing through the north Dallas area in 85-degree heat when our AC stopped working. It was one of those weird moments where you look at your partner and say, "This shouldn't be happening, but the universe is trying to tell us something." It happened within thirty minutes of the Honda dealership we went to when we lived in Texas. The dealership was five minutes from our favorite restaurant--The Blue Goose.

We sat in the dealership two hours while they replaced two parts that just stopped working. It blew colder than ever when they handed it back. In the meantime, we called old friends to meet us at the restaurant. Things seemed to take longer than normal at the restaurant. My son ate little, saving room for Krispy Kreme--another ten minutes south. Given that we had a check-in time of one a.m. to keep the reservation, I was blowing a gasket inside during the side trip. But a still voice inside told me to roll with it. We had half an hour to spare, and Pierce rarely asked for food. He's just as tall and skinny as I was at his age.

As we ate our free hot-and-fresh donut samples, the poor women behind the counter said we were the nicest customers she'd ever had. It seems others in Allen had a sense of entitlement. All this reinforced our resolve to raise our kids near family in Minnesota. When we left this area, our neighbors' sixteen-year-old had just wrecked his brand new sports car. The schools had just installed cameras to prevent drug sales on campus. Instead, our kids learned to split wood and do chores to earn college money.

Before we continued the trip, new Pokemon popped up on our phones. The family chased them, narrowing our margin even further. Signs on the highway told us to avoid the coast. As we reached the college town north of Houston, signs changed to "Get gas now." Heeding the warnings, we got off to ask questions. We were about two hours away from the hotel and the deadline. We managed to top off our tank minutes before the station ran out of regular. The warning for Galveston had been upgraded to a full hurricane. The hotel clerk told us they were still open. However, a man in the parking lot warned us *not* to go there. Listening to him was like hearing an Old Testament warning to a town facing destruction. When we called the hotel back, the clerk admitted that the whole place would be flooded and everything closed. He also told us that they would be obliged to give us our money back if we called the company we scheduled through before check-in time. The gas station was surrounded by less expensive hotels, food places, and malls. We heeded the warnings and canceled. As we checked in to the Best Western, the Port of Galveston texted us that the port would be closed until further notice.

The first day of waiting was nice despite the rain--Pokemon Go in the malls, great dining, and a family card game while we watched a movie on the TV.

The news told us that the shutdown would likely last till Tuesday. Cruise ships would be taking on supplies in New Orleans, letting off any customers who wanted to go. The port said that depending on damage, they might reopen as early as Monday. Looking at houses would be out of the question till then. The cruise line said that they would give a partial refund but give a shortened cruise with an unspecified itinerary ... we still don't know when or where. Every hour before landfall, there are warnings on the TV about tornadoes and flash floods. Winds on the coast reach 130 mph, but it should all be over tomorrow.

As there are no cheap last-minute flights or other cruises, we stuck in the holding pattern. Saturday, we had to extend our reservation at the hotel indefinitely. Fortunately, due to "evacuation", we don't need to pay tax on the emergency stay.
On the down side, the mayor of Houston has asked everyone to stay indoors. For periodic rain? Since the people at Burger King took him seriously, we had to buy food at Walmart for the next few days. We repeated yesterday's trip to the mall. Almost everything was closed except the food court. I got a Sonic milkshake to share with the family. We took all the Pokemon gyms in the area and had fun on the riverwalk. We found dozens of Magicarps, Slowpokes, and Psyducks. By five, it's pouring rain, and we had to run back to the car. Everything is closed, so we head back to the hotel to watch the Twilight marathon. The emergency broadcast system interrupted every 15 minutes.
The port is waiting for the rain to stop before they assess damage. Still no word on when the real vacation will begin. Even after its "death", Harvey holds us hostage.