Baseball Thoughts

I spent the day with baseball in the background while I cursed at computers (cursing at computers is my day job). At first it was a forgettable contest that the A’s found a way to lose, then a really good game between the Dodgers and the Cubs.

You know it’s a good baseball game when two players are described as “hockey players” because of the way they play. There’s not much of a better compliment you can give a player of any sport than to compare them to hockey players. “That guy plays like a soccer player,” would not be flattering. Even an American football player would be flattered to be compared to a hockey player.

That there was enough grit in this game to invite the hockey comparison was a good start. Then there were two strong pitchers, and two managers with a lot to do. It was a National League game, and would not have been nearly as intricate with the designated hitter rule. (No! Nay! Never! to the DH in the National League!)

In contrast, The San Diego Padres were visiting their pals in Denver, for the conclusion of a pitching-optional statfest in which we were reminded that the “modern era” in baseball starts in the year 1900. Because there were numbers coming out of this matchup that transcended time. Any one of the games in this series would have raised eyebrows with ridiculous scoring, but what good out was the sustained, continuous ridiculousness that happened over the last four days in Denver.

The games were downright silly, resembling NBA back-and-forth over baseball’s rare-burst scoring.

Aside: In Soccer, scoring is rare, and most of the time not likely. In hockey, scoring is rare but almost always possible. In baseball, scoring is rare, but points come in batches — the winning team is the one that gets the most out of each batch, and there are players whose specific skill is stopping the other team’s run. In the NBA, if you defense succeeds half the time, you will go down in history.

Even though the fuckin’ Dodgers won, it was a great game, the outcome uncertain up to the last diving catch of a dying flare. If that ball had hit the grass, the game would have gone the other way. And that’s sports.

For Some Large Values of Two

Spanish, apparently, is a more honest language.

1

Burn by James Patrick Kelly

I was bopping around looking for some good ol’ space opera to read, and I came across Burn by James Patrick Kelly instead. I found it on manybooks.net, and after I registered I sat down to read it.

It’s really good.

We get a glimpse of far-future humankind, with tech that borders on magic, but there’s also a little mysticism. Or at least luck. That future is merely a backdrop, however; the actual conflicts, the personal and the political, are very human, and told from the point of view of Spur, someone we can understand. His acestors decided to abandon the tech and go back to a simpler life. While Spur knows that the “upside” exists and is filled with tech marvels, he also knows that the same technology at some point must undermine the humanity of those who wield it.

Of course he knows that; he’s been taught that his entire life.

There’s a shade of Buck Rodgers here — not the swashbuckling space hero nonsense I love so much, but “the future as seen by someone like me” narrative. Except Buck doesn’t have to deal with differences between past and future that are quite so fundamental as the ones Spur struggles with.

Spur is badly wounded fighting a fire that is almost a diabolical intelligence on its own. While convalescing he is in a hospital that gives him, for the first time in his life, a glimpse of the upside.

While healing, Spur is given a chance to reach out to the universe. It is a guilty pleasure, an idle conceit as he convalesces, one he knows his friends will not approve of. He pokes at the universe, almost randomly. But then the universe answers back. The fuckin’ universe answers back. Luck, it’s just luck. The event that triggers this story (or the part of the story we see here), is one of near-fantastic luck. It would be difficult to swallow, except, well, luck is a real thing.

The author does an admirable job of avoiding judgement; there is no absolute “right” and “wrong”. While characters make judgements, the author does well to not color the debate with his own leanings. One person says “terrorist”, another says “martyr.” “Us” and “them” gets tangled. And there are subtle elements, as well. Spur is married, but the marriage is on the rocks. There are the usual reasons, but perhaps he was in love with someone else all along.

One quibble: if pukpuk had been capitalized like most organizations of humans are, I would have parsed the opening sequence (which is pretty hectic) more cleanly.

Like all human conflicts, not everything is wrapped up in a neat package at the end of this story. The immediate conflict is resolved in a satisfying way, and the final choice Spur makes rings true. There are still large questions outstanding, about the future of the planet and the clever indigenous species. But Spur has had a taste of what the upside has to offer, and in the end this story is about him, and the choice he must make.

I wrote some of the above on the manybooks.net site, then I decided to share my findings here as well. As per tradition, I went to Amazon to get links to share. It was then that I learned that this story has earned the Hugo and Nebula awards. Well then!

Note: if you use the above link to buy the book (or an Antique Silver Multi Cut Rhinestone Bridal Royal Tiara Headband) from Amazon, I get a kickback.

I Just Want To…

Any time a user laments, “I just want to…” you have encountered a software failure. The failure might be in the design, it might be in the implementation, it might just be in an overloaded server somewhere.

But “I just want to” is real, and if UI designers and the engineers that support them heard every “I just want to” out there — millions every day, I’d bet — then the software we use every day would be a lot better.

Because here’s the thing: “I just want to” is followed almost always with a well-defined use case, often with a very realistic expectation.

As a software guy I can tell you that often the requirements we get for making the things we make are horribly vague.We make those applications to spec (as far as we can tell) and feel good until actual humans start to use the system.

During testing of a system, you get fairly convoluted feedback. But that frustrated voice saying “I just want to” is almost always followed by a very specific and reproducible case. tonight, I just want to add a link in WordPress 5 that has a description that is not identical to the URL.

That’s a REALLY DAMN BASIC THING. But I don’t see how to do it. I’m sure it’s possible; WordPress 5 block editor couldn’t possibly be that impaired.

Less-ethical companies might just keep the mikes on and listen for “I just want to…”. But if I could say “Hey Siri, I just want to put a link in WordPress 5 with a different description,” and Siri said, “Well, have you tried…” and when I say “Yeah, that doesn’t work,” Siri would say, “I will tell WordPress that all you want to do is…” and the bug report would be filed.

I just want to tell Siri my problem and have it be handled.

1

Ah, Marketing

Science: As far as we can tell, the gasoline you choose has no effect on your mileage.

Chevron: No gasoline has been shown to give better mileage than Chevron!

1

The Year Uncle Solomon Saved the Crop

That is what my family calls that year, anyway. Other people around here have different names for the event, but right up front I want to remind you that whatever they have to say, they wouldn’t be saying it if they had starved to death.

Life on a colony is never easy in those first few years; you are on a planet that has plenty of protein (or something like protein), but nothing the human newcomers can metabolize. There follows a time of biological warfare, as humans try to assert flora and fauna friendly to their metabolisms into the local ecology. There is a great deal of preparation, and megahours of simulation time, but sometimes the unexpected happens, and colonies die.

The scientific papers now call it a “loose gene”, but at our colony on Peridon IV we called it “What the fuck just happened?” Any time you thought you had a handle on things, everything changed. A new virus, a new weed, or perhaps new Big Fucking Bugs.

We had managed to establish a grain with a distant relationship to barley, but the planet had resisted most of our other imports, in a rolling battle with our geneticists, who were ever trying to gain the upper hand. We were making progress, however, and the barley was the triumph that would give us a little more time to tame the planet.

While the planet had sported hundreds of catalogued varieties of Large Interesting Bugs, the BFB’s came from nowhere. They were 10cm armored appetites, implacable and fearless in their quest for nutrition. And while our vegetation was just as unpalatable to their pests as their vegetation was to us, somehow the BFB’s had evolved over two growing seasons to be voracious for our barley. Just like that, Peridon IV’s loose gene had surmounted the protein gap.

We threw everything we had at the BFB’s of course — chemicals, viruses, you name it. They adapted around each attempt to eradicate them. Enter Uncle Solomon.

He was not, technically speaking, a scientist, and it is not officially known how he got access to the genetics lab. (Unofficially, he was sleeping with the chief scientist.) But Uncle Solomon was in the “Live to regret it” school of action, and on the day we were preparing to burn half our fields so that we might save the other half, my uncle emerged from the lab with a very large box, which he pulled behind him on a motorized wagon.

“Stay your flames!” he cried out, and perhaps because of the archaic language we paused. He smiled, stopped next to one of the infested fields, opened his box, and unto Peridon came the Even Bigger Fucking Spiders.

Uncle Solomon has been vague about where some of the DNA for his creation came from. The loose gene is in there, however, along with the BFB’s crossover metabolism. Uncle Solomon’s spiders were an enormous success, demolishing the BFB population.

And, alas, the Large Interesting Bug population. And all the other indigenous bugs as well. The crops were saved. WE were saved.

We just have to be a little more careful now, is all. Our crops are absolutely safe — there are no vegetarian spiders, and Uncle Solomon’s creations (and the loose-gene spinoffs) are true to that rule. And after the spiders eradicated the pollinators we needed to sustain our crops, a new sort of spider emerged to fill that role. That has to mean something, yes?

It will be a few more years (or at least months) before the spiders evolve to the point they can breach body armor or penetrate a reinforced home. That’s plenty of time for Uncle Solomon to come up with something that can eat the spiders.

1

It’s Funny Because it’s Painful

I just heard an ad that said “millions of Americans can’t be wrong.”

1

Silicon Valley’s Heartbeat

Today on the way to work I saw three brand-new Teslas, and an Audi R8 (Audi’s V-10 powered street-legal race car) with temporary plates. On the way home I saw another new R8, and a bright yellow McLaren fresh from the dealership. Did you know that Maserati has an SUV (SuV)? I didn’t until this afternoon. And of course there were more new Teslas.

At one point on the way to work I was peering through the windows of the Tesla Model M in front of me to see if the Tesla Model X in front of it was also brand-new.

The sales team up the highway at Tesla Central must salivate over April 16th.

In mid-April and in mid-October, employee stock grants at Apple vest. I assume Google has a similar schedule, along with all the other large tech companies in the area. Including, I imagine, Tesla. (Note: I couldn’t come up with the right Facebook wisecrack to put here.)

Twice a year, there is a gush of cash from the tech companies, and with it a surge in spending on real estate and fancy cars. It’s probably good to be in sales here; you can go on vacation during the months of May, June, November, and December, and still be around to glut when that mighty money heart pumps once more.

I am now part of this heartbeat as well, but not to the frivolous-quarter-million-dollar-car level. For me the stock vesting is a windfall to invest, so that I might one day not have to work at all. This year the investment also helps family members, which makes it double-cool. Alas, for me there will be no Audi R8 Spyder. It’s a mid-engine convertible that can do 150 as easily as I can sneeze, but it looks a little butt-heavy to me anyway.

1

The Creche

The children sat in a semi-circle in the grass, seventeen of them, aged three to nine in traditional years, their eyes fixed on Evie the storyteller, who sat cross-legged at the focus of the children, the Holy Book in her hand. The petite brown woman smiled, a little wistfully, and opened the Book. “Today I would like to tell you about Earth.”

Willi had to smile as he watched the younger kids sit forward eagerly while the older kids rolled their eyes. Will relaxed on his bench, partially concealed by the lush vegetation of the creche, but not actually hiding.

“Earth was a beautiful place,” Evie said. “It was like this,” she said, waving at the vegetation as it flourished under the lights of the creche, “but the air was sweet — and above,” she glanced at the gray metal over their heads, “above was the sky. It was like a ceiling, but far, far, above. And sometimes, water would fall out of the sky, and the people would dance with joy.”

Willi watched as one of the older children leaned over to the boy sitting next to her. With a thought and a gesture Willi tapped into her audio. “And then we fucked it up, because we are greedy mammal bastards.”

Willi groaned but he was watching today for precisely this event. He stood and cleared his throat softly. “Malika, would you come with me, please?”

The girl swung around and looked at him, her brown eyes wide in her pale face. “I didn’t…”

“Come with me.”

She stood and pulled at her jumpsuit, which didn’t fit her very well. Too small. They grow like weeds at that age, Willi thought. But there was no place for weeds here. Not in this garden.

Tears were escaping her eyes as she walked away from the other children. They watched her go with stony faces, internalizing the most important lesson of the day: There are some things you never say out loud.

Malika stood in front of Willi, her eyes fixed on his feet. He reached out and put his hand on her skinny shoulder and felt her shaking. “Am I compost?” she asked.

Willi let out a slow breath. He used his hand on Malika’s shoulder to steer her toward the exit. “We are all compost. But before we are fed to the grinder, we must justify the resources we consume.” To make his point he touched a control and the heavy door cycled open, revealing the stark passageways of the starship. Even outside the creche, the air in the sections used by the mammals was heavy with moisture and fizzing with oxygen. Expensive air.

“It is delicate,” Willi said, knowing that all his words might be heard, the same way he had eavesdropped on Malika.

She was crying now. “Please,” she said, as fluid ran out of her eyes and her nose. No matter how efficient the recycling was on the ship, the crew would never be able to condone such waste.

Willi leaned in close and whispered, “They resent us.” Her eyes widened and Willi gave her a tight smile. “For any one of us, the ship could support ten of them. Ten of them awake.” The lizards would hear those words, but that was all right. This was just part of the curriculum. Every kid got this lecture eventually, in one form or another.

“They hate us? Why do they keep us?”

Behind them the door to the creche closed, and they walked down the sterile gray passage, with no particular destination.

“No, they don’t hate us. They don’t — they aren’t capable of hatred. Which, indirectly, is why they keep us. But without them, we are lost,” Willi said. “Earth is gone, just a radioactive cinder orbiting an ordinary star. Our ancestors did that to themselves. This is our home now, and we have to earn our way.”

1

The Privilege of Choice

One of my fellow code warriors at work is considering moving south from her little place in Oakland. Up there, she has a small home in an interesting neighborhood. “Interesting” is code for diverse, but I don’t think it’s offensive code. Fellow code warrior has young children, and when she moves she doesn’t want to lose the ethnic diversity of her current place.

I applaud that. I’m behind it all the way, fizzing with my enthusiasm for the idea. But I can’t help but remember that WE (affluent white people) are choosing to live with THEM (everyone else, especially non-native English speakers). THEY don’t have a symmetric choice to live with US.

Still, raising OUR kids with THEM, maybe the kids won’t notice the caps, or even the ‘them’, and just get on with life.

2

Baseball is Back, and maybe even the Padres

Spring is here, a new baseball season is starting, and I find myself oddly excited for this year. I really haven’t paid much attention to baseball the last few years. I’m not excited because of the teams nearby, but because of the perennially-awful San Diego Padres, who were once, long ago, my home team. It’s even possible they’ll be good this year.

Already they’ve won two in a row to start the year. You wouldn’t think much of that if you rooted for any other team, but the Padres haven’t managed that feat since 2011.

They also signed a big-name free agent, Manny Machado, who will be making gobs and gobs of money for the next ten years. This sort of move is not characteristic for them. But while there is plenty of conversation about Machado, it’s Fernando Tatís, who has now played in exactly two major league games, that is getting all the buzz.

Part of that buzz is because Padres management is managing his contract incorrectly. “Incorrect” in this case means not dicking over the player by keeping him in the minors an extra year, to squeeze an extra prime year out of his contract. Essentially The Padres are giving up a year of 27-year-old Tatís for a year of 22-year-old Tatís (numbers may not be exact, but the idea is there)*. Tatís will have another peak-years season to offer when he’s negotiating his next contract. The decision could cost the Padres tens of millions of dollars, and reap the player a similar amount, if he lives up to his potential.

From a bean-counting standpoint, the Padres are being dumb, and bean-counters run baseball. Yet the Padres, with some encouragement from veteran players like Machado, have decided to forego the contract shenanigans and start trying to be good NOW. As a side effect, the players sound pretty happy down there, as do the fans.

On a side note, with a potential lockout or player strike looming, this is a gesture by Padres management that other teams are probably not going to be happy about. But the Padres seem to be intent on making the pie bigger, rather than squabbling over who gets which slice. I have to say I like that.

One reason for the decision to bring up the rookies may be that the Padres are the only major-sport team still in San Diego. Now that there is no football team, the Padres may be making a play for the hearts and minds of sports fans looking for a new team to pull for. They may have a chance to make the pie quite a bit larger down there.

I say rookies, plural, because tonight another kid will make his major-league debut on the mound. If he looks sharp, my optimism will be compounded.

Anyway, I feel pretty good about this year. Right now they are playing the San Francisco Giants —a pretty bad team (they pinch-hit for a corner outfielder on opening day) — and it’s a long year, so the real test will come later. The Giants have an exciting prospect of their own, but it has been explained to the fans here that it would be crazy to bring him up now, and lose a prime year at the end of his contract. Because that’s how baseball works.

Except, right now, in San Diego.

___

* this is wrong. My point is quintuplufied by the actual math. See the comments.

1

Gimme Swift

As a computer programmer, I live in a familiar cycle: Write some code, then run it repeatedly to work out all the kinks. There is a moment when you hit “run” for the first time, already anticipating what the errors might be, thinking about next steps when the error inevitably presents itself.

It’s been weird writing server-side Swift. I do my hacking, adding a feature or refactoring or whatever, I make the compiler happy, then it’s time to get to the nitty-gritty. I roll up my sleeves, start the program… and it works. Just like that. I run the tests against the other systems. It works.

It’s like you’re all ready for a fight and the other guy doesn’t show up. NOW what are you going to do?

Swift can be annoying with how hard-assed it is about certain things, but that picky compiler that sometimes forces long-winded syntax is like that really picky English teacher who you realize after the fact gave you a command of words you didn’t have before. If you have a null pointer in Swift, you went out of your way to create it.

Programming languages exist for the convenience of humans, not machines. So if you can make a language that makes it harder for humans to make a mistake, why wouldn’t you?

Man I enjoy writing code in Swift. Of the four languages I use regularly, Swift is hands-down the one I’m most productive with, even though I’ve been using the others for far longer. And just today I remembered that functions could return tuples, and I was like, “Damn!” all over again, thinking how I can shrink my interfaces.

That and a performance profile comparable to C (each is better for certain sorts of operations), and you have a language with some mojo. This ain’t JavaScript, homey.

Most of my days are consumed writing code in other languages (at least for now), and what strikes me every day is that the mistakes I make would not have been possible in Swift. Think of that!

3

Optimizing Your Code (code means life)

This is a kind of geeky episode, but I think there is a lesson here that goes far beyond computer science. You might want to give it a go, even if programming is not your thing.

I am slowly updating a body of code made by other people. They optimized for the oddest things. For instance, when you get the profile of a person, you also get the profiles of the people who work for that person, including their pictures.

Sometimes, you see, in some application I’ve never worked on, that information is useful. But rather than make a way for our apps to ask, “hey, who is this guy the boss of?” and subsequently, “what do they look like?”, the system returns all that information whether you want it or not. Which makes all requests for a profile dramatically slower whether they need that information or not, and chews up bandwidth sending pictures that will never be used, and generally makes the world worse.

The people that wrote that code were carefully optimizing to reduce the number of round trips to the server. One app saves a couple of milliseconds while all other apps pay the price. While I disagree with that optimization in our case, I understand it. It comes, ultimately, from programmers who remember a different Internet. I guess. When requests took up that much extra time, wasted bandwidth was an even bigger problem.

Now there’s a new sheriff in town, and I’m applying my own optimizations. And while you might guess that I’m making services that very quickly return only the data you asked for, there is another optimization I find far more important. I am optimizing for clarity.

Right now I am maintaining a service with methods ‘getProfile’, ‘getFullProfile’, and (God help me) ‘getFullProfile2’. The well-intentioned architects of this system created a standard of providing structured comments for each method; but the doc block for two of the three methods mentioned above were copied from somewhere else and were just wrong.

Other methods in the system return partial data from a person’s profile, but often the names given to the data fields don’t match anything else. ‘prefName’ in one so-called profile might be ‘ub_emp_preferred_name’ in another. It’s madness.

Optimizing for clarity begins with recognizing that a person’s profile is a thing that can be clearly defined. “This is what a profile is,” one could declare. When you ask for a profile, there is no mystery what you are going to get. If you need more, you know how to ask.

There are times when such a rigid structure will cost you an extra server request or two, and it might make your server work a little extra. But here’s the secret: Engineer-days are worth more than processor-milliseconds. That’s true even if the processor-milliseconds add up to more than a day. A core running in a data center costs maybe a buck a day (though I suspect it’s much less). I’m embarrassed to tell you what I make for a day’s work, but it’s a bit more than a buck.

Design for clarity. I think this principle extends far past the software world. It certainly applies in industrial design, where even the simple objects we use every day benefit from a design that does not cause question marks to float over our heads. Simplicity is achieved; it does not happen on its own.

I am working on code that accepted complexity rather than working for simplicity, and in the end made more work for everyone. Perhaps, even if you are not a programmer, there is a lesson here: Work for simplicity. Work for clarity. Work less later, because your task is simple and clear.

1

What You Pay to Google

I do it too. I use Google’s “free” services. But they’re not free. Google makes a shit-ton of money off me. Consider this list of things The Goog knows about me:

name, age, blah blah blah – tragically that is already forfeit
thousands of web sites I’ve visited
thousands of searches I’ve done (yeah, those searches)
the full content of thousands of emails I’ve sent or received. I don’t use my gmail account, but any time I send a letter to a gmail address my words are duly noted. Every word that goes through gmail is archived.
Almost every purchase I’ve made online
Every purchase I’ve made in stores using Google wallet (which are none, because that is my pathetic line in the sand.)

Google, along with all tech companies, has to reveal what they collect about you if they want to do business in Europe. But here’s the thing: While I can get a full accounting of activity on my Google account, I can find no way to see, and delete, the data collected about me while I’m not actively logged into g-whatever. Which is most of my life.

I use Duck-Duck-Go for searching now, which is better anyway if you want to refine your search with + or -. I have not put a full embargo on gmail addresses, but it’s tempting. Somehow they have the right to read the communications of someone who has never entered into any sort of agreement with them. (I am not such a person, but they must exist.)

Google must hate Facebook for getting caught harvesting shit that is none of their business so often. If it weren’t for Facebook’s ineptitude, Google might still live in an unregulated world. As it is, they are doing their damndest to obey the letter of the law while still collecting “anonymous” data they are not responsible for revealing. It is not anonymous. If it were, it would have no value.

Screw those guys.

Facebook, Continuous Integration, and Fucking Up

If you ask the engineers at Facebook (I have), they are experts at continuously evolving their platform almost invisibly to the users. If you ask the users, Facebook is really fucking annoying because shit is breaking all the time and the button that was there yesterday is nowhere to be found.

Continuous Integration is a development practice that means that each little tweak to the software goes through the tests and then goes live. It’s a powerful idea, and can massively decrease the risk of publishing updates — rather than push out the work of several geek-years all at once, with all the risk of something going terribly wrong, you push out the result of a couple of geek-weeks of effort on a regular basis, taking baby-steps to the promised land. Tick, tick, tick, with an army of robots making sure no old bugs sneak back in again.

I fully embrace this idea.

Never has a company been more proud of accomplishing this than Facebook. They crow about it around here. Also, never has a company been so bad at actually doing it. What Facebook has managed to do is annoy users with endless changes that affect how people work, while still publishing bugs.

The key is that a continuous, minor set of tweaks to software is good, but endless tweaks to how people experience the software is bad. People don’t want to be constantly adjusting to improvements. So in continuous integration, you can enhance the user experience, but you can’t lightly take away something that was there before. You can’t move things around every couple of weeks.

Back in the day when I went on Facebook more frequently, I was constantly bemused by a user interface that felt like quicksand. Meanwhile, frequent users reported a never-ending stream of bugs.

Facebook, you are the champion of Continuous Integration, and the poster child for CI Gone Wrong.

1