Got up early this morning to get everything off my plate, because today might be the biggest gaming day of the year. Certainly, with the Switch launching later this week, it's the biggest few gaming days of the year for me.
I backed Torment: Tides of Numenera during the Kickstarter campaign. Day one. This morning, I open up my Gmail and there's the backer email, telling me how to claim my game key.
Umm, first I have to make an account over at the game's website. All right.
Then I have to go into my new account and check the rewards page for the Keys tab and...wait, there's no Key tab.
Oh, wait. I have to verify the email address I used to open the account with. Done.
Go back to the Keys page. Nothing. I have no rewards and no pledges listed.
Now, I have to email their support. They're experiencing a high volume of emails--can't imagine why--and I'm not expecting a response very soon.
I explain that I backed the game using a different email address that is now dead, and asked them to transfer the reward to this, usable, email address.
At least I can still play Horizon: Zero Dawn, right? Just as fired up about that game, and I can't wait to play it.
Oh, it hasn't started downloading yet. It didn't even pre-download.
Eli did a simple T-push during practice last week, something he does hundreds of times in every practice, and felt a stabbing pain in his upper left leg.
He came off the ice a few minutes later, barely able to put any weight on his leg, and we were at an orthopedist the next morning. His diagnosis: strained rectus femoris and a strained tensor lata, which connects to the illotibial band.
MAHA playoffs start in two weeks from the day he got hurt.
The doctor shut him down until Thursday--no activity, no stretching, just hoping to calm the area down. He said in the very best of cases, he might get cleared on Thursday, but recovery time for this injury was highly variable, and it could be up to 6 weeks.
Eli has never had any kind of leg injury while in goal in six years, and it's probably a wake-up call that even though he works out and does all kinds of extra work off the ice, he needs to add a daily stretching routine of at least 30 minutes.
He'll be doing that, but in the meantime, he's bored to death.
So what do you do when you can't work out? Well, you pull out the Jugs Small-ball Pitching Machine:
Those balls are very small and very bouncy, so if you don't catch them right in the pocket, they bounce out. You'll notice a few at regular speed, then I crank it up to the highest speed, and the sound of the machine makes a transformation.
Instead of a blocker, he uses my slipper, turned inside out. That's about 1/4 the size of a regular blocker, so he has to be much more precise to redirect the ball.
If you're wondering how fast it is, I'm not sure. The manual for the pitching machine says that it's the equivalent of 75 MPH when the machine is on the fastest setting and it's 20 feet way.
Eli was 16 feet away, and the second half of each segment was on the highest setting. I don't know if that's a linear increase in speed or not. But it's fast.
Damn, this game is fun. And this is going to be very, very rushed as I return as quickly as possible to the location of Dallas, but I highly recommend this game.
Halcyon 6: Starbase Commander is a turn-based, pixel-graphics romp through a science fiction world that's a bit of Star Trek and a bit of everything else. It's funny and engaging, and the design is top-notch.
Your starbase is presented in Hollywood Squares (rooms stacked) format, and there is a wide range of technologies, building types, ships, skills--there's a ton going on.
Outside the starship, there's a universe with all kinds of unsavory things going on.
There's also an alien threat (well, of course), and the ship-to-ship combat is very, very satisfying, which different types of officers (science, engineering, tactics) having widely varying skills in combat, all of which combine in extremely satisfying ways.
Thinking in combat makes a significant different, and there always seem to be multiple paths to success. I've put in 13 hours, according to Steam, and I have really, really enjoyed my time.
Thanks to your e-mail, I've figured out there are plenty of ways to do this.
I also figured out that because of a certain amount of map distortion in almost every map, there was a bit of brute force that was going to be absolutely necessary.
What I decided to do was find a map with a liberal number of cities located on the map, then recorded pixel-exact coordinates for those cities, which I added to the .csv file containing latitude/longitude.
So, for 250 cities or so, I have both longitude/latitude and exact pixel locations. These 250 cities are anchor points.
When I want to find a location for a city that's not an anchor city, I find the nearest anchor cities to that city (based on longitude/latitude), then find intermediate pixel values for the city based on the anchor cities.
I still have some things to figure out (boy, don't I always), but I tested the approach and it works very well, and if there's a point where a city is poorly located, I just need to add a closer anchor city and it improves the accuracy.
I was in a medical office today, sitting in the main lobby by the exit.
"Excuse me, do you mind helpin' a fella?" asked an elderly man, probably in his sixties, obese, with a cane.
"Excuse me?" I asked.
"You see that gray Chevy Trailblazer out there?" he asked. I did not. "Would you go out there and tell my wife that the TIP of my CANE is somewhere in the CAR?" He lifts his red cane, and I do see that the tip is missing.
"Um, sure," I said.
I walked out to the parking lot, eventually finding the Trailblazer, and tapped on the passenger window. The elderly woman (lady hair, glasses) looked up, alarmed, and I figured I was about to become a Grannies With Guns story on the evening news.
She lowered the window a few inches, very carefully. "Yes?"
"Your husband asked me to tell you that the tip of his cane is in the car somewhere."
"Oh, thank you," she said, and she got out of the car and opened the back door to start looking.
"If you can find it, I'll take it in to him," I said.
She looked for no more than ten seconds, then turned to me. "Tell HIM that he must have left it in the HOUSE," she said.
I walked back inside.
"She said that you must have left it in the house," I said.
"I know it's in the CAR," he said. "When I left the HOUSE, the tip was clearly ON."
Within thirty seconds, his wife walked in and they argued for a while, then amiably walked out to the car.
He's a sophomore, so his score didn't count (he retakes it next year as the official attempt), but his scores were high enough that if they go up just a small bit next year, he may be a National Merit Scholar (show of hands).
Because of this, universities are blast e-mailing him pamphlets and postcards and all kinds of things, and they're all uniformly crap.
"Hey buddy, college materials today," I said.
"Northern Michigan Timber Sports University," I said, "and Western Wisconsin Furniture and Crafting College."
"You may not need to fall back on Clown College as your safety school if this keeps up," I said.
With the size of his feet, he could totally CLEP out of the first year of Clown College
A Follow-Up on Where Dallas is Definitely Not Quite Yet
Ben sent in an excellent email about coordinate mapping and what not. This has been a most excellent rabbit hole. Here's Ben's email:
As you've discovered, Latitude/Longitude coordinates have issues on a 2-D map. Every mapping projection does, but LL has particular issues given that your coordinates aren't the same size everywhere. The width of a degree of longitude isn't the same at the top of the US as it is at the bottom, and that distortion makes coordinates hard even before the stretching issues. Luckily, there are a lot of people (like myself) who have to work with maps for a living, and lots of solutions to the problem. And all of them just use math.
For what you're doing, your slice method is an excellent solution; cutting a large map into smaller pieces 'relieves' the distortion as you move further and further from an origin (one of your furthest corners). The usual convention for coordinate systems is to set your origin to some furthest SW corner well outside your map, so that all mapped coordinates are +X and +Y, or in this case +E and +N. You'll see these referenced in systems as "Northings and Eastings", and they have the additional advantage that they are always in feet or meters, so they are always the same size regardless of where on your map you move. Different of these systems cut maps up differently (California State Plane is divided into 6 zones N to S, Oregon State Plane into 2) but for a US map what you've created is basically a version of the Universal Transverse Mercator system.
UTM cuts the earth into pole-to-pole slices along certain lines of longitude, each one referred to as a "zone". For the US, we use zones 10 through 19, as shown in the following randomly chosen google image search result: http://www.wa6otp.com/fig44.gif. Each zone has an origin well outside the US, and all points are mapped as +N and +E. As you move across the country you switch from one zone to the next.
Implementing this is a pile of trig (again, a dart thrown at google "convert LL to UTM formula" reveals the following which has more explanation than you need: https://www.uwgb.edu/dutchs/UsefulData/UTMFormulas.HTM ) but if you do you can just throw LL values into your program for every city you decide to use, and it'll plot them accurately on your map without you having to reinvent the wheel. Note also that the above link goes into a lot of talk about Datums and Ellipsoids, which is a whole other kettle of fish that I will restrain myself from explaining no matter how cool it is to understand the problem they're solving. I'm a geologist, what can I say, I get into this stuff. If you go this route, you want everything you do to say "NAD83/WGS84" (either/both is fine) as that is A. the most commonly used system in the US, and B. the system Google Maps and Wikipedia both use for their coordinate data.
I hope this ends up being useful to you, even if it's just to give you a framework for how to approach these problems.
A Heartreaking Sandwich Order of Staggering Genius
I'm doing a little work at Subway, and a woman (clearly a mom ordering dinner for her family) just came in and ordered four sandwiches with an absolutely dizzying combination of meats, cheeses, vegetables, and sauces.
She consulted no notes.
It was a staggering feat. There were so many nuances that she must have constructed a memory palace to hold it all. I salute you, madam.
I've noticed something very different about Michigan (Grand Rapids, anyway) compared to Austin.
Many parents on the team have worked for the same company for over twenty years. Several of them started working for a company when they were 18 and never left, and most of them are in their mid-to-late forties.
I lived in Austin for almost thirty years, and I never knew one person who worked for the same company for twenty years. Not one.
This may have more to do with Austin being unusual than Michigan--it's grown so quickly, and there was such an extraordinary amount of opportunity that everyone grabbed what they could--but it's a bit startling, nonetheless.
As it turns out, mapping longitude and latitude locations using a 2-D map is an interesting problem, so let's discuss it.
I originally thought if I could properly locate the most distant N/S/E/W points properly on the 2-D map, that everyone else would be accurate, but as it turns out, locating those four points accurately is not possible. Part of that is the inherent 3-D/2-D issue, but it is probably also an issue with the map itself--not only is it 2-D, but it's also not entirely correct. Plus, it just shows the United States, so it's only part of a world map.
Here was my original idea: find the furthest points N/S/E/W. Find the range of possible longitude/latitude values. Then, any city in-between should be a percentage of the possible range, right? So I could take the percentage of that range, bang it off the actual run-time dimensions of the map, and Dallas should be Dallas.
Only that isn't working.
I think part of it is not being able to accurately locate the anchor points, but the the other factor is that the further away you are from the anchor points, the more error that's introduced.
So I'm going to try out the "slice" method.
I can manually locate, for example, ten points of latitude and longitude exactly on the map (or as many as I want). Then, I can calculate the position of a city from the closest possible pre-calculated point on the map. So instead of working with a possible distance of 3,000 miles from an anchor point, I'd be working with a maximum distance of 300 instead.
In theory, that should introduce a much smaller amount of error. And I could even make that every 150 miles.
It doesn't need to be perfect. A 15-mile error would be perfectly acceptable, because you wouldn't even notice on the map, given its size.
Except that may not work either.
It's totally possible to manually enter the pixel-perfect location of cities on the map I'm using, then just look up the values, but there are thousands of cities, so that's much more labor intensive than being able to calculate it (if such a thing is possible with a high degree of accuracy).
Hmm, I put in some testing coordinates, so no matter what the recruit's card says, the program thinks he lives in Dallas. That's where the green circle is supposed to be.
Instead, Austin Bambard appears to be living in the Gulf of Mexico, possibly on an offshore oil drilling platform.
While I do find that to be a compelling backstory, it goes on the must-fix list.
However, other parts are going quite well. I now have the recruit's interests generating properly, and all schools are being scored against the recruit's interests (if there are eight interested schools, the top four are listed, then the user school's place in the top eight). That is all working, and smoothly.
I still don't have the ability system put in place, so that's dummy data, but everything else on that card is live. I'm actually reasonably close (a week, maybe two) to moving on to the recruiting battle screen, so that's good.
I am having one strange problem right now, though.
When I was developing GS, it was easy to share builds. There's a /Release/ folder, and all I had to do was copy all the files in that folder, and anyone could run it on their machine if they had the most recent .NET Framework.
That worked thousands of times.
This time, though, it's not working. I've checked some of the usual suspects (like an image file not set to content/copy), but I haven't figured anything out yet. I could actually get a little feedback at this point, but until I get that working, it's not going to happen.
That picture was taken six years ago. Feels like six lifetimes ago.
Eli 15.6s team played one of the premiere teams in the country on Saturday. It was part of a Hockey Fights Cancer weekend, and instead of 20 people in the stands, there were 200.
The game was incredibly intense, and it was 1-1 for a long, long time. The third period was going against us, but Eli made a series of terrific saves and fought against the tide.
Then, with two minutes left, we scored.
Suddenly, it was over. A 2-1 win, and Eli had 32 saves.
There's a website for hockey rankings, and the formula is pretty simple, so you can compare teams and parts of seasons in all kinds of different ways. In Eli's last five games, his team has played at a level equal to fourth best team in the country.
I'm not going to tell him this. Preparation, not expectations. He doesn't need it in his head. But they are now a very dangerous team.
Eli 15.6 went to the dentist yesterday (checkup), and while he was there, they measured and weighed him.
Instead of 137 pound of fury, he's now 141 pounds of fury. 5'11 1/2". He told the nurse that he just couldn't seem to get to six feet, and she said "No one on earth has size 15 feet and is five eleven and a half. Don't worry."
Yeah, those are large.
Also in the category of "large" is the bobblehead I saw in the Penguins practice facility merchandise shop.
That's three feet tall, in case you're wondering. I'm a huge Matt Murray fan, but even I can't figure out the market for this.
There was a nice Mario Lemieux exhibit at the practice facility (it's named after him), and here are the two panels documenting his early days (click on for a larger image that should be readable):
Performance: Escaping the River of Expectations (part two)
Let's talk about the river of expectations today.
I'm going to talk about this in the context of sports, but really, it applies to anything.
I'll use myself as an example, in high school tennis. Before I played a match, I had a range of possibilities in my mind, and the opposite banks of those possibilities were a river of expectations.
Inside the banks of the river was a comfort zone. It was what I expected. I played many matches inside the banks, and usually, I played well.
A few times, though, the match was outside the banks.
Usually, it was me being in position to win a match that I didn't expect to win. Or a match that I thought would be tight, but suddenly I was well up in the third set and it looked like an easy win.
It wasn't though, because I hadn't expected it to happen that way.
I struggled as soon as the match went outside the banks of my expectations. Every single time.
Or a variation, one in particular, when I expected an easy win, and instead turned out to be in a dogfight. I hadn't thought that was possible, and so when things got very, very intense, I felt this sick dread.
It was a close, hard-fought match, and if I had been the underdog, I would have been enjoying myself. But because I was a heavy favorite, and I hadn't even considered the possibility of losing, I was unable to deal with what was happening, and I played too poorly to win.
I can give you an example from the Super Bowl.
The Falcons, I promise, never considered the possibility that they would be ahead 28-3 midway through the third quarter. That was far, far outside the river of their expectations. And because of that, they had no idea what to do.
Even the coaches were affected by this. All they had to do was run the ball in the fourth quarter (in particular, after the Julio Jones catch, which would have easily led to a field goal), but instead, they panicked.
They had not prepared for the possibility because it seemed too remote, too unlikely.
I've noticed over the years that the greatest athletes have a much, much more consistent level of performance. They never coast. They are always mentally ready to play, and that's actually much harder than it sounds, even at the professional level.
I think that's because they don't have expectations. They don't envision a range of results. They don't feather their effort (which is inevitably what can happen when you expect to win).
They do not prepare for a limited range of outcomes. They just prepare to compete at their highest level. Their opponent is internal, not external, and that's how they measure their performance.
Sounds easy, right?
I think very, very few professional athletes are able to prepare like that, far fewer than you might expect. It is every bit as elite a skill as their level of conditioning and skill.
It's satisfying to savor a positive outcome before you play--championships won, celebrations earned. It's even more satisfying to savor it when it looks like it's coming true.
All that savoring, though, comes at a cost. The cost is a steep reduction in the chances of all those wonderful things actually happening.
Performance: Escaping the River of Expectations (part one)
Eli 15.6 had a terrific weekend.
We took a six-hour team bus ride to Pittsburgh, where his team played three games in the Pittsburgh Penguins practice facility.
This guy was there:
That's Evgeni Malkin, rehabbing an injury. He makes a sheet of ice look very, very small.
Malkin is Gloria's favorite player (she loves players who won't backcheck), so when I saw him, I sent an urgent text immediately :
"MALKIN IS ON THE ICE"
In their first game, Eli's team played the #5 team in the country and won 5-2. He had 20 saves, and there were no shots from rebounds, which is the hallmark of an excellent game. When all a team gets is first shots, it demoralizes them, and it totally changes the flow of play.
The turnaround to the next game was extremely quick--only three hours from the end of the first game--so we all ate at the rink (which had this amazing restaurant).
The second game was a disaster.
Eli's team is a speed team, and their legs were dead. They played the #15 team and got absolutely pounded, 7-1.
That made me start thinking about something, which I'll be discussing shortly (now tomorrow, because this ran long).
Eli didn't play in the second game--they had an early morning game on Sunday and he would be playing then--but it was still painful to watch. I've grown very attached to these kids over the course of the season, and I want them to get to Nationals, and it seems to be slipping away. They're very, very good, but they're not ranked where they need to be to get an invite.
Sunday morning, they played the #9 team, and we came out flat. Eli was playing very well, keeping them in the game, but we were getting outshot and outplayed. Down 2-1 late in the second, Eli gave up the worst goal of the entire season, on a hard dump-in from outside the blue line that fluttered and went straight through his five-hole.
The period break was two minute later. They skated off the ice, demoralized, and I felt so bad for him. He'd played a terrific game, but goalies are always remembered for the one big mistake instead of everything else.
Plus, it can be devastating mentally. I didn't know what would happen for the rest of the game, him having to come back from that.
Then the third period started and Eli played out of his mind, and I stopped wondering.
We scored, and it was a game.
More saves, including a toe save on a pass across the crease that I still don't know how he made. He made three saves in that sequence, just totally dialed in, and then we scored again with 3 minutes left.
There was no last-minute win, but we didn't have to pull the goalie this time, and the game ended in a tie. The coach of the other team stopped Eli in the handshake line (which never happens) and told him he had a fine game.
Outshot 33-22, and the other team had much had better chances.
So even though Eli's team is ranked #20, they beat the #5 team and tied the #9 team with him between the pipes. It was his best weekend of the season, in terms of quality of play.
Part of Eli's maturation as an athlete has been an improvement in letting go of expectations.
If you let in a goal that you should have stopped, it doesn't fit in with your perception of yourself as a goalie, and that dissonance can start all kinds of negative thoughts. Or if you go into a game expecting to win, facing more adversity than you expected can create those same negative thoughts.
This is human nature, but for someone who wants to be a great athlete, they have to go beyond human nature. They have to believe in themselves as something much, much larger than a single moment or game.
They also have to go into a game without expectations of winning or losing. No thoughts of the outcome. They have to be completely in the moment to see the puck clearly, and I mean that both visually and metaphorically.
For that to happen, they have to go into every game in the exact same frame of mind. Fully prepared for the moment, and fully immersed in the present.
Okay, this has gone on for far longer than I expected, so I'm going to have the rest of the discussion tomorrow, because there's more to talk about.
"Well, think about this," I said. "Last year in January, you were playing 'A' in Texas, and tonight you're playing the Russians."
Eli 15.5 laughed.
The #6 team in the country is based in Colorado, and a good portion of their team is Russian, as is their coach. High level of skill, high level of skating ability.
And, as we would find out, a high level of sportsmanship as well. Eli said they were all nice kids, and they played very clean.
Eli's team has played well this year. They're #20 in the country, and at times, they've played like a Top Ten team. They rely on speed, and a very aggressive forecheck, and when it works, it's amazing to watch.
When his team doesn't skate all out, though, it's ugly. The structure of the system depends on speed, so without speed, there's less structure. Turnovers. Open shots.
When we play teams ranked this high, our biggest problem is puck possession. We just don't have the puck much, and if the other team has the puck in the zone long enough, bad things happen. Part of that is the skill level of the top teams, but the other part is that we seem a little intimidated at times.
I was quite surprised, then, when we came out like a tornado at the drop of the puck.
Within 5 minutes, we were up 2-0. Every kid was flying all over the ice, faster than I'd ever seen them skate before.
Then we started taking penalties.
I quickly realized that the other team only shot at one speed. Every kid, every shot, was a bomb.
Eli, though, was on.
There were power plays when we only cleared the zone once, or not at all, and he was getting moved around the crease more or less continuously, but he was giving them nowhere to shoot. Always square.
Then, on another power play, a kid skated around in open space until he found a screen, snapped a quick shot, and Eli never saw it. Goal.
Six minutes later, with seven seconds left in the period, on another power play, a kid launched an atomic slap shot from about fifteen feet. It hit the heel of Eli's glove, hard, popped out, and rolled across the goal line.
Still, though, no one slowed down. Both teams were flying up and down the ice. After the first period, shots were 14-13.
The second period was just as fast, and we scored early on to make it 3-2. Eli made a series of strong saves, and then we got a power play.
And gave up a breakaway. The kid shot a hard backhand at close range that Eli saved with his blocker, and while the puck was still in the air, the kid skated into it with his body and it went over Eli's shoulder.
There have been games where a break like this would have affected Eli. It's hard not to be affected by something like that, in a big game. So I watched him to see what he would do.
He took off his helmet, took a drink of water, and laughed.
On the other team's bench, every player was looking at him, watching him laugh. He had a big smile on his face.
Then, there were a lot of saves, from both goalies.
The third period started. Shot totals for both teams went into the thirties, then the forties. Eli saved one shot by diving across the crease and deflecting it with his head. He saved another by diving and doing I'm not even sure what.
Less than two minutes left, and we were attacking relentlessly. On a power play. All the momentum. And then the coach signaled for Eli to come to the bench.
That's when I remembered that we had to win this game to have any chance to advance in the tournament. A tie doesn't matter.
Extra attacker, puck pops out of the zone, empty netter.
We lose, 4-3.
"Sorry," I said, as he walked out of the locker room.
"We deserved to win that game," he said, downcast.
"I know. Everyone played great."
"Did you SEE us out there?" he said, smiling.
For once, I have video. The last five minutes of the first period (one goal and five saves) is missing, thanks to a parent who thought they were helping by turning off my phone. Oops.
He didn't control the puck as well as he usually does, but he battled. Hard.
You won't be able to see much unless you enlarge this to full-screen, because the puck is going so fast it's hard to see in a smaller window.
In my lifetime, he's the greatest NBA player. To me, he's better than Jordan and Bryant, and it's not even that close. He's a force of nature, totally unselfish, he makes everyone on the floor better, and his basketball IQ is off the charts.
Plus, I think he's a decent guy.
Jordan wasn't, really. Kobe Bryant is an asshole. The only thing James did was leave Cleveland and their awful roster to go win championships, but he came back and won one for Cleveland, too.
Charles Barkley has been riding James for years. This is the same Charles Barkley who was too lazy to ever get into real NBA shape, wasting(to a degree) his incredible talent. Barkley had a Hall of Fame career, but he could have been even better if he'd just had the discipline and the will to be great.
Plus, he was kind of a dick when he was a player. And selfish.
A few months ago, Barkley said that James will never be considered a top-five player in NBA history (unlikely), then last week he called him "whiny". There's been much more, stretching back years, but those are the most recent examples.
James, apparently, has had enough. Here's his response: “I’m not going to let him disrespect my legacy like that,” James told ESPN. “I’m not the one who threw somebody through a window. I never spit on a kid. I never had unpaid debt in Las Vegas. I never said, ‘I’m not a role model.’ I never showed up to All-Star Weekend on Sunday because I was in Vegas all weekend partying. “All I’ve done for my entire career is represent the NBA the right way. Fourteen years, never got in trouble. Respected the game. Print that.”
Somebody call 911.