About

Born and raised in Texas, I often found myself up late at night tinkering about on the computer to either install the latest distro of Linux or meet new people on IRC. I left Texas for my undergrad in Victoria, BC, Canada, where I received a Bachelor of Arts in 20th Century American History (from a Canadian perspective). I came back south to connect with old friends and landed a job at Apple Inc. in the summer of 2007, just as all Apple employees were receiving their free iPhones. I worked there for a few years until I made the choice to go back to school to pursue a master's in education.

Right before graduating, I met my wife and other half. She has kept me sane ever since. We have two beautiful children, whom we do our best to keep curious and motivated.

After a gratifying run in education, both as a teacher and an academic tech coach (video portfolio), I decided to make a career change toward technology and registered to an intensive, 16-week full stack web development bootcamp. It was an incredibly rewarding experience and I managaged to secure a position right out of the gates as a software engineer primarily doing DevOps type work. I am now excited to be at the forefront of helping to create innovative tools that add value to people's lives.


When I'm not tinkering at work or with my family, I like to go on long bike rides or make video game sounds late into the night.ps
Personal Projects
RPI K3s Cluster
Just before the pandemic, I built a small Raspberry Pi using a Compute Module 3+ that runs openVPN and Kodi on boot. So when the coronavirus hit, I figured I ought to start playing with Kubernetes at home since I play with it all day at work. So I built a Kubernetes Raspberry Pi cluster with 4 Raspberry Pi 4s each with 4GB RAM. I learned a lot and managed to get everything up and running without too much hair pulling. I currently have a UniFi Controller, FileBrowser, a Ninjam server and a variety of media services available; some publically and others via TailScale. Lessons learned were things I've learned at work, but they're always good reminders.
Lessons Learned
- Assume nothing
- Document everything
- It often pays to know and understand the why behind something working (or not working) before moving on
Ran-Jam
A full-stack web app built with React, Node.js, Express.js, MongoDB, and Tone.js that allows users to jam along with randomly created music. Users can also log into the app using Google oAuth to save their own musical jams.
Features
- Ability to save songs
- Pulls samples from the FreeSound API based on a search query
- Each experience is different with the generative element
- Choose from a variety of instruments
GeoMindr

A full-stack web app with an emphasis on the backend created with Node.js, Express.js, PostgreSQL, JavaScript, CSS, and HTML that allows users to text a Twilio number using IFTTT to then record a reminder and their GPS coordinates. This reminder gets saved in a database to be accessible at a later time either via the web interface or by messaging the same number to get a list of reminders. Bcrypt was used to hash the user's password while express-session was used to keep track of whether the user was still logged in or not.
Features
- Full SMS support through Twilio
- Create, retrieve, update, and delete reminders via SMS or web interface
- View public reminders via web interface
Parity

A front-end memory game created with JavaScript, CSS, and HTML where the user matches tiles based on pictures and sounds pulled randomly from two APIs (Free Sound and Unsplash Image) making every gaming experience unique.
Features
- Progressive level system that allows users to play 5 levels of increasing difficulty
- Match either image or sound; excellent for accessibility
- Change between themes after each level completion or failure
React-Cital Piano

A front-end synthesizer built using React and (Tone.js). The user is given 2 octaves to play with as well as sheet music and a metronome to better help them understand music theory.
Features
- Keys controlled via mouse or QWERTY keyboard
- Each key held down lights up pink to inform the user what keys are pressed
- Multiple keys can be pressed
Eggy McEggy
andFriends

A simple shoot'em up game created using Python and Pygame.
Features
- Ability to travel in all 2D directions (up, down, left, and right)
- Splash screen with instructions on how to play
- A score counter / multiple lives
Scales-O-
Rama

A simple python app that allows users to find scales based on inputted notes or randomly choose scales from a variety of musical modes.
Features
- Scales randomly chosen from major, minor, dorian, phrygian, lydian, mixolydian, and locrian scales
- The itertools module is used to flatten the dictionary of scales into values which then allow the scales to be randomized
- If the incorrect option is chosen, the user is alerted to enter either "lookup" or "random"