Conference: php[world] 2019

I spent last week outside Washington D.C. at php[world] 2019. It was the first PHP specific conference I have been to and it was great. I attended the whole day workshop on testing in PHP and learned a ton. If you get a chance to attend one of Steve Grunwell’s presentations it’s definitely worth your time. He mentioned he will be presenting a similar talk at WordCamp US later this week. If you are attending, be sure to check it out:

The next two days were the standard hour-long presentations on various topics. Some of my favorites:

(Note: I will add links to the videos when they become publicly available.)

It is also the 25th anniversary of PHP as a language and there was a lot of talk about why and how PHP got where it is. There was a shared proudness that PHP came about not as a well-planned exercise in computer science. Instead, it was as a community of people just trying to get things done. That is why you will find things like mismatched naming conventions and duplicated functionality. While PHP gets complaints about those things today, it also is the defining reason it is so popular. It was a really interesting perspective on the evolution of a programming language over time.

I do have to say that the area where I stayed was a bit disappointing. Just a lot of chain restaurants and not much to do nearby. Having said that, I stopped by the Steven F. Udvar-Hazy Center by the airport before I flew out and it was amazing! I had never heard of it before, but it is a hangar by the Dulles airport that is part of the National Air and Space Museum. I left myself an hour and wish I had more time there. It was huge, there were over 200 planes including an SR-71 Blackbird and a Concorde. Oh yeah, and you could walk right up to the Discovery shuttle! (See header image) It was free and definitely worth your time if you are nearby.

Overall, it was a really good conference. I also learned that there is a similar conference in February called SunshinePHP held in Florida. As one of the Michiganders looking outside my window today and seeing the first snowfall, I kind of wish I had chosen that one instead…

Where’s Louie – a fun little js game.

It’s Homecoming at GVSU this weekend and the theme is “Where’s Louie” (Louie is our mascot). A while back a few of us talked about creating a game to promote it, and it’s out!

This was fun to write because it basically all takes place in a single canvas element. It’s written in vanilla javascript, with a polyfill or two for older browsers. The purpose of the game is to find the “Louie” image among the randomly generated characters on different maps before the time runs out.

I’ve helped with some similar projects, but this was the first one where I have done the vast majority of the programming. It was a fun challenge! The biggest issues were rendering tens of thousands of randomly generated sprites quickly, and also adding “lava” to the maps via SVG paths so that characters wouldn’t appear in odd places. (Get it? Don’t touch the lava!)

You can go to to play it. I’d love if you let me know in the comments what you think of it or if you have any technical questions.

(Hint: if you liked this game, go to and enter the Konami code on your keyboard. Trust me you will like “Legend of Louie”)

GVSU Destination Report

I just finished up a bit of a fun site at work: It’s the first time GVSU has built a dedicated web version of this report. Since a lot of the work I have been doing lately has been heavily into back-end application development, it was nice to get a break and make something where I could focus more on the design.

I also got to create an interactive React component to look up major-specific data about degrees. This was cool both because it makes it easier for students and potential students to see what they can do with a degree, and I also got to use Victory Charts, a React graphing library I had been wanting to play with. It turned out pretty nice, easy to use and make accessible:

Animated image showing react component displaying major specific data
React is really great for interactions like this

It proved a little tricky to integrate into the rest of the site. Mostly because I set it up using create-react-app and really didn’t want to eject it out of that. I ended up creating it as a sort of sub-project whose base HTML file then gets included in the larger project via the back end language. It worked really well, I would definitely use this method if you come across a similar situation.

I’m famous!

Well, maybe that’s a stretch, but I was listed as one of the contributors to WordPress 5.0 in the official release post. It has been really fun to be able to contribute to Gutenberg lately. Even though I only made one or two small contributions, it’s exciting thinking about the sheer number of people who will be using the code I wrote. It’s also fun to think about the fact that 450+ other people worked together to make it happen. Most of them probably just like me, contributing purely because they are able to.

Hopefully, I can keep setting aside some time to work on it. Both because it’s fun and because it’s really helped me learn a lot. I think one thing that people don’t talk about enough when discussing open source is how much it helps you grow as a developer. I’ve learned a lot of things I wouldn’t have in my normal day-to-day work, most of which has helped me get better at my real job.

Gray Harmonizer

I just finished up creating a little tool to help with a design task I find tedious. Being more of a developer than a designer, choosing color schemes can be a little challenging sometimes. One technique I’ve found really helpful is “harmonizing the grays”. Basically, once you have your colors, you filter the gray values with your primary or secondary color so they are “tinted” slightly. I’m not sure if she created it, but I first heard about it from Erica Schoonmaker.

What’s not great, is having to use Photoshop or some other design software to do it. So I made it a website! It was a perfect use case for React, and the test suite in create-react-app made it easy to make sure my color conversions were correct.