Sunday, June 26, 2016

Mother Jones: My Four Months as a Private Prison Guard

Well worth the long read.  Particularly if you're fond of dystopias. As Bauer states,

"My job will always be to deny them the most basic of human impulses -- to push for more freedom."

101 Infographics

Lots of cool visualizations - I like the wind pattern graphic, although if you made the wind yellow, it would look like Trump had taken over the US.  I prefer the data-heavy charts to minimal visualizations, but I think the primary take-away is that there's an amazing amount of information out there, even if you roll it up into consumable (and interactive) bites.

Random Numbers

Interesting article on new random number generation methods.  Doesn't sound like it will be making it into my C# code anytime soon.  Reminds me of the interview question we setup using one of the shared online coding environments where the dev I was working with - who wasn't used to .NET (although this goes back to COM) did a for loop to generate random numbers and got the same number for each iteration of the loop when he ran the code.  Took an old dev like me to point out that depending on the algorithm, MS usually resorts to some time-based seed, so if your loop is too fast, you'll just get the same number.  You can put in a wait or call one of the reset/reseed functions (or pass in a seed) to "force" the randomness.  MS says it themselves, they use a "time-dependent seed value" and their algorithm is pseudo-random (

But back to some true randomness at - I think the idea that your randomness might lose its randomness because the other systems it relies on for randomness aren't truly random is interesting. I wonder if, at the heart of the matter, that means that all systems are crackable if you can understand the state of the objects that went into the end system.  That is, it's all obfuscation until you obfuscate to the point that the variables reach infinity.

"How do you know for sure that the measurement devices used to measure the physical system don't have some underlying predictability due to the way they were constructed? To overcome this problem, scientists have developed strict requirements on the devices, but these "device-independent" protocols are so strict that they are very slow at generating large amounts of random numbers."

I also think it's interesting that there is during (dynamic?) and post (static?) randomization, with the latter being computationally heavy and more akin to certification of randomization.  You have to wonder if some day someone with enough horsepower will discover that all the GUIDs generated by current systems aren't random and are discoverable and we'll be forced into a Year-2000 like situation where we have to recompute system ids and update them (and therefore have to update all the relationships - nasty).

Sunday, April 17, 2016

Wasteland 2

I've been playing Wasteland 2 on the Xbox lately.  I loved the original, although I've never gotten into the whole Fallout series.  They left a lot of the quirks in the game, and I was panicked when my surgeon was dying and I didn't have a backup surgeon available (fortunately, I had skill points I hadn't spent).  And the part where I have to find rad suits to get from point A to point B gave me flashbacks.

Here's Kyle.  I feel bad that I haven't flushed out his biography.  Contrary to that pistol in his hand, he's usually running around with a shotgun and a machine gun he hasn't trained up in yet.  He's not great in a long range fight, but he's been instrumental in taking out several wounded enemies who get close in.  And he's got some good "kiss ass" skills modified by both a trinket and a perk.  I missed his chance to kiss ass a little tattle tale who saw me bust open some doors because I was a point short.  That won't happen again.

"I know my shotgun is big, but you seem so dangerous you don't need a gun.  You could probably take me on without one..."

Sunday, March 20, 2016

Richard III - Theatre in the Round

We went to Richard III at Theatre in the Round not so long ago (next up, The Magic Garden).  It's one of my favorites because I studied the Tudors for almost five years as an undergrad and the liminal between Richard III and Henry VII and the changes to the government were fascinating.  So this sits right on the start of what I studied.  It usually feels like one of the most accessible plays to me as well.  How difficult is to understand a piece of propaganda where the main character is pretty much a total dick.  That translates in action, if not in language.  Eryn picked up most of it, and she's not a big fan of Shakespeare at TiTR.  Guy kills all his relatives, marries their wives, wants to marry his niece (this skeeved Eryn the most).

It helps to have all the history and know that it's a piece of Tudor propaganda.  Sure there were humps and nefarious deeds, but history is written by the victor.  Even more so if you're trying to back up a claim to a crown you're not really queued up for.

Lucas Gerstner (you work at Imation in your free time, Lucas?  That's cool) as Richard III was extremely good and really captured the conniving nature of the character in his tone and action.  He really made the play.

And Tyrrel and Ratcliffe as sort of hipster/Portlandesque assassins played by Daniel Vopava and Matthew Englund?  That was a good touch. They had solid, semi-sniveling, do-what-we're-told, lackey vibe.

Unity on iPhone

I have to say, the Unity app for the iPhone seems to be lacking without bluetooth, but the fact that I can just wire it in and run my app simultaneously on a PC desktop and iPhone is amazing.  Seriously cool.  Having to download 22 GB of install because I didn't grab the iPhone/Android/et al packages the first time?  Not so cool.  But that was my own fault.  It's slick to point the app at multiple platforms with so little effort.

I know what you did in the bathroom

This does get the point across that you shouldn't use this particular stall.  But it also looks like perhaps there's some sort of bio emergency underway.  Perhaps a nice sign just doesn't cut it when it comes to conveying urgency.


Some links I don't want to lose, but don't want to track in my inbox...

Saturday, March 12, 2016

Keep Talking and Nobody Explodes

I've been thinking about Keep Taking and Nobody Explodes since I saw Felicia and Ryon Day play it on their show.  So tonight Eryn and I gave it a play test so I could see whether it would make a good game to play as a team building exercise at work.  I'm sold.  Our videos don't catch the back and forth well because you don't hear me, but you'll get the idea.  Great interaction game.  We set up a little station with a chair and light (and manual) outside the computer room instead of going with the VR.

I'd add that the little blurb of music at the end sounds VERY like Red Dwarf music which made it that much more fun.

Felicia and Ryon playing. You don't have to use body-part imagery when you play with a kid.

Eryn's and I play our first game...

A more complicated game...

And we blow up. That multi-word puzzle was rough. Not sure if you can hear it but at one point I tell her Uh uh, and she goes with Uh Huh. Or vice versa. I knew exactly what she'd done once it happened.
And Pooteewheet plays a few games with Eryn. It was amusing that they had a much harder time communicating what the shapes on the keypad were.

Friday, March 11, 2016


The presenter in the Scavengers tutorial barrels along faster than I can type, and I'm not slow.  I was pretty sure I'd miss something.  And I did.  My food and soda wouldn't pick up and it took me a long time to realize I'd misnamed my method with 2d instead of a 2D.

But what really got me wasn't something I could control.  When my level was resetting, it wouldn't recreate the board.  I changed from a deprecated method to the new loadscene version.  And then I started putting in debug.log statements (didn't I say this felt like old school VB once before?).  After trying to narrow it down, it appeared my Awake function wasn't triggering, so the board wasn't repopulating.  I compared their completed version with my version of the script, and the prefab, everything else, all to no avail.  Finally, in this five year old post (long before the current version of Unity) someone mentioned that Awake() doesn't always refire and you have to code it up under OnLevelWasLoaded() to catch logic after the first time.  I dropped it in there - cut and paste rather than appropriate refactoring - and success!  So for anyone else who's getting Awake() or InitGame() events that aren't firing when they expect them to, OnLevelWasLoaded() is a good place to call your logic again to be sure it triggers.

You can see the affect of the bug on not rebuilding subsequent levels in the video.

Monday, March 07, 2016


I messed up the animation script for the roguelike tutorial in Unity.  It's a little worrisome looking.  I said at one point he was just standing around wanking.  Seems even shadier in this video.

Saturday, March 05, 2016

Adventure Game, Progress

I took a short break during some coding to go for a bike ride.  Darn nice out there, although still a bit chilly on the gloved hands if you're moving fast.

I ran into a few issues getting the basic board controller working.  I dragged the sprites onto the game objects rather than into the sprite controllers, so when I ran the board creation loops, there was nothing to create.  Had me at a loss because my code looked spot on but I was still seeing a great big empty field.  Took a lot of work to clean it all up because modifying the prefabs resulted in messing up my board controller.

The tutorial walked me through a singleton pattern attaching the game controller to the camera by checking for the singleton instance.  I'm never going to believe a Unity programmer again when they tell me they don't know any software patterns.

There's my Win32 meltdown that crashed Unity.  I'm pretty sure it's because I made an instance of the prefab and then deleted the prefab in an attempt to make a new prefab.  I can't be certain, but I suspect it's like having an instance of an object with no object?  The important thing is not to do it - very messy.


The 80/20 rule (Pareto Principle) applies to playing around in Unity3d as well.  80% of the work comes from 20% of what you're working on.  I decided to move on beyond the Space Shooter tutorial when I got to the part where I'd need the Apple or Android SDK (or Windows).  Not that I'm adverse to using them or can't, I've used all three, but I thought learning more basics rather than significantly more configuration work was preferable.  So I started the 2D adventure game tutorial series.

1.) I was immediately amused because I'd had an intern candidate telling me about his Game Conference challenges using Unity2d and he'd discussed a "cookbook" game with a demon hooking to a JSON data source.  The Scavengers setup sure seems like the base application his team likely modified for their competition.  Wish I had played around with it before the interview.  I don't think he was expecting an interviewer who'd touched Unity (recently).  I asked a number of questions related to prefabs and how they compared to a traditional OOP structure and whether coroutines were threading (they're not, and there are a few tutorial videos out there on the topic of yielding to the main thread versus spawning new threads in C#).

2.) Getting back to the Pareto Principle, during the first real lesson after the introduction, I did something that eliminated my main camera.  So when I went to watch my little adventurer bounce up and down like he was wanking to pass the time, I couldn't find him.  Or his two wanking monster buddies.  I had no problems putting the camera back, but the default settings weren't the same.  I eventually had to boot up a new project and check the defaults.  Unity was resetting the Transform.z to 0 instead of -10 and the depth to 0, instead of -1.  I updated the values and there they were.  Like looking for a needle in a haystack.  Here's a default Main Camera, should I ever need to get my mitts on it again.  It took quite a while of dicking around with settings and looking online before I gave up and did the new project.  Seriously - I'm still trying to make it work in my head - I assume because my characters were at 0 and my camera was at 0, that I was in some sort of Flatworld universe where I couldn't see them.

Friday, March 04, 2016


Yesterday, during a management meeting, there was a lively - as lively as possible given the topic - discussion about the skateboard model and Minimum Viable Product (MVP).  The idea is that you focus on features rather than an end state.  So instead of building a car by creating wheels and then a steering wheel and then an engine, you instead build a skateboard, then a bike, then a scooter, then a motorcycle, then a car.  You can see it laid out here.  As a bicyclist, I have a problem with the model, because I'm happier with a bike. I never get to car.  My focus is on what can I do with less, but still get more (I can afford multiple cars, no gas, less maintenance, more "intent" in my destinations, time with friends to talk, exercise, less maintenance, I can still haul most things in my trailer >> e.g. I don't need an engine on my app, I need a two wheeled trailer).

Around here we think the car is the goal, regardless of how much you might like the bike.  One of the architects echoed that sentiment and said, "What if I want a hovercraft?  I might like a hovercraft."  To which I wanted to scream, "MY HOVERCRAFT IS FULL OF EELS!"  Now I'll never know if my coworkers are Monty Python fans or if I'd have received a written warning.  We've got a lot of new focus on MVP, so perhaps I'll get another chance.

Tuesday, March 01, 2016


Reorg day!  The best, right? This one looks like it will be "directionally correct" in that I go from several business units to just one (but one with multiple people) all pointing at similar functionality even though it's in multiple products.  One of my rules has always been that if you can minimize business units, you're better off.  Gives your life a focus you don't get with half a dozen of them competing for your priorities and you ending up feeling like you're not making anyone feel special (or happy).

But on to a bit of code.  Although, as I think I've said before, I'm not sure this counts as anything other than configuration coding as long as I'm generally following video instructions.  But fun.  I got the enemies running with tilt and shooting, so altogether, it actually looks like a real game.

One of the things I noticed is that my bolts weren't deinstantiating even though I'd set it up.  Eventually I realized that it had to do with turning off the GameController which was the object controlling destruction of the bolts after a while.  It's just a checkbox, but it makes a big difference.  It also controls whether the enemy ships can actually destroy your player ship, so it's pretty obvious when you've temporarily disabled it.

Here's the video of the full game in action.  I upgraded to a record with sound so you can appreciate the music and the explosions.

Sunday, February 28, 2016

The Bride Wore Black

Kyle, Lisa, Pooteewheet, and I went to The Bride Wore Black at the Trylon tonight.  I thought the Jeanne Moreau series looked interesting (there are two going on in town simultaneously), and the fact that Truffaut (the director) thought Bride wasn't right for his own tastes struck me as something I'd probably enjoy, particularly coming from someone who directed Fahrenheit 451.  

It's a revenge tale and parts of it are very amusing, although it's difficult to know whether they were originally supposed to be.  Particularly the blatant sexist entitlement of all the French men (a politician to be notes that women love politicians because they can rationalize that he set aside all of France for me for one night).  Killing someone via duct-taping them in Harry Potter's closet under the stairs and the whole scene with the child who can't communicate that Julie is not his teacher are also amusing, but not outside a bit of suspended disbelief.  What still comes through is that Julie is single minded in her desire to eliminate those that wronged her, which resonates with a lot of the revenge tales that have been filmed since The Bride Wore Black.  Ebert loved it in a review written before I was born.

This has nothing to do with the movie, but I thought it was fun to poke my camera phone into the window before the film started.  Eryn is looking forward to a seat being named after Peter Venkman.

Tuesday, February 23, 2016

Unity Bug #2 - That was Fast (and funny)

Thought I'd be smart and fix the increasing difficulty Vector3 issue by just making the velocity of the asteroids faster and faster based on the wave count.  So I exposed the wave count on the Game Controller and accessed it via the move script where asteroids keep set their velocity based on a public property.

I forgot to account for my wave array being 0 based.  I failed to account for the fact that my shots and asteroids were tied to the same velocity/move script, meaning my bolts go faster as the asteroids go faster.  Perhaps not a bad thing, although strange.  And my ship's movement isn't tied to the same movement script, so it doesn't get faster as the rocks start to shoot down the screen at breakneck speed.

My first bug

I've got music and waves going and scoring and restart in my Unity3d game.  And then I tried to get fancy and add a value that slowly moved the waves closer and closer.  I thought I should add:

1.) waves move closer and closer or faster and faster.
2.) objects that aren't shot, but pass the player and destroyed against the boundary are negative points.
3.) each shot is potentially a negative point (because I'm a dick)
4.) a shot counter and objects destroyed to track a few stats to show at the end
5.) a ship destruction value (because I'm a dick)
6.) potentially a few lives with the ability to get more with a higher score.  I hope that rolls over and gives infinite lives because it would be old school.

So I started on #1 and moved the asteroids 5 units closer after the first wave.  Result...unshootable asteroids that, after the first wave, became ghost asteroids.  It seemed to be a float value and I was adding an int, so I modified it and tried again.  Same behavior.  So I use the range for the y value like the x value and added the number directly as an int and then a float.  Same behavior.  It's exciting to have a coding challenge, even if it's minor.

I feel like I'm coding VB COM again.  A lot of setting .Text against text objects and just sort of attaching things to each other to use them.  It would be nice if some of the students I interviewed played around with the Unity tutorials just long enough to talk through the object structure and why you have to locate the game controller rather than instantiate try to access it from every instance of a tumbling rock.  Good lessons there.

Sunday, February 21, 2016

Unity3d - the Asteroids

I've made it as far as adding the asteroids on a wave basis and allowing for explosions between the shots and the rocks and the rocks and the ship.

I'm also reading Nystrom's Game Programming Patterns, which make sense in the context of the mesh and transforms I'm using, but is much more about traditional software patterns.  Still, a very good read.

Peep Show

I've been watching Peep Show while I bike.  Today's viewing included The Man Show (season 2, episode 5).  I like this two part quote, spread out during the episode...

"I'm staring into the abyss.  I don't like the abyss.  Maybe I can fill the abyss with lots and lots of [business] calls."

And later... "I have entered the abyss.  I have bought a house in the abyss.  I am forwarding my post to the abyss."

And I like that bathrooms are called bogs, although that would confuse the cranberry growers in the state next to mine and, potentially, really upset them if they thought someone was defecating in their cranberry bogs.