My first Haskell project is a file watcher!

May 15th, 2013

I created a file watcher, threw it up on github, posted that on reddit and sent the package to hackage.

My Diablo account was hacked, for the win!

April 5th, 2013

On March 10th I received an email from Blizzard.

Hello Schell,

Blizzard Entertainment recently received a request to change the e-mail address used to log in to the account with the username e*** The e-mail address d*** has been specified as the new username for this account. An email has been sent to this new address containing a verification link to complete the change.

“Ahhhhh crap!” I thought. “Someone hacked my account and now I’ll have to spend a bunch of time trying to claw my way back in.”

Stay a while and listen...

Stay a while and listen…

Being generally swamped at work and a very casual gamer I let it all slide for a month. I did nothing until my roomies started talking about playing again.
“Oh – I should go and get my account back so we can all party,” I finally admitted.
“Yeah! Do that and I’ll craft a bunch of stuff for your monk!”
My friend Paul plays Diablo a lot more than I do. He’s got a level 60 that looks like gold Skeletor from Masters of the Universe.

I spent about ten minutes talking to a support guy in a chat room.
“Yup – looks like your account was compromised. I’ll go ahead and reset the email and give you a password reset link.”
“Sweet, thanks.”
“Okay – looks like you’re all good to go. Just login and create a support ticket to revert anything that has been changed.”

I thought I would log in and find a stripped, broke ass, bare naked level 32 Monk and all my hardcore characters dead. I was surprised when instead I found a stripped, broke ass, bare naked level 60 Monk and all my hardcore characters untouched! The perp, who was probably a gold farmer, had played through the game for me and leveled my toon all the way up to 60. That’s a win in my book.

So to huang3#1360 – thanks.

my new 60

huang’s favor

HN has ads?

January 18th, 2013

Check it out – number 15. No up votes. No URL. No points and no comments. Just a vague  title (yet extremely alluring to my inner child) that links to a 42floors ad. And one that might be a photoshop disaster, no offense. I think they pasted at hat guy’s head on an older dude’s body. Look at the hands. Is this what I think it is?



Github game off 2012 post-mortem

December 19th, 2012
The Moonening

Level 2

Github’s game off is over and the winners have been announced. Unfortunately my game, The Moonening, didn’t place. Sad face. The whole process was fun and I know what went well and what went wrong, which gives me a good idea of what to do next…

What went wrong

Animation & Events

My canvas framework, bang, doesn’t yet support animations like sprites, so I experimented a little with the way I would represent the characters. I did this by creating a base Sprite object that takes an image path and a list of rectangles, one for each frame of the animation. This essentially limits a sprite to having one animation. I then created another object called Toon that is a collection of Sprites. The character objects can show certain animations by specifying a Sprite in the Toon, and a frame in the Sprite. This ended up being problematic once I wanted to use certain frames for other animations, or trigger events after an animation played.

Events were handled by Action objects that bind an object to an event handler. I liked this pattern, but often I wanted an Action to trigger other actions, wait for those, then finish doing something else. This didn’t work correctly because half of the Actions ended the current turn so triggering them meant that the turn is over and now other Actions will soon be triggering. I’ll fix this in the future by making all async game actions use callbacks.


Sound is almost non-existent. My friend Jimmy wrote three kick ass songs but I could only include one and the game has no sound effects.


The user controls some number of astronauts in a turn-based puzzler. This seemed really cool at first but once the player is controlling more than one astronaut it can be quite confusing. I like it, but I’m biased. The next version will probably not be turn based but will instead see the user playing a group of astros all at once, using some sort of flocking algorithm in a more action-adventure (zelda style) setup.

What went right

Editor & Levels

Even though ONLY ONE PLAYER found the level editor, which is mentioned in the readme and linked on the main page, it was the best part of the game. The most fun I had during the jam was sitting around at my friend Bryce’s house drinking beers making levels (and bug fixes). That and listening to Jimmy’s songs. The way you can create a level, save it as an image in your browser’s local storage and then navigate to the game page to play said level was in my opinion pretty novel. But alas – I guess I didn’t stress it enough on the main page. A link was not enough.

Moonening Level Editor

Level editor.

Art & Music

My roommate Alex Whitehurst helped with the art and I think it looks great. He drew the faces of the astronaut, the blob animations and the crate. He also did a bunch more, but I couldn’t program as fast as he can draw. The art gives the game a cute feel and I’d like to go further down that road.

The music was created by my friend Jimmy Barry and is awesome. I wish I had enough time to include his other songs. He has a rad soundcloud that you should visit.

Another friend, Evan Johnsen, created some tile art but unfortunately like Jimmy’s songs I didn’t have time to code them into the game. The next round will see additions from all three.


Every part of the game code was written by hand by myself. There was no external code. The entire game consisted of a module loader, a display list system, an event system and animations, with an audio tag thrown in for good measure. It was a lot of work, but I enjoy knowing a little bit about every step in the process, even if I didn’t place in the comp!


All in all it was a great experience and it all ends just in time to continue working on the game for Mozilla’s 2013 Game On. So be expecting updates!

Moonening Mentions

December 14th, 2012

Here I’m going to collect mentionings of The Moonening from around the net as a sort of pre-post-mortem. If that makes any sense ;P

Bloggy Badger - “astronaut-splitting, blob-merging puzzles. too short. a bit buggy.”
HN comments on that post

Entries Viewer - no quote…

The github game off 2012 winners! - no mention, though I’d like to keep this for posterity.

Representing 2d and 3d data in 1 dimension.

November 23rd, 2012

When programming applications that operate on some spacial dimension we often work with maps. Specifically, if someone is writing an adventure game they may use a 2d array to store their world data. The programmer would then access elements on the map like so

var map = new Map2DWithDataAlreadyInIt();
var x = 3;
var y = 5;


In C that kind of array access is syntactic sugar for

int ndx = map.width*y + x;

MapElement* el = map[ndx];

which shows us that storing two dimensional data in a one dimensional data structure is as simple as specializing the element access mechanism.

Similarly we can store three dimensional data in a one dimensional data structure using this formula for element access

int ndx = map.width*map.height*z + map.width*y + x;

MapElement* el = map[ndx];

You can see that the element access equation for two dimensions is contained inside the equation for three dimensions, which means our equation is recursive, fun huh? So you can guess that next we could use this pattern to store four dimensional data in one dimension or eleven dimensional data in one dimension – just by using a single array and a special access equation.

So – tell me what the access equation would look like for four dimensions…


give me a generalized equation of element access for n-dimensional data.

Github Game Jam 2012

November 8th, 2012

I’ve started on my entry for github’s first game jam! My game is called “The Moonining” and this is the pre-mortem.


The astronaut approaches.

It’s a turn based, top-down, sci-fi-horror-comedy adventure. Whew. I’ve got three weeks to write the code, draw sprites and get it all bundled up (playable). I’ll be posting details on the tech involved and progress reports as I go along. My roomy Alex Whitehurst is helping with the sprites. He’s already made some awesome character faces for the astronaut and some nice spaceship map tiles. My good friend James Barry will be doing the music and sound effects and has so far finished the title screen music. This is going to be a fun project.

Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo

November 8th, 2012

And just to bring it back to programming, or math, or data structures, or something other than buffalo:

A tree of buffalo

Buffalo, dawg.

Praise be to DOS

November 7th, 2012

clicky clicky DOS


Re: Please Don’t Learn to Program

May 15th, 2012

This morning Hacker News looked like this:
HN screeny

Jeff Atwood apparently thinks programming isn’t worth learning about, for most people. I think he’s probably right, in the sense that “robots aren’t worth learning about, for most people”. I can think of more examples. “Physics is not worth learning about, for most people”. But that’s rather obvious isn’t it? Why blog about it? Why blog about blogging about it? ;)

Atwood is bashing CodeYear, an initiative to get everyone to learn a little bit about programming. Here’s a retort written by CodeYear’s designer, Sacha Greif. Here’s another retort on Github.

I don’t understand why any of this stuff is worth arguing about. Why does Atwood care what people do with their free time? It seems there are a lot of assumptions being made about the motivations of these aspiring programmers. I see nothing wrong with CodeYear. I see nothing wrong with everyone knowing something about programming (hell, it’ll give me more to talk about at parties), just as I see nothing wrong with everyone knowing a little something about singing. Singing isn’t an essential skill for everybody’s daily life, but neither is math, really, though they both make life more interesting and are worth knowing about. These topics have the potential to enrich our lives, so why not learn about them?

Follow me on GitHub
Follow me on Google+
Follow me on Twitter