15 Minutes of Fame

Upon a routine check of my email on Wednesday I saw a dozen new Tumblr followers and several questions about the Excel Monopoly game I made back in 2011. I was confused until a call a few minutes later from a coworker who had seen the project featured on Mashable. The article was also referenced on the Gamelogical portion of the AV Club site, which I came across organically later that night. The article highlights my project along with five others, which are all fantastic.

Back in 2011 I used this site as a means to display my skills and interests as I changed industries. After starting a new job and having a child there has been a considerable absence. This article has inspired me to dust off the site and my VBA skills.

I have been working on several projects over the past few years, branching out into C# and Python. I’ll be posting more frequently in the coming weeks with the intention of at least one update each month.

Thanks to Mashable for the press!

Information Design: Space Flight

I’ve been a big fan of information design after hearing Edward Tufte speak a few years ago. Since starting a new contracting job with NASA at the beginning of the year my friend and designer extrodinaire Carolyn Sewell has sent me two amazing infographics that I felt compelled to share. One is by the design firm MGMT and one is by Corey.

I think it’s fascinating that since 1961 there has been a US citizen in space for all but ten of those years. My only exception is the omission of the International Space Station, which still fits into the category of manned flights. It seems like we’re due for another gap like the one from ‘76 to ‘80, although at that time we had a plan in mind and were working on the shuttle.

When it comes to the future of US space exploration my views fall in line with Neil deGrasse Tyson, who was great on a recent Daily Show. We’ve got to get back up there, and go farther. The technology that got us to the moon resulted in a multitude of advances here on earth. Not to mention the inspiration for future scientists, engineers, and mathematicians. I think it is fantastic that the government spent $3.4 billion on STEM initiatives last year, but why not add that to NASA’s $18.7 billion budget and do something truly inspirational.

As for this second diagram, I can think of no omissions. I really like including a missile, because who knows what you’re going to come across in space. Well done sir.

Trivia Game

[download the Trivia Game here]

I found my first thumbdrive the other day while cleaning so I popped it in the laptop and was treated to 256Mb of nostalgia. Among the files was quite possibly the first thing I ever wrote in VBA - a trivia game in the vein of Jeopardy. I was a year or two out of college and my former roommates and I were getting back together. I decided to put together a few questions about our group referencing inside jokes and the stupid things we did, with each column / category as a different roommate.

As a word of warning, this was my first foray into VBA so the code is not particularly well documented or well done. Yet I wanted to preserve this initial work so I didn’t clean up the code. I did however change the questions to protect my roommates. Now it is set up as a Saved By The Bell trivia game, mainly because I could think up all the questions and answers in a few minutes.

The file can easily be modified for your own purposes. The second sheet has a matrix of all the questions and answers. So feel free to make it your own (and clean up the code if you want). However, it does require someone who knows all the answers to run the game.

Relaxing and Reading

It’s been a relaxing holiday season. Even more so because I took two weeks off while changing jobs. I started on a handful of projects that I’m sure will show up on this site in the near future. I was also able to catch up on quite a bit of reading, including the fantastic Ready Player One.

The novel is set in the not too distant future where a Steve Jobs type wills his fortune to anyone who can find a secret he’s hidden in a virtual world. Oh, and all of the clues and trials to reach the secret are centered around 80’s trivia, video games, and nerd culture. It’s Ernest Cline’s first novel and at times it shows. The foreshadowing can be pretty heavy handed, leading to plot twists you can see coming from miles away. But overall I really enjoyed it, and apparently it’s going to be made into a movie. In fact, Warner Brothers bought the rights a year before the book was published. Although I’m not sure how exciting an epic game of Joust will be…

Completed Powerbook Mini Arcade

In May I got off to a strong start creating a miniature arcade cabinet using an old Mac Powerbook. The project quickly moved from a scale model to a full size cardboard model with working controls. Then it sat for several months. With some time off around Thanksgiving I was finally able to construct the completed Powerbook Mini Arcade.

On the first of what would prove to be many trips to Home Depot I picked up two sheets of MDF (2’ x 4’ x 1/4”), hinges for the control panel, and assorted screws, nails, and bolts. Although most full size homemade arcade cabinets tend to go with 3/4” thick MDF I figured I could get away with 1/4” because mine wouldn’t have to support much weight. After outlining the cuts in pencil on the MDF I got to work with the circular saw and drill to cut out each piece. I tried cutting the curved sections on the arcade’s sides with a reciprocating saw but that made a bit of a mess out of the MDF so I ended up doing that with box cutters.

To check that I had not made any major mistakes I taped the whole thing together to see how it would look. Not too bad.

As I started to put the buttons into place I realized that the holes I had drilled for them were too small. The buttons themselves are one inch in diameter, which is how I drilled the holes, but the screw threads on the bottom of the button made it too big to fit. After sanding out the holes and attaching the hinges the control surface was assembled.

Now it was time to assemble the rest of the cabinet. Initially I wanted to nail the pieces directly together, but 1/4” was too thin to line up the pieces properly and the MDF might start falling apart when working that close to the edge. To get around this I decided to add some framing pieces of wood inside the cabinet. I screwed the sides to these frame pieces and nailed the other boards to the wood. In theory this means I could unscrew a side to take it off and make changes. Once the cabinet was constructed I drilled out holes on one side to access the power and USB ports.

When I moved the controls from the cardboard model to the final cabinet I had to unplug some of the buttons which resulted in a bit of rewiring. Working with the control wiring is by far the least enjoyable aspect of this entire project. The connections to the keyboard circuit are incredibly finicky and I’m concerned that if I frequently open and close the control panel something will come undone. I’ll likely end up buying a fabricated connector like the mini-pac and scrapping my keyboard hack but this will work for now. As before, once I had each button hooked up I opened Excel on the Mac to ensure that every button press or joystick move corresponded to the appropriate key.

With the cabinet constructed and the controls wired all that was left was to start up some emulators, configure the inputs to use the appropriate keys, and start playing. Which is exactly what I did. Although after a bit I turned it over to my wife to test out Ms. Pacman. It worked great.

All told this entire project took roughly twenty hours although that included making scale and full size models, wiring the controls twice, and at least a half dozen trips to Home Depot. I didn’t add up all the costs but it’s probably somewhere around $50 with the most expensive part being the joystick at around $20. This doesn’t include the cost of tools, or the laptop and keyboard that I already had lying around. In the future I’d like to pretty up the exterior of the cabinet and replace my keyboard hack controls with a solution that is less prone to coming apart over time. But for now I can play old school video games with old school arcade controls and that’s good enough for me.

Arcade Cabinet Dimensions

A few months ago I made an arcade cabinet for an old Mac PowerBook out of cardboard. It was a proof of concept, not meant to last, and used some pretty rough measurements. Having done that I went back and measured more carefully, coming up with a plan to create a final arcade cabinet. Looking at websites for similar projects 3/4” MDF seems to be the standard construction material so that’s what I used in my plans. The images below show a side view of what the constructed arcade would look like and how those pieces could be cut from a pair of 2 x 4’s.


This is one of those times that I really miss college. Not because of the partying and free time, but because of the CAD programs and power tools that I had easy access to in the Physics department at JMU - although the parties were great. Instead I drew these plans up in PowerPoint, paying close attention to the dimensions so the scale should be correct. Next up is actually buying the MDF, making the cuts, and putting this thing together. I’ll be sure to take pictures throughout the construction process for a future post. Hopefully I can have this completed by the holidays.

Lego Rubik’s Cube Solver

When I finished the Excel Rubik’s Cube solver I felt that it was a pretty nice little product. It was tricky creating the logic and determining the correct permutations, and rewarding to see it all work properly at the end. Then I look at an article like this and am blown away. These two guys built a Rubik’s Cube solver out of Lego and a smartphone that can solve a cube faster than any human. Now that’s impressive. I know that Lego has evolved quite a bit since I put together the Black Seas Barracuda in the late 80s, but I had no idea it could interface via Bluetooth. Back then it was groundbreaking that the figures had eye-patches and facial hair - now they’re wirelessly communicating with a phone to solve a Rubik’s Cube.

Rubik’s Cube Solver

[Click here to download the Rubik’s Cube Solver]

I have never been able to solve a Rubik’s cube. I can get to the point where one side is correct before getting frustrated. But then I invariably try to get one more piece in place and end up ruining the whole thing. With that in mind, I decided to write a computer program that would solve a Rubik’s cube for me.

First, I wanted a way to display the cube and manipulate it. Displaying a 3D surface on a 2D computer screen is always a bit tricky because you can’t see the entire object. My initial thought was to show the “unwrapped” cube, where the six faces are joined at the appropriate edges. For rotation the user would be able to move any row or column on the front face in either direction. Because they could only manipulate the front face I added the capability to rotate the entire cube to show any of the adjoining faces.

This was a mess.

The “unwrapped” cube creates issues because no matter how you unwrap it one of the faces will be upside-down from what it should intuitively look like. Additionally, it’s restrictive to think about rotating the cube by only manipulating the front face. A quick search showed that there is actually a standard nomenclature for manipulating a Rubik’s cube. F denotes rotating the front (F) face of the cube 90 degrees clockwise. F’ is a counterclockwise rotation.

With this knowledge I modified my display to show each of the six faces independently, with buttons to rotate them clockwise or counterclockwise. I added similar buttons and icons to rotate the entire cube along any of its three axes. In the earlier version I had created a 3D rendering of the cube that displayed the front, up, and left faces. I added a see-through view of the cube next to this so that the back, right, and down faces of the cube would be visible in 3D as well.

Once I had written the code to rotate the faces and cube appropriately I added two buttons. The first to reset the cube to a solved state - the equivalent of peeling the stickers off and putting them back in the right place. The second to randomly perform some number of rotations along different faces and axes until the cube was nicely randomized, but still guaranteed to be solvable. Finally, it was time to add a button to solve the cube.

There are a variety of ways to solve a Rubik’s cube and this is by no means the most efficient. I wanted to follow a structure that led itself to programming and could potentially teach a person how to solve the cube themselves. The process treats the cube as having three layers, like a cake. It starts by solving the top layer, then the middle, then the bottom.

A cross of a single color is formed first on the top layer, and then the corner pieces are put into place. It is important that not only are the colors on the top correct, but the edges as well. Having done this there are only four spots in the middle layer that might need adjusting and only four spots that they could potentially be. To solve the bottom layer the program actually flips the cube over and then solves the upper layer again. However, it uses a more complicated set of rotations to ensure that it doesn’t change anything in the other, completed layers.

With the solver algorithm developed I decided to add a second worksheet that would list the steps so the user could follow along. The idea is a user could color the squares to match a real cube and then run the solver to discover what steps to take in order to solve it. They could then follow each step, rotating their own cube, and see how it is solved. If nothing else, at the end of the process they would have a completed cube to impress and amaze their friends.

Because my solver algorithm follows this layer concept it is by no means the most efficient way of completing a cube. Running it on randomly scrambled cubes I’ve found that it generally takes between 200 and 250 steps to solve it this way. At some point in the future I might look at optimizing my solver to use fewer steps I’m fairly happy right now that the thing actually works. Enjoy!

Mini Cooper meets Mario

[Click here to download the Mini Cooper / Mario Presentation]

I can’t recall seeing animation in PowerPoint done in a useful or interesting way. Mostly what you get are obnoxious rotating, flashing messages that bounce across a slide. After all this kinetic typography stuff I wanted to play around a bit and see if I could make something fun. After a conversation with co-workers about the four door Mini Countryman I made an animated presentation where Mario has been replaced with a Mini Cooper, which quickly powers up to become a Countryman.

While not particularly useful, I thought it was an interesting example of what can be done in PowerPoint. The animation tool suite isn’t very flexible or powerful, and the screen gets crowded quickly with all the motion paths. Regardless, I had some fun goofing around with it. Now that the two door Mini Coupe is out I might have to do another one.

The above video, Portal: No Escape, came out about a month ago and got a million views on its first day.  It was made by Dan Trachtenberg from The Totally Rad Show and is a intriguing glimpse at what a film based on the video game series might look like. The pan to a weighted companion cube at the end almost makes up for the lack of GLaDOS.

I only bought an XBox 360 a few months ago, primarily as a way to recreate childhood days spent playing video games with my brother. He was nice enough to send me a bunch of the games he had long since beat, so I actually finished playing Portal only a week ago. Dave and I have plans to pick up Portal 2 in the near future and play through its acclaimed co-op mode.

After beating Portal I realized I forgot to mention Jonathan Coulton’s other claim to fame in my last post. He wrote the song that plays during the end credits. I even stumbled across a few kinetic typography videos for the song. Coulton wrote another song that is featured in the sequel, although I haven’t listened to it yet to avoid spoilers.