Steve Phillips

Travel API mashup

While driving home from Phoenix last night, I had an idea for an API mashup to help plan out multi-day drives. The overall goal of the mashup is to create a system where you input your start, destination, vehicle mileage, leg min/max durations (meal breaks) and rest stop intervals (pee breaks), and it helps plan out your route and stopping points.

Team Liquid Calendar

I just finished the first release of a new project that aims to put the Team Liquid calendar into Google Calendar.

Drupal ramblings

I've been using Drupal almost exclusively for the past 8 months now, and I can't really express how much I love it. The flexibility, power, and community support are all leagues ahead of the other systems I've used, primarily Kohana and WordPress. I can't believe it took me more than 5 years of professional web development to get into Drupal.



In my last entry, I spoke of the future of wsilent and promised an update when I had one, which I now do.

The current iteration of wsilent has been codenamed dovetail and is available through github. It is conceptually similar to wpilot - a NodeJS / HTML5 / Canvas based online space shooter, but it shares absolutely none of the code. As of right now, it is almost an empty shell, but I will continue updating as progress is made.

The future of wsilent

I've been having a hard time getting motivated to work on wsilent lately, and today the reason finally hit me - I'm spending far more time tweaking wpilot than I am actually making progress. I've been on this project for almost 2 months, and the best I always can hope for is that it seems to be the same as wpilot. I've adjusted the weapons to use the template method patern, I've adjusted the upgrades to use the decorator pattern, I gutted the websockets system and replaced it with, and now I'm working on changing the bullets to use the flyweight pattern.

Tags: and wsilent

I recently switched out all of the websocket calls in wsilent with This was forced upon me when wsilent stopped working with newer versions of Chrome because Chrome no longer supports websocket v75 or v76, which are the only two methods that wsilent supports.

Fighting Spambots

After my switch from WordPress to Drupal a few weeks ago, one problem instantly popped up that I'm still dealing with - spambots. WordPress' akismet support did a fantastic job of filtering out spam accounts and comments, and I'm trying to configure Drupal to be set up similarly. I downloaded the AntiSpam module, but that didn't seem to do much. I probably have it set up wrong. Now I downloaded the CAPTCHA and reCAPTCHA modules to add a reCAPTCHA challenge to the new user account page.


Decorator pattern, part 2

While working on wsilent, I quickly realized that the decorator pattern was ideal for weapon powerups. A ship object contains a weapon subobject (built using the template method, as described in an earlier article), and the weapon subobject can be decorated with powerups. These powerups can do things like cloning the bullets for a spread shot, or cutting energy / reload times for a rapid shot. The powerups can also be combined to form a rapid spread shot, and can be added and removed dynamically and independently of one another.

Using the template method pattern

In my last post, I talked vaguely about a project I'm working on. In this post, I'll actually name it. I realized it was foolish to link to my github profile on this site, while not talk about what is clearly available in that github account. The project is a fork of the browser game wpilot. My fork, codenamed wsilent, aims to be a spiritual successor to the old multiplayer game Silent Death Online.

First shot at the decorator pattern

I picked up the much beloved Design Patterns about 6 months ago, but have only had a chance to use some of them in the time since. Patterns like the strategy, factory, facade and adapter all have fit neatly into the projects I've worked on. But because of the nature of PHP development, many patterns simply don't fit in; this is especially true for patterns that are mostly relevant to run-time changes.