Friday, October 24, 2014

How to make a Haunted Basement without using real ghosts

This story starts 3 years ago when I designed a haunted house for my kids in our basement for their birthday party. At the time they were turning 6 so I kept it light and it was a lot of fun. Ever since then they've asked me to build them a new one for their birthday. This year I obliged and here is what and how I did it. Enjoy!

Location, location, location

My basement is unfinished and the kids play everything from Nerf War to Baseball in the basement. So for the Haunted House I wanted to create a place they didn't even recognize. That means building walls and disorienting the kids. I want them to be so in awe of their surroundings that they forget they are in their own house. This of course is going to result in bigger, yet fun, scares .... or so I hope! (They still haven't seen it yet!)

I started by creating a "floor plan" by laying out some 2x4s in places I wanted to create temporary walls. Temporary meaning I could take them down at some point, but strong enough to stand up and not be knocked over. I also figure that once halloween is over, we can remove the decorations and they can use the walls for a nerf war zone!

My original designs included hanging chains and a well for a monster to hide in. Those ideas transformed into other things, but still were important to helping form my ideas. Not only that, but I have some great ideas for next year!!

The Tree!

The spooky tree was by far one of the ideas I found most inspiring, but I was concerned it might consume too much time. In the end, it really didn't and was fairly simple to create.

Thanks to Croglinvampire for sharing his technique and process on how to create one of these trees! I'm not going to reiterate what he has already explained, but I will mention a few "aha" moments I had while creating the tree.

I bought the cheap foam from Walmart, don't! Go to Lowes and get the 'Great Stuff' expanding foam. It's the same price as the Walmart stuff and works way better! The Walmart foam didn't setup right and was difficult to spray.

Leave the saran wrap on until the foam dries completely. It will pull right off. And what doesn't you can use a lighter to burn off.

Getting an awesome mask is crucial in my opinion to making the whole tree look really great! I searched for masks made for people but didn't find anything I liked. I found much better solutions when I started searching for "tree sculptures". Here is the mask I ordered:


The Ghost!

I saw some amazing ghosts on a blog and just had to give them a try. I did some googling and found how to make a cast of a person using packing tape. You basically wrap a person in packing tape with the sticky side out and then wrap them in more tape sticky side down. And voila!

I tried saran wrap under the packing tape which helped cut the person out of the tape cast, but it was annoying when putting lights inside the cast.

Do the bottom and lower halfs separate and tape them together afterwards.

These are the lights I used inside the cast:

Have your volunteer go pee before you start taping!

Spooky Candles

This was a fun project! Basically just cut up PVC, add hot glue, and paint/stain them! They look great! There is a great tutorial on how to make these. Thanks Xipotec!

You will use a lot of glue sticks! About 3-4 per candle!

These are the tea light candles I used:

The Fireplace

I saw a picture of a fireplace while looking for inspiration. I decided a great way to enter the haunted house would be through a secret passage in the back of a fireplace! The fireplace was a refactoring of a rocket ship I had made for the boys when they were much younger. I just added some textured spray paint to it and cut it in half.
I followed this tutorial to make glowing coals kids would have to climb over and a cheap backdrop for behind the mantle. The fireplace actually leads to a caged in tunnel!

Zombie Danger!

No Haunted House is complete without Zombies! So i mounted some skids, added a few fence boards, attached some body parts from the dollar store and added some red light for dramatic effect.

I did add some gray spray paint to the hands to "dirty" them up a bit and make them look more realistic.


The Spider Cave!

I was originally going to create a creepy room with a well, but it has turned into a room full of spiders and hanging skulls!! I created the effects with black lights, skulls from the dollar store, and lots of fake spiders and spider web.

Not done just yet!!

There are a few more surprises in the works! Including a caged monster and draculas's chambers! I'll post more pictures as the Haunted House is completed!

Happy Halloween!

Thursday, May 8, 2014

Versioning your API

Who has not written or used an API? If you answered no, then this article is not for you and honestly I question how you ended up here. APIs are all the rage these days and everyone has an opinion on what an API should look like. Even more controversial is how do you version your API.

It depends on what you believe.

1. Do you believe in Roy Fielding's REST architecture?
2. Do you believe that accept headers describe how you'd like the resource returned?

If you subscribe to REST (and not Rails version of REST), then you acknowledge that the URL is a permalink to a resource. A location where that resource can always be found. Specifying a version number in that URL suggests that each version is an entirely different resource, not the the same resource presented differently.

And just as the semantics of HTTP verbs make sense, so the semantics of HTTP headers. In the request header I am describing how I want my resource returned. Do I want it returned as XML, JSON, HTML or even a PDF. In addition, maybe I want version 1 of that resource as JSON. This can all be done using the Accept and Version headers of an HTTP request.

(There some arguments for including the version number in your hypermedia type as well. I have not fully subscribed to that approach, but it does make some sense.)

For those of you who have not fully subscribed to RESTful APIs and HATEOAS, I highly recommend taking the time to read through the sites linked below and consider unlearning the older ways of implementing APIs and consider learning why adhering to HATEOAS is important and beneficial.

And honestly, if you didn't believe in separation of concerns, why do you adhere to MVC?

Path to enlightenment

HATEOAS 101 - Brian Mulloy put together a great video presentation of what is HATEOAS
Why build hypermedia APIs - Great review of the why and how of hypermedia in respect to Rails.
Haters gonna HATEOAS - Steve Klabnik explaining the HATEOAS
REST APIs must be hypertext-driven - Fielding himself highlighting what makes up a REST API

For those working in Ruby

Grape - Gem, DSL for describing your API
Roar - Gem, presentation DSL for your resources
Swagger - Document your API
Postman - Chrome extension for testing your API

Wednesday, April 2, 2014

Note to self: Machine Setup

Every few years us developers find the need to recreate their precious development environment on new hardware. It's an exciting time, because "Hey, new hardware!" However we always find ourselves copying bits and pieces from the old hardware while trying to reconstruct our development environments. Some of us take good notes, I myself have been slacking. I had some notes, but not all. So I took this opportunity to make a note to self so that next time I can cruise through this process much faster.

Let's get started!

Package Manager

Previously I have always rolled with MacPorts. I'm finally caving. Install Homebrew
ruby -e "$(curl -fsSL"


You can't build a whole lot without it
brew install apple-gcc42
sudo ln -s /usr/local/bin/gcc-4.2 /usr/bin/gcc-4.2
sudo xcodebuild -license

RbEnv or RVM

I recently switched to RbEnv from RVM and am sticking with it.
brew install rbenv ruby-build
rbenv init
With RbEnv you need to install a shim to make life easier when referencing ruby:

echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
Install Ruby!
rbenv install 2.1.1

Version Control

Visit Git and download the DMG installer. Then generate your RSA key and attach it to your Github account.

ssh-keygen -t rsa -C ""

Don't forget to make branch creation and deletion much easier and follow this great tutorial from Scott Bradley.

Also don't forget to configure your .gitconfig. Mine is saved in a repo on Github with my bash_profile and bashrc.

Rack server

Use pow, thank me later.
curl | sh
Don't forget to install the powder gem for ease of use.

Editor of choice

I choose you Emacs! And let's setup and use Cask with Pallet to manage packages.
Download and install the dmg from

Install Cask (curl worked better than homebrew IMO)
curl -fsSkL | python

Download my .emacs.d repo into ~/.emacs.d to configure all the awesome packages and Cask. The setup is loosely based on this post.

Run Cask within the .emacs.d folder to install all of the packages listed in the Caskfile

Bash prompt

I like my prompt to tell me a little bit about the directory I'm in. Especially if it's a Git repo. Follow this easy tutorial to setup a clean prompt that renders VCS info.

And for even more cool bashness, install autojump! I highly recommend cloning the repo and installing it manually.

And install iTerm2

Within my .bashrc I've setup some aliases for running Emacs locally as a server so I can work entirely within iTerm while developing. I prefer alternating tabs in iTerm vs alternating between GUI Emacs and the terminal.

See you again in 1-2 years!

Monday, January 6, 2014

Carrying on great conversations #hashu

Some of the best conversations are usually unplanned and they tend to happen when I surround myself with smart people that I've just met. This usually occurs at a conference or meetups over beverages and/or grub. However I'm terrible at remembering names.

That's where Hashu comes in. One day while pairing with Andre Ortiz he mentioned an approach he took to starting conversations and recalling them at SXSW. He had written a web app that leveraged Twitter and the power of the #hashtag to keep a record of people he met at SXSW. It was a great idea! So we teamed up and put together Hashu!

The Nickel Tour

To use Hashu all you need is a Twitter account and a Twitter client, that's it! Then just follow these 3 quick steps:

1. Use your phone, iPad, laptop, etc etc to open in a browser and follow the prompts to authenticate with Twitter.

2. Send a tweet and mention somebody you found interesting and tag the tweet with #hashu

3. Return to at a later time to view all your tweets tagged with #hashu

3a. Aside from showing you your tweets in a cool tiled format with images and Google maps, it will also show you the profiles of all of the people you have mentioned.

The Technical

Hashu is a Rails 4 app, using Ruby 2 and Mongo. My original intent was to demonstrate modeling for NoSQL and Riak, but given budgetary constraints and that I was using Heroku's free tier for hosting I switched from Riak to Mongo. However I chose to model as I would for Riak and used Braintree's Curator gem so at a later date and time we could easily switch back from Mongo to Riak.

The code is public and can be found on Github. Please don't go stealing our ideas! We're so cool we opened up our code so you could have a peak under the hood :)

The Extra Credit

I'll be attending CodeMash this week and plan on using Hashu throughout the week. Don't be surprised if I #HashU! If you'd like to chat about Hashu, Riak, pair or have a beer at CodeMash just send me a tweet (@msnyder) or look for the guy who looks like me. And for those attending CodeMash, you can also access Hashu at

The Leftovers

This is the first production iteration of this application and Andre and I are working to improve it. We'd like to add in some cool per conference branding, better parsing of tweets, and some other coolness. If you're interested in helping out or have some feedback for us, send us a tweet or leave a comment on the CranialPulse blog.
Enjoy using Hashu!