End of Summer Milestones

This summer was life-changing for me, both personally and professionally.


  • I received even more positive feedback about my DrupalCon Los Angeles presentation on visual regression testing, including making a top 10 list.  I’m glad so many people found it helpful.
  • I presented two sessions at the NYC Open Source Conference, one at the Security & Privacy Summit on mass code analysis and the other on visual regression testing.
  • I gave a ton (well, 10) lightning talks at local clubs and events.
  • I wrote a well-received guide on visual regression testing.
  • I discovered the OKR (Objectives and Key Results) planning and reporting system is completely brilliant.
  • I discovered how much I enjoy public speaking, that people enjoy my presentations, and that preparing more of them is almost certainly on the horizon.

I also wrote my first text adventure game for Ludum Dare #33!  I love text adventures. There will be more of this.

Personally, I hit one of the most important milestones in my adult life.  Back in January, I decided that I would try as many new things as possible this year and own the outcome of every attempt completely, to better work on personal growth. I discovered some good things, for example, how much I enjoy public speaking.  But I also found that a core skill I thought I had was significantly different from what I thought I knew about myself. This has become life-changing in an unexpected way, which is exactly what I signed up for, but still takes time to process.

2015: Six Months of Fun

The year 2015 has been exceedingly productive and I’ve had a very good sprint into early summer. June hasn’t quite hit yet, but it’s about the time of year where I think about what I want to accomplish personally in the months leading up to December.

  • Learn Inkscape.  Inkscape is an open source vector graphics illustration program that appears to be well-designed with exceptionally high quality.
  • Create more music with GarageBand.  I’m new to composing electronically and earlier this year I started creating simple loops with this program.  My experiences have been very positive so far and I’m having fun.
  • More Ludum Dares!  This competition has been a good experience for me and I’m looking forward to the August and December jams.

I’ve also been thinking about my current reading efforts. I used to put quite a bit of time into maintaining my Goodreads account and keeping up on new releases. Presently, I’ve been catching up on older stories and I think I’ll continue with a mix of classic and new books.

Video games are also an important consideration.  There are quite a few classic games I’ve been wanting to play and I now have a PS4 that needs attention too. For 2015 I hope to finish Oblivion once and for all and then tour through the Dragon Age series of games. I would also love to complete a nethack wizard ascension and learn to play Angband.

Finally, I consider writing important to me and I’m going to make more time for it, both here on my blog and elsewhere. I’m looking forward to the rest of 2015 and sharing what I’m doing with graphics, music, books and video games.

Ludum Dare #32 Results!

A few weeks ago I participated in the Ludum Dare #32 game jam.  Tomorrow, the game that was created, was my sixth Ludum Dare entry and my first with a team in the 72-hour relaxed version of the jam competition.  Here’s how it turned out!

Ludum Dare #32 Results

I am exceptionally happy with these results. Considering the competition, being ranked in two categories with threes is a nice bonus and also a new record (Tiny’s Adventure in TV Land, my previous solo Ludum Dare #31 game, only received one three).  I also broke a new blog length record writing up the postmortem.

Between now and the next Ludum Dare I have quite a bit of work to do. It feels good to know I’m advancing as a game developer while doing it.

DrupalCon Los Angeles

DrupalCon Los Angeles 2015Last week I attended my very first DrupalCon in Los Angeles. I had a great time, met many awesome people, and I’m looking forward to attending future DrupalCons and camps.

One of the first events I attended was the Women in Drupal gathering at the Engine Company No. 28. The entire restaurant was reserved for it and the turnout was extremely encouraging. The meetings there helped me think about the direction I could take with my career regarding new technology, training, and education.

On Wednesday I presented CI for CSS: Creating a Visual Regression Testing Workflow. This was the first presentation I’ve given in over five years and I was honored to be selected. Everyone who attended seemed to have a good time and I enjoyed sharing what I’ve learned about visual regression testing through websites and video games.

The best part of the convention for me were the coding sprints.  I’ve participated in jams and hackathons before, for example the Ludum Dare that’s held three times a year, but these sprints were larger, coordinated, and everyone was working towards the same goal of improving Drupal and the Drupal ecosystem. I’m looking forward to contributing to these over the next few years.


Tomorrow: A Ludum Dare #32 Postmortem

TomorrowLast weekend I participated in Ludum Dare’s 32nd game jam. The announced theme was  “an unconventional weapon” which is fantastic and set the mood for the entire event.  I got further than I ever have in video game development and I felt great about my jam entry.

My game is called Tomorrow and it offers the player a chance to role-play a surveillance drone in a near-future San Francisco cityscape. Flying from building to building, the player must visit as many windows as possible as the game scrolls and the speed increases.  The city sunsets into oblivion if the player misses too many windows.

The initial story idea behind the game, developed with a friend, involved social issues and visiting city locations to meet people and attend events. The more the player socialized the greater the variation of responses they could face, and the fame component was intended to be the unconventional weapon. It was a hard concept to realize, and after getting stuck early on (including a short stint where the game could have been about a rubber chicken), I decided to develop the technical mechanics first and worry about the rest later.

Structurally, this jam was an also experiment for me on a few levels. I discovered a few weeks ago during the mini Ludum Dare that I really enjoyed working with different art styles that are challenging to produce during the 48-hour compo. I also missed working with a team. With all of this in mind, I entered Ludum Dare’s relaxed 72-hour jam that allows for teamwork and the use of assets created prior to the competition. A friend volunteered to produce the game’s music and help with design ideas, and I could use OpenGameArt.org for the graphics.

The engineering and software development portion of the jam went exceedingly well. For the past year I’d wanted to make a responsive game with mobile potential in JavaScript and even blogged about this here as a goal.  My previous games relied heavily on DOM/canvas and manual effects rendering with crafty.js, so switching to the Phaser framework freed me from the underlying technology. Phaser also allowed me to use a more sophisticated physics engine (it supports 4!) and to prototype more rapidly.

Phaser was also incredibly easy to learn. This was my first game produced with the framework, and I was literally cramming through tutorials the Friday night the jam started. Phaser’s community support forums and set of working demo games got me up to speed in record time and there were almost no technical blockers while developing the game. I highly recommend Phaser and I intend to use it to produce future games.

Thanks to Phaser, development proceeded rapidly, and by Saturday afternoon I had the player scrolling through a cityscape and…not much else. The next step was integrating the storyline. Since the game took place in a city I decided the player would fly through it and I used a flying rocketship as placeholder art. At this point I was hoping to finish the game that night, so creating events for the player to visit seemed too time consuming. I decided to use the windows of the city to represent locations and overlay tiles that could flash with a special effect.

I also needed a lose condition. Time, which I didn’t posess much of myself at that point, seemed to be the fastest way to do this. I made it a requirement that the player visit a certain number of windows as timed intervals increased. I wanted the game to be immersive, so I used the color of the sky as a status monitor to keep the player focused on the city.

At this point the game was looking good enough to benefit from an extra day of polish, so I decided to continue development through Sunday. I still needed an unconventional weapon (time perhaps?) and the game was far from the initial story premise. I received feedback from another friend that the game is really about drone surveillance because why else would a robot fly around and visit city windows? Hey, they had a point! And so it was.

The music production added a great amount of value to the drone premise too. Cruising around the city felt like crusing, and the soundtrack helped place the game’s setting closer to the near-future.

The final wrap-up involved quickly producing a title and credits screen to meet art licensing requirements and the game was submitted early Monday morning. It felt odd to have produced a game where the player is essentially rewarded for being a drone and doing drone-like things, but this is largely because of the time-crunch during development and the lack of a concrete ending. I think the drone mechanic has potential beyond this and I would love to use it as a storytelling mechanism for a longer anti-drone game.

Here’s a summary of what went right:

  • Entering the extended 72-hour jam. This gave me time to relax and have more fun with the entry. Being able to use OpenGameArt.org during the design process upped what I was able to do and had a hugely positive effect on my enthusiasm.  It was also more fun working in a team.
  • Hosting the event away from home. Being in another space improved my focus, and it was refreshing to come home and do something else away from the game during the jam.
  • Developing the game with the phaser.io. The framework absolutely delivered and the tutorials and support forums were spot on every time I needed guidance.
  • Making a responsive game with mobile potential. I had wanted this functionality for awhile and Phaser made it easy to deliver.

There was also room for improvement:

  • Pacing myself! Being able to use external assets combined with extra time was a recipe for enthusiasm as the game became polished and took shape. It also made it easier to overextend myself. This is the opposite of what I wanted as I’ve been pretty good about taking care of myself during the 48-hour version of the competition. I felt 16 years old again while jamming, but the post-jam exhaustion is a reminder I’m no longer 16 or even 26.
  • Not using all of the available time over four days. I might have been able to relax a bit more by extending my jam time into Monday afternoon and I think this would have helped with the end-game delivery and overall polish too.

For the next Ludum Dare, which should take place sometime in August, I’m definately going enter the 72-hour jam and pace myself accordingly. Phaser.io is a dream to work with, and I’m going to learn all the things about it over the next few months. I’m also thinking about partnering with an artist ahead of the competition so I can develop a jam game with custom art as well as sound. It will be interesting to see how this works out!

Finally, I’m incredibly happy how everything worked out overall. I feel significantly closer to approaching game development goals that I hope to reach over the next couple years. I’m very much looking forward to creating more games in 2015, both inside and outside of jams.

Ludum Dare #32 Thoughts

Ludum Dare #32 starts tonight and it was to be my most prepared Ludum Dare of all Ludum Dares. I had specific goals to be tracked over the previous few months, including learning how to make better music with garage band on my mac and upping my skills with open source illustration programs.

There was progress. I discovered InkScape, a free multi-platform vector graphics editor that completely replaces anything I might ever want to do with Adobe Illustrator.  Sculptris, a 3d digital sculpting tool, was also fun to play around with and could yield some interesting sprites or meshes if I produce a 3d game at some point.

There was incremental sideways progress on a few unexpected things too. I made a game for a mini Ludum Dare, which cemented my desire to get away from crafty.js and do something cool with phaser.js. This game was also my first introduction to OpenGameArt.org and the agonizing decisions that come with designing a game around the best assets I could find. I also worked on Pantheon’s Ride the Lightning game, produced with crafty.js, which was satisfying to see so many people play on April 1st.

My musical progress fared less well. I composed a few loops which sounded good enough for jam purposes, but I need to be composing every day for at least a few months to get where I want to be with the audio.  For this upcoming jam I plan to stick to generated music and bleeps or incredibly simple garage band loops if I can pull off the composition without running out of time.

I think my targets were reasonable and my progress and time management could have been a bit better. For the next few months following this Ludum Dare I’d like to have more concrete and specific goals regarding audio and visual game development.  Recently, I’ve been getting into a system called OKR, short for Objectives and Key Results,  and I think using it to help plan goal posts and milestones following this Ludum Dare could help me move forward with game development.

I’ve also thought quite a lot about goals themselves and how I feel about goal management.  It feels good to achieve goals, and I love game jams because they time box my work and force me to produce something tangible I can look at in exchange for that time. Goals themselves are less concrete, even specific ones, and I think that in a way they can become an unrealized debt to oneself.  I’m hoping the OKR system improves how I feel about them, and how I feel about working towards a goal over time while not necessarily producing something concrete from it, or at least not right away.

My goals for this weekend will be pretty simple. I have a lot of other work I need to do on top of the jam, so I’m going to do the best I can with what I have going into it. On Friday I’m going to look over phaser.js tutorials and design something conceptually fun that I hopefully won’t trip up on during the implementation. On Saturday I’ll write the code and release it and on Sunday I’ll have to cut things short and move on to another project.

I do have a self-improvement plan for the judging phase. The Ludum Dare 48 hour compo requires projects to be open sourced during the submission process. In the weeks after the jam I’m going to look specifically for phaser.js games and try to understand the implementations. I also have a friend who uses Unity and I plan to acquire at least novice level skills with the framework in order to run projects and examine workflows.  I also plan to rate as many games as I can, and I might even try streaming some on Twitch depending on the bandwidth.

After the judging closes, it will be back to another iteration of what I could have done better along with looking ahead towards any game I might make for next month’s one game a month jam. I don’t think I’m going to incorporate games themselves into my OKR’s, since I’m using the OKR system to make otherwise intangible goals more concrete.  I’m looking forward to seeing how the goals themselves progress in the system and I’ll share the progress here.

Hands-free pong: My Mini LD #58 Game

Hands-free Wave Pong!A couple of weeks ago I created an entirely hands-free pong game demo in JavaScript for the Mini Ludum Dare #58.  The theme of this game development jam was “Pong” and I gave it a new twist.

You can check out the game here.  Note you’ll need a mac laptop running chrome to play the game demo and you’ll also need to give the browser access to your microphone when you visit the page.

I first got the idea for a hands-free game after seeing implementations by Daniel Rapp that used the doppler effect to track hand motion. His work seemed like the perfect basis for a game, and what’s remarkable about it is that it works so well. I’ve left the game on by accident and watched it continue to track hand motions from someone sitting across from me after I pulled back my chair.

I put this demo together in a few hours for the Mini Ludum Dare game jam and I’d like to expand on the concept by making a more involved game in the future. From swatting flies to leveling a space ship, there’s enough here with this mechanic to be quite entertaining.

PHPUnit install tip for Homebrew and Composer

PHPUnit is one of my favorite unit testing tools and I recently needed to install it directly into a project with composer. I’m on a macbook pro running mavericks and homebrew, so I typed:

composer require "phpunit/phpunit"

Surprisingly, I got:

Could not load package phpspec/prophecy in http://packagist.org: [UnexpectedValueException] Could not parse version constraint ^1.0.2: Invalid version string "^1.0.2"

I looked at my version of composer, installed last year probably, and it was at 1.0.0-alpha8. Aha! I thought, I will upgrade.

brew upgrade composer

This upgraded composer to 1.0.0-alpha9, but still did not resolve the error message.

Finally, the magic to get it working was:

composer self-update

The update set composer to 1.0-dev, which was enough for my composer require “phpunit/phpunit” installation command to work.

I’m noting this tip here on my blog in case anyone else finds themselves working with PHPUnit since the closure of its pear repository last year.  Composer is an awesome dependency management tool that’s a delight to use and I’m glad only a quick self-update was needed for PHPUnit.

Daylight Saving Time

Summer is my favorite season in San Francisco. This year I’m enjoying the approaching summer hours and following daylight in the mornings and evenings. The initial DST time adjustment is disconcerting, but it’s worth being able to appreciate the weather outside of the office.

Switching back in November is more challenging for me. I’m happy that the next change is quite a few months from now and near the end of a year that still feels new. I expect 2016 to be pretty awesome by the time it rolls around.

Thirty Flights of Loving

I keep returning to Thirty Flights of Loving, one of my all time favorite video games in the non-linear short story genre. If you haven’t played this yet it’s a quick $5 adventure that can be obtained here.  Spoilers ahead.

Thirty Flights of Loving drew me in after the first crash scene, with an injured Anita staring blankly into space while shooting empty rounds from a machine gun. The untold story behind that scene’s moment is shown and almost eclipsed by the literal shell shock of the character.

The scenes shift quite a bit after, but my favorite is the wedding party and the relaxed evening with friends. There’s a surreal and beautiful moment when the guests float into the sky that captures the feeling that everything’s going to be okay.

The most haunting part of the game for me is near the end. I’m riding on a motorcycle with Anita driving, and she turns to look at me with love in her eyes. Everything seems safe, the adventure is won, the past is present, and then the bike drifts into oncoming traffic.  I feel like this is a metaphor for my own life in a way; every time I’ve felt secure in my position or proud of something a shoe drops somewhere and I’m pulled away.

The developer commentary is a nice add to the game, though it doesn’t say that much about the depth of these particular moments. It also includes short movies on modeling several of the game’s objects in Blender, which is encouraging to me because I’m learning that software right now.