Even though software engineering is my profession, I don't only code in the
office. I'll occassionally dabble in software side-projects at home, too. This
page is dedicated to hobby/side projects I've worked on outside of my job. It
includes some academic projects too.
In my
Personal Finance Philosophy post, I describe the importance of budgeting and acknowledge that it can be time consuming to do properly. Since I’m a software engineer by trade, I looked for software to help me with the job. Initially, that was practicing double-entry accounting for all my personal finances using GnuCash, an open-source version of Quicken (with less features). It allowed me to understand the workflows, but the integrated expense matcher is terrible and I wanted something better.
I recently took my 2003 F-250 on a trip pulling a single-axle camper trailer behind it. I’ve had the truck now for a few months and am well aware of the shortcomings of the 6.0L Powerstroke engine but wanted to collect some data for my engine to use as justification and prioritization for upgrades. I’ve been looking at the parts offered by BulletProofDiesel for quite some time but didn’t want to unnecessarily upgrade parts without first establishing a baseline for engine health. Using a bluetooth ODBII adapter and the Torque Android app, I collected that data on this recent trip. I estimate the total combine weight of the trailer, cargo, and passengers to be ~3000 pounds (on top of the truck curb weight).
I’ve been interested in trying homebrewing for a few years but it wasn’t until
I had a second interested party that I finally decided to give it a try. My
friend Trent told me he was interested in trying it out, that he has done it
once before (solo), that he had some of the equipment already, and that he
knew where the brew supply shop was. I was sold. There’s an Austin company
called Brent’s Tree Service and we had an inside joke that led us to eventually
settle on labeling (figuratively) our creations as “Tree Service” brewing.
Our setup is pretty simple. We brew in a giant aluminum pot over a propane
burner. It isn’t perfect since the heat is concentrated in the middle but
frequent stirring mitigates that issue. We’ve got a copper wort chiller coil
that we submerge in ice when we need to transfer the boiled wort to the
carboy for fermenting, and then we have a cheap 6.5 gallon plastic carboy to
ferment in. We have only bottled out beer thus far (as opposed to kegging).
Though I’ve had some folks suggest that kegging is more convenient, I prefer
bottling so far since it’s easier to keep and share.
The custom radio cooler (and other
prior art) I built in college
has been dragged all over the place between tailgates, pool days, the beach,
camping, and hunting trips. It is a complete workhorse optimized for battery
life and durability at the cost of portability (the 100 Ah battery weighs a
ton!). I decided I wanted to build something sleeker and more portable, so
that’s what I did.
After having seen a few in the wild and having one crummy proof-of-concept
build, I ordered parts for and built a brand new radio cooler in the fall
of 2013. It started with two speakers and grew to four and has since been used
hundreds of times between tailgates, beaches, and poolsides. It lasts longer, is
way louder, and is much more hardy than a lot of store-bought speaker systems. I
built mine to be as water resistant as possible; I used all marine audio
equipment and tried to make decent seals around the speakers and lid. It can get
rained on or be thrown into a river float and still provide powerful loud sound
for tens of hours.
Developed in early 2018, this is a mod that uses MinecraftForge to enable
controller use for the PC version of Minecraft. Instructions for setting up and
using are in the repository readme. Once setup, it’s as simple as turning on
your controller and pressing “run” in the IDE. The Mod uses XInput and should
work anywhere XInput is supported.
A playlist diff tool and a playlist copier for Spotify. Built with Angular
during Summer 2015. The pitch was “version control for your playlist”. In
practice, the idea was that you could ‘fork’ a
playlist which would copy all the songs and you could add any of your own that
you want but you could also merge in updates from the original playlist too. The
use case would be to fork one of the spotify-updated playlists and make it your
own.
Tearable Cloth Simulation
A physics simulation of a tearable (and gravity affected) cloth. The cloth is
represented as a large spring mesh. I built this in Spring 2015 for Dr. Keyser’s
Physically Based Modeling (CSCE-649) class at Texas A&M using three.js and
vanilla Javascript. It uses
Runge-Kutta
fourth-order method to integrate movement over time.
It’s not optimized and evaluating as many nodes as the simulation has in a
browser using Javascript is difficult. Thus you’ll notice it is a bit buggy,
especially on slower computers or mobile browsers. You can use A and D keys to
rotate the view and the T key to “tear” the cloth.
A simulation of a rigid-body cube that I built Spring 2015 for Dr. Keyser’s
Physically Based Modeling (CSCE-649) class at Texas A&M using three.js and
vanilla Javascript. It uses basic euler integration by default which can be
unstable but has an option to use
Runge-Kutta
second-order method for greater stability.
You can use A and D keys to rotate the view. A rigid body (in physical
simulation) is most basically described as a dice or other hard object which
simply transfers energy within itself rather than absorbing it via a spring
force.
A simulation of a cube represented as a springy mesh (connected corners) that I
built Spring 2015 for Dr. Keyser’s Physically Based Modeling (CSCE-649) class at
Texas A&M using three.js and vanilla Javascript. It uses
Runge-Kutta
Euler method to integrate movement over time. It uses Runge Kutta second-order
by default but can optionally use fourth-order for greater stability.
A simulation of boid flocking that I
built Spring 2015 for Dr. Keyser’s Physically Based Modeling (CSCE-649) class at
Texas A&M using three.js and vanilla Javascript.
In the demo below, you can use the WASD keys to move around. You’ll notice three
flocks (red, blue, and green) along with white agitator boids that change
position. The spinning cubes are just for added affect and the boids should
generally avoid them.
This is a collection of ancient programs I wrote during high school. Most of
these were found either on old thumb drives or on my Dropbox. Select programs
have a short description.
2010-12-15 - BIRCA (Brent IRC App) - an IRC chat client that implements (from
what I can remember) the most basic parts of the IRC protocol to get you
connected and talking in a channel.
2008-12-23 - picwin_mp3.mrc - One of the first
programs I was really proud of. It was a music player for mIRC (written in
mIRC scripting language) that used ‘picture windows’ for display. Picture
windows were essentially a canvas you could draw on. The code is incomprehensible,
but it’s still working as of 2020.
2008-09-10 - oldmp3.mrc - An older mp3 player that
used mIRC native dialog functions instead of a picture window.