All Posts

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.

French Cleat Tool Wall

A few weeks ago I got an unexpected surprise – a snow week! Maybe the best thing about working at a university is snow days as an adult, and a whole week was something new. I used the time to organize the basement a bit.

When I first started making space to do some woodworking in our basement, I put up some OSB I had laying around from roofing our porch and mounted tools to it with random screws and nails.

First Tool Wall

It was a big step up from having everything laying around, but as I get more tools and understand what I use more often, I wished it was easier to move things around.

In the other corner, I had an old wire rack that I was using to store some of my other tools. It was messy, and really hard to keep organized since it was basically just semi-organized piles. Behind it was the end of some storage shelves that I built a while ago. The ends were two 2×6’s so I decided to put up a storage wall there as well but wanted to try using french cleats.

What’s a “french cleat”? It’s a really simple but strong way to mount things the involves cutting strips of wood at an angle and mounting one to a wall and one to something you want to hold, like this:

The genius of this is it is really strong if you build the tool holder correctly (more on that later), but it’s still easy to rearrange if like me, you are adding to your tools as you go. There are lots of good videos about making them on youtube, I checked out a couple for ideas before I started.

Much Better!

The one thing I learned (a little too late) is that you have to be careful about providing enough vertical support under the cleat on the tool holder that the weight doesn’t pull it forward. This is easy to do by just putting a 3/4″ strip at the bottom of anything that is a little taller. The only holder that I might have an issue with is the drill holder. It wasn’t tall enough to add any support underneath, and I knocked it out once by bumping it when building the holders. I think it will be okay, but for the others, like the jigsaw, I added a strip to the bottom and it is rock solid.

All in all a fun and productive way to spend some unexpected free time. I also got a mobile tool base kit from Harbor Freight for my table saw and built that with some leftover pallet wood I had laying around. Moving the saw is about 100 times easier now, I didn’t realize what a pain it was before. I repurposed the wire rack to organize some of my wood, although I think a rolling lumber cart might be my next bigger project.

Goals for 2019

Goal 1: Learn German

I’ve tried learning languages before. I speak a little Spanish and last year I took German lessons in preparation for my trip to Europe. The problem is that when I get back from whatever trip, I lose motivation and don’t ever make it past the basics. I really enjoyed learning German last year and want to take this year to try and commit to learning it. Being bilingual would be awesome, and I want to make a real commitment to moving in that direction this year.

365 Day Duolingo Streak

Duolingo might not be the best or most efficient way to learn a language, but it is the easiest I have found to stick with. For that reason, I’m making that my base. I will complete my daily goal in Duolingo (30xp right now) every day for an entire year.

German Journal

I like the idea of the 5-minute journal, but it’s another thing that I have never actually done. So this year I’m going to kill two birds with one stone and try to do it in German. They sell a German version of it on, but I couldn’t get it here in the US. I reached out to the company and they were nice enough to send me a German version for free to try out! I think this will be a great way to force myself to use German every day.

More iTalki Lessons

iTalki is the best method that I have tried to learn a language. I took German lessons last year and learned exponentially more than I have from any other medium. Speaking to someone in real life makes you internalize a lot of what you have learned. Since I don’t know anyone who speaks German and wants to spend their free time helping me learn, this is the closest I will get.

Goal 2: Get in Shape

Ah, the universal new year’s resolution. The one everyone has and nobody keeps. Honestly, I hate putting this here just because it’s so cliche. On the flip side, it also needs to happen. A few years ago I really got things together health-wise and it’s slipped the last couple. Now I want to make it a priority again.

Maintain a healthy weight

I’ve lost, and gained, and lost weight again for years. This year I want to get to a better weight, and then focus more on maintaining it.

Find a reliable way to exercise at home

I work from home twice a week, which I really love, but I’ve struggled to find a way to make working out happen.

Goal 3: Morning Routine

This is the one goal from last year that completely eluded me. Mornings are not my strong suit. I’d like to try and get a more structured routine that involves all of these things. Even if I don’t stick with all of them, I think trying them all for at least a month at a time will give be something to go from:

  • Wake up at the same time every day
  • Morning Exercises/Stretching
  • Keeping a Journal
  • Eating a Healthy Breakfast
  • Walking Maya (my dog)

Goal 4: Meaningful Free Time

I wasn’t really sure how to word this. It seems odd to make goals about your free time. But the fact is, I really like some of my hobbies, and they are things that relax me. It also turns out that thing everyone says about having kids taking up a lot of your free time is mostly true. So I guess the goal here is to optimize my free time by making more conscious decisions about how I spend it. I like to flip on Netflix as much as the next person, but these things are better ways for me to unwind.

Beer Making

  • Make 5 batches of beer
  • Make one all grain batch


  • Turn 24 Bowls (2/month)
  • Make four other projects

Programming (outside of work)

  • Make at least 2 contributions a month to open source software
  • Make at least three new websites


Well, that’s it, a little ambitious maybe considering it’s already February 😉