Wednesday, March 22, 2017

Fighting Eleven #20: Choices

About two weeks ago, I decided I had to make a decision about the programming language I was using.

Like all languages, VB.NET does some things very, very well, particularly when used in a WPF application.

Other things, though, it does very poorly, often in an infuriating way.

Plus, it won't compile to a mobile platform (unless you count Windows Phones, which seem to be dead).

I decided that the easiest move would be to C#. It's supported in Unity, I thought it was relatively close to the scripting language in GameMaker (wrong, as it turned out), and it's easy to port C# to iOS. I wasn't sure about how well the XAML would export, but it felt like a step in the right direction.

So I started reading. And I had progressed to the point where I was going to start taking the existing code I had and convert it to C#.

However, I decided to email Garret first, because Garret is one of the smartest people I know, and even better, he explains things in an incredibly clear way.

His answer to my e-mail was so good that I'm quoting it below:
I'm afraid I must disabuse you of the notion that C# will give you the portability you are hoping for.

You are correct that .NET will only give you the tools to develop on the Windows Mobile platform, but I would strongly recommend that if there is a direction you want to go, you find a scripting platform or tool that will allow you to cross-compile between platforms and make the jump (or graphics platform or whatever) instead of spending time struggling to work in C#. And I will explain why I believe this below.

The idea of there being a "C-family" of languages is... misguided. A reasonable comparison would be an archivist comparing a coffee stained Playboy magazine with the Magna Carta and concluding they are similar because they are both yellow.

Maybe a bit extreme, but you get the point.

VB.NET has more in common with Java than C# has in common with C++.

The C-family appears to be a thing because what you are seeing is 50 years worth of developers being influenced by a revolutionary new programming language called "C" (which is based off a language called "B") that dates back to the moon landing. These developers were inspired by the ideas of a high-level language that abstracted away machine code, could be compiled and run on different chipsets without being modified, and decided "I can do it even better".

Some people took more extreme paths than others - a subset of them decided to build their own languages, but since they were familiar with "C" and (often) were building their compilers IN "C", they decided to make their language look like C.

You know how evolution works - we didn't evolve from monkeys, but Monkeys and Humans did have a common ancestor. Well, Perl and Java are the Pit Viper and 3-toed Sloth that just happen to share a common ancestor, a soft-shelled slug, called "C". As a result you can identify some characteristics in common that they share (they have eyes!) but that is where the similarity ends.

The "C" family is defined by a few commonalities (as I see it)
1) The use of braces "{" and "}" to denote the start and end of a block.
2) The existence of certain named control blocks: "if..else,, for, while" of which ALL can actually be accomplished solely through the use of a "while" statement if you are being truly masochistic.
3) The use of a dot "." to denote accessing a component property of a structure
4) Use a ";" to separate instructions (traditionally used at the end of a line).

That's about it.

Fascinating - I know.

But what it comes down to, is that I could write a summary that would outline the syntax changes that would result in VB.NET being classified as a "C-family" language, and it would take me fewer characters than I've already typed in this email to do it.

Lets try!

1) Braces: replace all blocks that begin with a keyword [complete list: class, do..loop, if..else, for each, for, function,, structure, sub, try..catch, while] and end with another [end* or loop] by adding a "{" after the initial keyword command (ie "for i = 1 to 10 {") and replace the end keyword(s) with a "}"

2) No change (all VB keywords and control structures are modelled after "C-family" languages)

3) No change (VB uses the "." accessor)

4) Add a ";" after each declarative line, command, or instruction that is not the beginning or end of a block "{" or "}"


VB.NET is now in the C family!

The point of this is that the differences between "C" and "C++" and Perl, and PHP, and AWK, and Squirrel, and NYM and Noop... are enormous compared to the differences between VB.NET and C#.

The problem is that every language behaves differently under the hood, they do different things, they have different libraries, they have unique features, unique strengths, unique conventions, unique operators, unique platforms. That although they have some vague similarity in appearance, that is all they possess.

C is a structured procedural language that shares many commonalities with Assembly (in fact, you can execute Assembly instructions within C if you'd like) while Java is a virtualized byte-code object-oriented language that just happens to appear kind-of like C.

For you to take advantage of any new mobile application platform scripting language, it is far more important that you understand the concepts that underlie Object-Oriented systems and how to structure, organize, and implement code effectively - which is something shared by all modern platforms (and co-incidentally, doesn't exist in C), and then how to do what you want to do in your destination platform of choice (understanding the libraries, idiosyncrasies, and structures of your target language) than it is to understand C-style.

When you get right down to it - once you understand how to program, the syntax rules become trivial.

I often reflect on how incredibly lucky I am to have people like Garret advising me on all different kinds of things, not just programming.

It makes me less stupid, and that's always a good thing.

Tuesday, March 21, 2017


Gloria left this morning to go to Shreveport for a few days.

While she's gone, I have to do stuff+. Including making the bed, which I've never liked doing.

This morning, though, I figured it out: I only had to make HALF the bed.

Before you email me and say it would just be easier to make the entire bed, let me assure you, sir, that it is not.

Fortunately, my cutting edge interest in laziness has been passed on to Eli 15.7. While we were in Detroit for MAHA, we went to a mall and relaxed for a while. The boy had a smoothie, but didn't want to actually hold the smoothie. No problem:

Now, this next image isn't related to laziness, but I didn't want to pass up a chance to show you the world's saddest mall kiosk:

Monday, March 20, 2017

Tape Measure

We drove past an apple orchard on Sunday.

A nice feature of Western Michigan: fruit-related activities.

"Hey, they have a vineyard, too," I said. "What are they making--apple wine?"

"Maybe," Gloria said. "A boy took me on a picnic by the lake with a bottle of apple wine when I was in high school."

"Apple wine? How old were you?"

"I was in high school," she said, protesting. "He was the first boy I ever kissed, because the picnic was so sweet."

"Naive teenage girl, romantic picnic, apple wine--that's how you get 'with child', young lady," I said.

Eli 15.7 started laughing in the back seat.

"It was all very innocent," she said.

"So how far did he get--second base?" I asked. Eli burst out laughing.

"He was swinging for the fences," Eli said.

"Hey!" Gloria said.

"Dinger," Eli said.

"Giancarlo Stanton at the plate," I said.

"This family," Gloria said.

Friday, March 17, 2017

Friday Links!

From Wally, and this is brilliant madness: The amazing flying machines of Chinese farmers. That would make a great title for a novel, by the way. This is also madness, but of a different sort: Pricey parking spot in Brooklyn on the market for $300,000. This is fantastic: Awesome Lego Garden Railway. This is crazy: How to Clear a Path Through 60 Feet of Snow, Japanese Style. These are just staggering: Some kind of model with incredible detail (seriously, can't categorize it).

From Steven Davis, and this is amazing: Yukino-otani, the huge snow walls of the Tateyama Snow Corridor. This is very, very silly: Weekend Watch: “Stupid Robot Fighting League” Brings Silliness to Combat. This is pretty amazing, and watching someone play the theremin at a high level is mesmerizing: Rimsky-Korsakov - The Flight of the Bumblebee - theremin and piano.

From C. Lee, and this is a clarification of a longstanding belief: The True Story of Kudzu, the Vine That Never Truly Ate the South. This is depressing: The Toxic Truth Behind Mardi Gras Beads.

Remember WordStar? Control KD to save? You'll love this: WordStar: A writer’s word processor.

From Ken Piper, and it's just one of many reasons to unreservedly love George Harrison (as I do): How George Harrison Saved Monty Python. On the other end of the spectrum, this is pretty terrifying: NFL abuse of painkillers and other drugs described in court filings.

Ending this week, a very serious article about an incredibly disturbing problem in this country. Sorry, it's not a feelgood moment (there are updates at the front, the full article is a bit down from the top): Everything You Think You Know About the Death of Mike Brown Is Wrong, and the Man Who Killed Him Admits It.

Actually, after reading that last article, we could all use something to cheer us up (thanks to Daniel Levine): Drink up the majestic hair on these Minnesota high school hockey players.

Thursday, March 16, 2017

MAHA (part three)

"Well, you got carried out on your shield tonight," I said to Eli 15.7 on the way back to the hotel.

"What's that?" he asked.

"In ancient times, when a gladiator was killed in battle, they carried him out on his shield," I said. "Which raises some questions, because how big could those shields possibly be, and how small were those warriors, but I said it mostly for the valiant image."

Of a very small person getting carried out on a shield, I guess.

The nice news--cutting to the chase--is that his leg recovered after a few more days on crutches, and a week later, he's back to almost 100% and skating tomorrow night.

The second piece of good news is that he's on a daily stretching program now--with a phenomenal coach (Maria Mountain)--because it was long overdue, and this injury was a wake-up call.

"Can you commit to doing this daily?" I asked him.

"One hundred percent," he said.

"Turning short-term weakness into long-term strength," I said. "Stretching will be another strength."

"You and the slogans," he said, laughing.

It's true, though. When something bad happens, if you use it to evolve what you're doing, you can convert it into something good.

There was one other nice moment, and it happened the next day. Eli's team couldn't advance out of pool play, but they still had one more game to play (Eli didn't even dress out).

I was standing in the other rink, watching the game of one of our friends, when a coach from one of the other teams walked up. I knew him from tryouts last spring, and he'd always been very nice to Eli.

Eli played him twice this season, and in the second game, he had 39 saves on 40 shots. At the time, it was probably the best game he'd ever played.

The coach shook my hand, smiled, and said, "Do you know what's the best part of my week?"

"What?" I asked.

"I don't have to play your kid!" he said, laughing. "He was the only goalie I was worried about."

I laughed with him.

"I tell my son at least once a month, 'I wish to god we'd kept him'," he said.

Eli crutched into the rink just then, and the coach shook his hand and said the same thing to him, and Eli got a big grin on his face.

He hasn't even made the 16u team yet--tryouts are next month--and there's still a ton of uncertainty until he's on the roster, but yeah, it's been quite a season.

Wednesday, March 15, 2017

MAHA (part two)

There were 60MPH winds in Detroit, which caused a power outage to the rink not once, but twice, in the game before Eli 15.7 took the ice.

Oh, and did I mention the bush fire outside the front door of the rink?

Good enough to play.

From the start of this game, I knew we were in trouble. Flat. Which isn't what you'd expect when the season would end with a loss, but we were getting dominated, and this was a team we'd played very evenly in our two previous meetings.

Another top fifteen team, though. Like I said, MAHA is Murderer's Row.

Things happen in hockey, though, and we went on the power play, then scored a beautiful goal out of nowhere. 1-0.

It was like that until near the end of the second period, when a kid shot from behind the goal line, directed it off Eli's back (even though he sealed the post), and it landed on the goal line and went in.

Or maybe it didn't. Eli said it didn't, and he had his glove on the puck, so the referee couldn't have seen it go in, but either way, it was a goal, and the score was tied 1-1.

After two periods, we were getting outshot 29-17. Even worse, we just don't have the puck that much, which is an even bigger problem.

I could see that Eli clearly wasn't 100%, but he was playing great.

We could still win this game.

Then the third period started, and we were playing no better than before. The puck was in our zone too often for too long, and then it happened. Eli made two excellent saves but couldn't control the puck on either, there was no help, and the third shot went bar down.

Just like that, we're behind. 2-1.

There were still almost 15 minutes left, but it could have been 150. We just couldn't get started offensively.

No Chip Hilton moment.

Even worse, with about 6 minutes left, on a breakaway, a kid lost an edge and went crashing into Eli's left leg, the one that was hurt.

He stayed on the ice for a long time, face down. Then he got up, stretched a bit, nodded, and stayed in the game, although he was limping pretty heavily.

I knew then that he was hurt even worse, but all I could do was sit and watch.

The coach pulled Eli for an extra skater with about a minute left, and we gave up an empty netter shortly thereafter.

Final score: 3-1. Final shot total: 44 to 23.

Normally, a kid would be elated with 42 saves on 44 shots, but when Eli finally came out of the locker room, limping hard, there was no elation to be found.


When Gloria makes dinner, we serve from the stove. I was assembling my dinner and noticed something unusual.

"I see what you did here," I announced loudly. "Trying to sneak some broccoli under the cover of green beans. Your nefarious scheme is unsuccessful."

"All I was trying to do was--"

"Veg-pionage!" I shouted.

Tuesday, March 14, 2017

MAHA (part one)

"How's your leg?" I asked Eli 15.7 on the morning of the elimination game.

"Good enough to play," he said.

Translating, that meant he knew he was going to aggravate his existing injury, but that there was no way he wasn't going to play in the game that could end their season.

I was okay with that. Worried, but okay.

Teams that win MAHA, which is the Michigan state tournament, get an automatic invite to Nationals. Usually, at least one team from Michigan got an at-large berth as well, but with only 16 teams going, and Eli's team ranked #20, there wasn't going to be an at-large bid.

To go to Nationals, they had to win.

The night before, Eli's team had played its first game in pool play, against the #7 team in the country. The coach didn't start Eli, trying to protect him from further injury, but didn't tell him until shortly before the game.

Eli didn't know he was protecting him, and he was pissed.

What followed was a goalie meltdown.

Of the first five shots (which took the entire first period and two minutes of the second), three went in. Suddenly down 3-1, even though we were outplaying the team, the coach looked at Eli and said "You good, kid?"

"I'm good," Eli said.

"Then get in there," he said.

That sounds like something ripped from a Chip Hilton young adult sports book, but it's the truth.

Like I said, I was worried about Eli's injury, but I also knew he was skating out there pissed, and that he was going to play really, really well.

He did.

There was a moment in the third period, when he exploded across the crease and made a fully extended blocker save, that was one of the finest saves he'd ever made. If that shot had gone in, the game would be over.

It wasn't, though. Not quite.

All these emotions were washing over me as I watched him play. I still couldn't believe that he was playing in "A" league in Texas this time last year, and suddenly he was playing against the best teams in the country under the most intense pressure imaginable.

Didn't matter to him, though. He just played.

With just over a minute left, we (bafflingly) got a breakaway and scored.

3-2. Just needed one more.

And if this were a Chip Hilton novel, we would have gotten that goal, but in the real world, we didn't even get a shot off.

Final score 3-2. Eli had 15 saves on 15 murderous shots.

If they didn't win the next night, there would be no way they could advance to the semi-finals, and they would be done.

That's why "good enough to play" was going to have to be good enough to win.

Monday, March 13, 2017

A Tale (of Consumer Woe)

Tomorrow, MAHA.

Today, AT&T and Comcast.

I finally hit the wall today with our (at best) 20 Mbps download and 1 Mbps upload speed. I was going to upload some raw video of Eli's games to the cloud, and it was going to take a week.

Seriously, a week.

So I checked into Xfinity (Comcast), and within 15 minutes on the phone, I got a 150 Mbps package for $60 a month for the first year ($80 a month after that). The very friendly fellow said I could do the install myself--just go to the Comcast office located three minutes from my home, pick up a modem, and boom.

Boom, indeed.

First off, there was no Comcast office in that location. However, there was one 20 minutes away instead of 3. Off I went. They gave me a modem and cables, and gave me a number to call after I had hooked up everything. The people at that number would activate the modem. Two, three minutes top, they said.

AT&T did the strangest Internet set up I've ever seen. Here, have a look:

I know, it looks pretty normal, but it gets a little strange when you find out where those cables are going. The coax cable goes into a DirectTV Genie (the little remote unit in a separate room from the main receiver), and the green data cable goes into a broadband connection at the back of the AT&T modem. The white data cable is a wired connection that somehow magically comes out in my study.

Seriously, I have no idea, although I know very, very little about this kind of stuff.

The coax cable, with the new modem, is the required connection, but if I disconnect it from the DirecTV box, we lose satellite downstairs. I do it anyway, connect everything, and call Comcast. I talk to a very cheery fellow who is from Bogota, Columbia, who is extremely nice, but knows hardly anything at all, seemingly.

Please note, this isn't on him. Companies endlessly subdivide tasks so that almost no one at a company knows how to do anything except a very, very narrow set of tasks. That lets the company pay much less than they'd have to pay to a generalist.

In this case, my two or three minute phone call lasted over 45 minutes, and in the end, absolutely nothing was activated and they're sending a technician on Wednesday--which I get to pay for.

Thanks, Comcast!

Friday, March 10, 2017

Friday Links!

This article just blew my mind: When Prince Made a Chambermaid His Queen For a Day.

This is a fantastic idea: a website for gaming-related stretching. Very solid: Play More, Hurt Less.

From C. Lee, and this is a very worthwhile article that is very uncomfortable to read: America’s Troubled, Contradictory Refugee Legacy. Next, and this is a very interesting read, it's 802.eleventy what? A deep dive into why Wi-Fi kind of sucks.

From Wally, and this is straight out of the 24 1/2 Century: Grafted Ketchup 'n' Fries. Next, and this is unfathomably brilliant (go to about 1:35 in the video--mind blown): Vietnamese Tactical Third Floor Infiltration (Like A Boss). This is quite a story: A storm tore the bow off this ship. The captain still managed to steer it to safety. This is so very true: Improve any novel by changing its second line to “And then the murders began”.

Thursday, March 09, 2017

Ask A Developer: 100 Words or Less

I'm very happy to post a new Ask A Developer: 100 Words or Less with Garret Rempel about his new project: Go Fish Fitness.

Describe your game in one paragraph.
Go Fish Fitness is a card game for kids based around the classic rules of "Go Fish" with an added fitness component to encourage them to get up, jump around, and incorporate physical exercise in a fun and competitive way. Players compete to make a match and force everyone else to perform the activity shown on the cards.

What were your objectives (three) with the original design?
Our objectives were to take a game that was fun and familiar to kids everywhere and do the following:
·   add in a physical component to encourage kids to burn off energy in a constructive way when they’ve been stuck inside especially during a long, cold, Canadian winter

·   make it accessible, using colour-blindness friendly colours as well as providing play options (animals to mimic) for younger kids and people with limited mobility

·   make it useful for other games, based on a 52 card deck with 4 suits, the game can be used for any game requiring a standard deck of cards.

What distinguishes your game?
The artwork is absolutely beautiful and appeals perfectly to kids. It is cute, colourful, and humorous in a way that captures the fun and movement that we are trying to encourage. Fredrik Skarstedt did the artwork on the game for us, and he did an incredible job.

How long does it take to play?
Just a little longer than a regular game of Go Fish (to allow for exercising) a round can be completed easily in under 10 minutes.

What is your design process? What would you consider the foundation of your process?
We started with an idea, a solid concept and objectives that we wanted to achieve, and then the process involved experimenting, revising, tweaking, with that objective in mind. We made sure to solicit ideas, opinions, and impressions from as many people as possible – and gave Fredrik a solid concept to work with, but a free hand to put his aesthetic stamp on it.

How do you handle design paralysis? What do you do to move forward?
If something isn’t working for you, try something new – try something radical and then compare it against what you have. Its easier to identify things that work, and things that don’t, and pick the best pieces when you have options.

How has the game changed during playtesting? How long did the playtest last?
The game was built on a solid foundation and concept which didn’t change during the course of development. What changed was the artwork, revising, trying different options, and discovering what worked best and appealed as widely as possible. The playtesting/development period lasted roughly 3 months of back and forth until we got it right.

How did you handle the process of getting your game to market?
We are managing the process ourselves, as developer and publisher, but working with amazing partners. Fredrick on the art & creative feedback, Print & Play Games for production (a division of AdMagic – producers of Cards Against Humanity and Exploding Kittens), and FlagShip and Canada Post for distribution.

How do you handle marketing? How much time have you devoted to marketing versus design/development time (in hours, if you know)?
Marketing has involved putting together the Kickstarter campaign and contacting dozens of websites, blogs, and also directly talking to hundreds of friends and acquaintances and encouraging them to help us spread the word about the game. Many hours were spent putting it all together, refining it, and communicating.
But overall, marketing was less than a quarter of the time spent on making the product as good as we possibly could make it in addition to arranging production, shipping, and all the other bits and pieces to turn the idea into reality.

What is the release date of your game and the price? Where can people buy it?
The game is available on Kickstarter now (March 8th at 3pm EST / Noon PST) at Go Fish Fitness
We are only aiming to cover production costs and have tried to strike a balance between having a low funding level to be successful, and keeping the per-copy cost down. All contribution levels are in Canadian Dollars – the lowest tier (one physical game copy) is $15 CAD (~$11.25 USD) but if you are quick we have an Early Bird special that we are subsidizing out-of-pocket for $12 CAD (~$9 USD).

What is your next project?
We have 4 projects currently in development, one which we are planning to announce publicly in early-April after the Kickstarter has ended.
Keep at eye on Tricorn Games or follow us on Twitter @TricornGames, Instagram @tricorngames, or on Facebook at to stay up to date.
We also have a $1 reward tier that includes a printable PDF of all the cards, but also gives you early access to updates and announcements of future projects before anyone else hears about them!

Site Meter