CV, 949-943-0242


I recently picked up the guitar again after a very long 5 year hiatus. So, if you're interested, here is some improv in G major/E minor:  Jam 3/3/18.

Here is a song I wrote and recorded around 2009. I actually never finished recording it, but there's still enough there to listen to. Very old song!


A more advanced movement mechanic for board games

Boardgame design has seen an explosion of creative new mechanics in the last decade resulting in tons of great games being published every year. Of those mechanics, few are as fundamental as movement, which simply dictates how players spatially traverse across the playing board. There are three paradigms that dominate traditional movement mechanics. The first, called area movement, divides the playing space into irregularly shaped sections and defines adjacency as any two spaces that share a border. The second is grid movement, which has players moving on top of a square grid. This affords players eight different directions of movement to choose from, however, many games do not allow diagonal movement. The third is hexagon movement, which has players moving across a tessellation of hexagons, thus giving six equal directions to choose from. The new movement mechanic presented here provides twelve directions of movement from any space.

Above: procedure for traversal

Setting the playing field: First, create a tessellation of triangles and clearly mark the vertices. Next, remove the edges to reveal repeating rows of equally spaced points. 

Placing pieces: Each player's representative piece on the board must occupy seven points, with the center of their piece centered over a single point (see the circle outline above). When done properly, there should be a clear perimeter around the piece consisting of twelve points. This mechanic requires circular (or nearly circular) pieces to work properly.

Moving: Each of the 12 points on the perimeter represents a direction to travel in. Choose one of the points, then position the center of the participating piece directly over the chosen point. The piece should again have 12 points surrounding its perimeter. Movement can begin again in the same manner.

Despite the simplicity of this method, it still took me about six months to come up with this. The idea originated from a board I was designing with a racing theme (visualize something similar to Mario Kart). The existing movement mechanics were far too restrictive to capture the feeling of driving since navigating a race track requires both small and large turning maneuvers. Of course, to capture the feeling of driving, the physics of movement must be captured as well (i.e. momentum, turning radius at different speeds, etc) which I have also developed simple mechanics for. The twelve degrees of freedom afforded by this method offers some interesting emergent gameplay to occur. For instance, if an object traveling in this manner hits a wall, it can reflect off the wall at an appropriate and realistic angle (think about throwing a green shell in Mario Kart). I have developed the core mechanics for an entire racing game around this idea. I'd be more than happy to collaborate with someone to actually develop a game.


Some projects from school

Here are a few of the projects I did in school. Unfortunately, almost everything I did in school was not saved. My time with my career has taught me that EVERYTHING should be saved and documented if you want to stay ahead. When I go back to school, I will be uploading a lot of LaTeX and code here (as well as at

The Finite Element Method

Code and output

This was a particularly fun project for my finite element class. It was really just more of an extra-involved homework (we still had tests), but it was a bit more involved. The assignment was simple: create a 2D Laplacian solver on a square region with arbitrary boundary conditions. The fun part was that we had only been taught how to do FEM in one dimension and were sort of just told to "figure it out" for two dimensions (in a friendly way, of course). This assignment was especially satisfying because I knew all about PDE's and how incredibly difficult it could be to solve these types of problems analytically. The fact that I had created such an effective numerical solver on my own was extremely rewarding and remains one of my favorite problems from school.

Yelp Data Analysis - User Review Predictions

Powerpoint link

I had a math modeling class that was based on modeling via machine learning methods. The final project was standard - apply the techniques learned in class to something of your choosing. My partner and I chose to create an algorithm that predicts Yelp user reviews. We first made the assumption that users can be placed into groups that consist of like-minded individuals. From there, we figured that since each user is similar to the other individuals in their group, we posited that any user can be represented as a precise "mixture" of all the different personalities that exist within their group. In math terms, a user is made up of a linear combination of their peers. The main benefit here is that the other members of a user's group will very likely have reviews of restaurants that the user has not yet reviewed. Thus, if we recreate a given user via the best linear combination of their peers, it is certain that the result will consist of the restaurant reviews we started with, along with brand new restaurant reviews that originate from the peers. In more precise terms, we grouped users together based on similar reviews (this part was entirely subjective) and then created larger groups via supervised spectral clustering. For each individual user, we then removed restaurants from the entire group which corresponded to the restaurants that the user had not reviewed. This creates an undetermined linear system to recreate the user (many more columns[users] than rows[restuarants]) and results in infinitely many solutions for the desired linear combination. We thus used compressive sensing to find the solution with the smallest one-norm. After adding the restaurants back to the group, we applied the linear combination to the group and thus the original user's reviews are recreated, as well as a set of new predicted reviews. The presentation was a big hit and we were asked to present the project again in front of the entire department.