We're hiring!

We're actively seeking developers for our new Detroit location. Learn more

Learning & Presenting at SCaLE 12x

Last weekend, I lead a workshop on game development at the 12th installment of the Southern California Linux Expo (SCaLE) — a community-run, open-source, free software conference held annually in Los Angeles. SCaLE has grown to 2500 attendees, 100 exhibitors, and 80 sessions and tutorials.


Having attended SCaLE in the past, I had high expectations. This year definitely exceeded them. Being a Linux / general open source conference, SCaLE has a wider variety of technologies and people than most. I met Ubuntu experts from Canonical, engineers from Disney, and even a recruiter at the Apple booth! Read more on Learning & Presenting at SCaLE 12x…

Posted in Growing as Makers | Leave a comment

Ruby FFI for Quick Prototyping

I recently found myself trying to answer the question “Is there a quick way to talk to a USB HID device from Windows via Ruby?”. The short answer is “yes, via HID API and FFI,” but that’s much too short a story. Let’s look at the long answer:

I consulted my trusty friends Github, Rubygems, and Google. After looking around for a bit, nothing met my needs. There were libraries that did USB via libusb. There were even one or two that had a nice clean HID interface, but they hadn’t been touched in four years and no longer worked in modern versions of Ruby.

Along the way I was guided to a C library called HID API. The interface looked clean and simple. Only one problem, no Ruby. Then I remembered how easy Ruby’s foreign function interface (FFI) was to use. I’ve used it in the past and John Croisant wrote a great introduction to it last year. Here’s the code I needed to finish up my quick spike: Read more on Ruby FFI for Quick Prototyping…

Posted in Ruby | Tagged , , , | Leave a comment

Spying on Your WPF Applications with Snoop

If you’re developing WPF applications and do not have Snoop installed; install it now. I’ll wait. Installed? Good.

Snoop is an open source tool for spying and debugging a running WPF application. It can be used to inspect your running application and make changes while your app is still running. I’ve found it to be very useful for finding missing bindings and tweaking layout parameters when you can’t use Designer. (don’t ask, that’s a blog post for another day.)

Here are a few tips to get you started:

Selecting Your App

After installing and launching Snoop, drag the cross-hairs from the Snoop window to your WPF application. You’ll see your application tree on the left and a property editor on the right for whatever component you have selected.

Read more on Spying on Your WPF Applications with Snoop…

Posted in .NET / WPF | Tagged , | Leave a comment

Opal.rb: Ruby in the Browser

I fell in love with the idea of writing Ruby code in my browser long ago. I promptly wrote that dream off as impossible and learned coffeescript. But while coffeescript makes javascript much nicer to work with, it still doesn’t flow as nicely as good ‘ol Ruby. Opal.rb attempts to solve this problem. Opal.rb is a Ruby-to-javascript, source-to-source compiler. Opal supports most of Ruby already, including classes, modules, blocks and method_missing. Check out their rubyspec progress.

Opal has been under development for a couple of years now by Adam Beynon. There is an active community of people working to improve Opal and build extension libraries like opal-jquery, opal-sprockets, and vienna. I’ve started my own little Opal project while writing this blog post. I ported a basic Pixi.js example to Ruby via Opal.

Read more on Opal.rb: Ruby in the Browser…

Posted in Web Apps | Tagged , | 1 Comment

Kicking the Tires on Ruby 2.1 Preview

A preview of Ruby 2.1 was released a couple of days ago with these release notes:

VM (method cache)
Decimal Literal
Frozen String Literal
def’s return value
new Rubygem

I found myself scratching my head for a minute. I don’t know what most of these are! So let’s dig into them and dive into some of the details.

Read more on Kicking the Tires on Ruby 2.1 Preview…

Posted in Ruby | Tagged | Comments closed

Framework Docs Are a First-Class Citizen

Documentation is a crucial part of any good API or framework. Despite this importance, it often gets neglected and treated as an afterthought.

I recently asked another developer how he always managed to put together such well-thought-out and complete documentation. His response was: “Documentation Driven Design (DDD): if your API feels clunky to document, it’s probably a bad design.” This reminded me of my first introduction to Test Driven Development (TDD). By breaking your code into smaller chunks and testing them first, you were immediately placed on a road traveling toward better design. Given how useful TDD has been for me, DDD seems worthwhile.

Gamebox documentation

One of the main considerations that determines whether I use a framework is how complete and easy to understand the documentation is. But in my own hypocritical way, I’ve neglected good documentation principles on my own hobby projects and frameworks. Read more on Framework Docs Are a First-Class Citizen…

Posted in Development Practices | Tagged , , | Comments closed

Organize Your Life with Trello

I am a to-do list junky. If I want to get anything done, I need it written in a list somewhere. I used to go through a lot of index cards to keep this obsession satisfied, until I switched to Trello.


Trello is a digital task list with a twist. You organize your tasks by placing them in lists on a board. Cards can be quickly assigned or dragged to another list, making Trello ideal for a Kanban board. Read more on Organize Your Life with Trello…

Posted in Personal Optimization | Comments closed

Acceptance Testing Your Games to Fix Bugs and Provide Regression

Acceptance testing is hard. It requires thinking through your entire problem and nailing down the expected outputs for a list of inputs. When working on games, acceptance testing becomes even more difficult.

There are certain aspects that cannot be tested: “Is it fun?” “Is it too hard?” Other aspects are just difficult to setup and too brittle to maintain. You don’t want your tests to break on small tweaks, like player walking speed or jump height, but you want to enforce that the core game mechanics are working: “Can I shoot another player?” “Can I jump up on that ledge?” This is the area where tests can be incredibly useful.

Is the bullet perfectly parallel to the players feet? It's hard to tell, even when playing.

Is the bullet traveling perfectly parallel to the players feet? It’s hard to tell, even when playing.

Read more on Acceptance Testing Your Games to Fix Bugs and Provide Regression…

Posted in Extracurricular Activities | Tagged , , | Comments closed

Chipmunk Gem, version

Chipmunk LogoChipmunk is a simple, lightweight, fast, and portable 2D rigid body physics library written in C.

I’ve recently helped update the Ruby chipmunk gem to the newest version of the Chipmunk code to brush up on my C skills. There have been loads of features and performance enhancements added since the last chipmunk gem was built (over 120 lines of CHANGELOG goodness). For example:

Read more on Chipmunk Gem, version…

Posted in Ruby | Tagged , | Comments closed

Preparing Machines for Workshops with Vagrant, VirtualBox, & Puppet


Teaching a workshop involves a lot of thought and preparation. There’s research to do, content prep, slides to tweak — and you have to figure out some way of getting all the attendees started with the same setup. If you’re lucky, you’ll be presenting in a lab with machines that can be set up ahead of time. Puppet, Vagrant, and VirtualBox are fantastic tools to help you get your workshop setup. Using them saved me time and kept me from having to deal with issues on the day of the workshop.

I recently did an “Intro to Rails” workshop at Hope College. Their lab was set up with powerful laptops that were already equipped with VirtualBox. I just needed to provide them with an image to use. If your attendees are bringing their own equipment, think about having them install VirtualBox ahead of time.

Read more on Preparing Machines for Workshops with Vagrant, VirtualBox, & Puppet…

Posted in DevOps & System Admin. | Tagged , , , , | Comments closed
Google Circle
Join my Circle on Google+