First and foremost I love to solve problems. I approach problem solving as a challange to understand the underlying process. This mastery is something I have experienced in great detail in my automotive and software projects. This curiosity to learn and the responsibility to solve my own problems has driven me my whole life; from needing to know how to repair my first vehicle and home, developing my own litter box, and to solving and implementing software for my profession.
Professionally I have favored software development focusing on the front end. While I do like the loosey-goosey Javascript world, I like to be able to take control of the user experience front end provides. I hate interacting with awful websites with poor layouts and confusing configurations. My goal is to prevent my users from feeling those same emotions. To accompliush this, I strive to fully understand the needs for my user and creating business requirements to meet those needs. Being able to take those requirements and implement technological solutions is where my software experience is leveraged. My past experiences have ranged from command line server applications to single page web applications. Regardless of language or environment, I enjoy creating the most appropriate solution for the problem at hand.
This website will show off the virtual and non virtual projects I have been working on. On the virtual side I have enjoyed creating AutoHotKey scripts for games and programs to help me create prototypes for my board game. In the real world I enjoy working on automobiles and projects on my house. Overall I like to keep myself busy and always finding something to tinker with.
HPT214XP, 108 LSA, .488/.480
Mopar M1
52MM throttle body
EQ heads
Denso 12 hole injectors 9470229
Harland Sharp 1.7 rockers
Trend pushrods
Doug Thorley Tri-Y headers
Clothes Street Billet timing chain 93503X9
Scat SCA9012 balancer
MSD coil
Thunderbolt 8.2mm spark plug wires
Catch Can with Morimoto large capacity tank
K&N intake tube and filter
H&R Loweing Springs
Bilstein 4600 shock absorbers
No front sway bar
Hellwig rear sway bar
Stock control arms with Prothane bushings
Ford Explorer 8.8
Ford Racing carbon fiber clutches and s-spring
Rebuild Dana 35
Early XJ knuckles
American Mustang FR500 replicas
255/55/R18 Cooper Discoverer H/T Plus
WK2 Brake caliper
2000 SVT Cobra R 13’’ rotor
Raybestos rotors and Element3 pads
Crown Performance front braided brake lines
SSTubes stainless brake line kit
Martin Saine Street/Strip 700
Martin Saine 28s 2800 stall converter
Auxiliery fluid cooler post radiator
Blue Sea fuse panel
Joying 6.2’’ Android head unit
Weivision 360 camera
GlowShift dual temp gauges
Coolgear 60W type C 15W type A charger
Voltmeter
Dakota Digital 2800bt electric fan controller
USB Android internal TPMS
JL xd700/5 amplifier
Alpine Type-R 6.5 Component front speakers
Alpine Type-R 6.5 Coaxial rear speakers
Alpine Type-R 10 DVC 4ohm subwoofer
Q logic subwoofer enclousure
Audio Controller LC7i lineout converter
Power steering cooler
Ironman 4x4 Fab steering brace
Durango steering box
AEM inline wideband and controller
Seude headliner, soundbar, and sun visors
Carbon fiber hydro dipped interior and exterior pieces
WK2 blackedout badges
Modified WJ cabin filter housing and filter
Mini D2S 5.0 projector retrofit
Morimoto 35w 5k HID bulbs
Exterior LED bulbs, front turn signal switchback with EP39 flasher relay
LED fog light pod
Doug Thorley Tri-Y headers
3 inch from headers back
Magnaflow high flow catalytic converter
Spintech 5000 Sport Truck muffler
5 inch exhaust tip
A friend was throwing a Toy Story themed birthday for their child. After conversing with my friend and sister I decided an ice cream cake would be a great fit. The cake consists of two layers of ice cream, vanilla and mint chocolate chip, and a layer of fudge cookie crumble. The cake was frozen, covered in frosting, and then decorated with fondant. Styrofoam, 15lbs dry ice and a plastic tote was used to transport the cake 2 hours to its final destination.
My grandma had always wanted a new bathroom and while staying with her I decided to tackle the project. The bathroom had seen damage from water rotting the floor, humidity causing mold in the wallpaper to the popcorn ceiling and just from age. One of my main goals was installing a shower with ADA grab bars to reduce the risk of her falling. The previous air exchanger would blow cold air right above the shower creating condensation. To prevent this I lowered the exchanger and positioned a larger exhaust fan with ventilation to outside the house - previously it vented into the attic.
This game was derived from my experience playing tabletop RPGs, online MMORPGs, and deck building games. My goal was to create a party building adventure game that could encapsulate tactical combat and character progression. The combat is a turn based initiative system providing the player with actions to attack, use items, or move to different combat zones. Initiative values will determine the order characters can attack others and when they will be attacked by others. Players will be able to create decks from cards of their choice that will be used to determine their enemies, rewards, and other in game experiences.
The following art was originally sketched out on paper by another founder; he lead the creative vision of the lore and universe. I then digitized the images, cleaned up lines, and colored them.
Eternity creates Eternal and Finite planes.
Eternity creates the Gods to manage the Finite plane. These Gods symbolize the power holding the Finite plane together: The Planes, Time, Death, Life, and Ethereal.
The Gods soon combat the superiority of their power in the Finite plane and populate the plane with their respective power to increase their strength in the Eternal plane. So as to not endanger themselves in combat, these Greater Beings are trained to champion them; Chaos is introduced alongside.
Eternity worries of Chaos and creates beasts within the Finite plane to equalize the power in the Gods. These beasts are designed for all realms and powers of the Finite plane; as the combat rages on, only the strongest beasts are able to fight off the impending Chaos.
These Greater Beings have been combating Beasts for eons with no ending in sight. The Gods, still desperate for power, inflict their powers upon beasts directly. These influences alongside Chaos lead them to form hoards of Lesser Beings commanded by the Greaters. As entropy increases in the Finite plane, the God of Chaos increases in strength, introducing unexpected results for the Gods.
The Lord of the Finite Plane revels in death and desires to slay all Beings but is no match for the extent the other Gods have become. The Ethereal Queen’s reservoir of power is tapping dry and is unable to drain that of her enemies. The Plane Eater attempts to destroy the plane but fails as Chaos in the plane is too unstable and would damage the Eternal plane. The Great Dragon protects his stake by pausing his reality from within the Eternal plane hoping to outlast the increasing Chaos. The Deathshifter gathers his power by giving life to the dead in order to be the last God standing. As the balance that was created to keep control reaches maximum Chaos, the dawn of a new light emerges.
With the Gods now factioned and fighting between themselves, Eternity creates another creature to ultimately combat the increasing Chaos. Man is created with powers of all Gods to force Beings to the fringes of the Finite plane, ultimately breaking the standoff of power. Eternity gave Man a level of creativity, drive, and willpower to overcome the Chaos developed by the feud of the Gods. Where the Gods have no choice in wanting power, Man has the power of wanting choice. Man, Eternity’s reaper on the power of the Gods.
Man with choice, soon banded together to drive off droves of Beasts and Beings to find residence within the Finite plane. While accomplishing this, Man learned of Eternity’s plan and was able to rationalize their own decision for conquering the Chaos of the Finite planes and Eternity. As Eternity's grip to regain all that he has made slipped, he forces the hand of the Gods to eliminate Man.
Man free of the guidance of Eternity turned to cleansing the Finite plane of all creatures of Eternity. The Gods have retreated to “TOWN NAME”, the last known portal between the Finite and Eternal plane. Man is on the final push to cleanse the Finite. When man turned its back on Eternity, Eternity focused on Man, forcing a war for the Finite plane, a war for Fate. What Chaos is waiting to unfold?
I started development of this application to aide in the creation of the playing cards for my board game. I was spending large amounts of time placing images in pixel perfect locations to have them easily printed and cut to size. This got even more difficult to align the front and rear images of the card. This application allows me to select a directory to find images, select combinatons of front and rear images, define a quantity, and then generate a PDF ready for printing and cutting.
After selecting a directory you will have the option to provide additional search terms for the file name and type. This allows a user to search for specific terms such as 'gold' or 'realase' of type '.png' to quickly and easily create a new gold deck.
In the main imageview sections front and rear images can be selected and added to a deck list via the "Add to list" button. Front images can then be added to a 'used' group which will remove them from the main search imageview. Current revision only allows for Poker sized cards, 63mmx88mm.
The buttons below the deck information will allow the user to clear the deck, remove cards, or update the quantity of a card selected.
When a constructed deck is ready to be generated, the options at the bottom allow the user to select DPI, PDF page size, and the bleed edge. Bleed will be the distance in mm from the edge of the image to another.
A destination folder and file name can be selected or your desktop and current time will be used as the file name default. The check box will automatically launch the PDF in your current default application for quick preview.
Most of the development has been designed to my specific needs and with lots of conditions and cornor cases that have not been addressed. Any thoughts or ideas are welcome to submission on the projects Github. PlayingCardPDFGenerator
Development of this applications stemmed from the creation of PDF Card Generator. I realized if a card had an incorrect value it was labor intensive to update the text values on the image file. Instead of having multiple versions of card images with different text values, it would be easier to write an appliction to populate the text values dynamically onto a card template.
This program leverages using CSV files as a data source of text values, templates of the different types of cards, and any supporting images required. The program currently has global coordinates defined in the code for text locations, in the future I would prefer them to be defined outside the application with the text values.
Depending on the length of text the application can determine if it needs to increase or decrease the font size to fit. In certain text fields the application is able to handle run off words and return the text to a new line.
The application takes in a directory of templates and provides an imageview for visual selecting. You then need to tell the application which template via radio button to use for internally defined coordinates. The user must then select the CSV file and directory to be used for images.
Overall this application has been an amazing time saver to help me recreate cards and fix all my typos on my first prototype run!
CSV Files
Armor CSVTemplates
Finished Cards
This project was from the dislike of using traditional clay based cat litter. Clay litter produces lots of dust that can be inhaled while cleaning, residual litter tracking that turns to a fine powder on the floor and creates a large volume of waste. Researching led me to find pine pellets which alleviated the cons of clay litter. There is little to no tracking of pellets, no dust is created while cleaning, and the used litter is easier to dispose of.
After initial use I discovered that the method of sifting by other traditional litters would not work effectively for pine pellets. With traditional litters the material traveling through the sifter is retained and the captured material is disposed of. With pine pellets the goal is to dispose of the material traveling through the sifting device. This is due to the pine pellets breaking down into 'fines' when they come into contact with a liquid. Finding an efficient method to remove the fines is the goal to help promote the use of pine pellet litters. Solid waste with minimal attached pellets can be disposed of directly into a toilet.
In my first attempt I search for two storage containers that would leave volume between their bottoms when stacked. This volume would allow room for the fines to collect while sifting. To create holes for the sifting container I used a drill bit with a smaller diameter than the pellets and attempted to put holes as close together as possible. I was unable to create a tight pattern due to the plastic fracturing. I created an opening on the side so it could be used similiar to a litter box. Unfortunately the cats were not fond of getting inside of it. One concern to be addressed is how much weight can the inner container hold with more holes.
For my second attempt I wanted to address if I could create a more efficient sifting pattern. One of the findings from my first attempt was that many fines would sit between holes and, with side to side shaking, pile up on the ends of the container. For this I decided to put holes on the side edge going up about an inch. To create a tighter hole pattern I decided to make a template with a thin piece of metal that I could then use a soldering iron to puncture holes in the plastic.
My final conclusion is that if your cat will use pine pellets, it is by far an easier and cleaner method to care for them. I ultimately went with the XL Breeze litter box and replaced their plastic pellets with pine pellets. For optimal results I use only enough pine pellets to cover the sifted area. For the easiest cleanup I used an XL extra absorbant dog pad to capture the fines and urine. The surround shield and sifting layer also sat perfectly on my trash can, this made it very easy to set on there and rake the pellets allowing fines to fall into the trash.
With a great dislike of box springs and the desire to have a cool bed, I designed and created this platform bedframe. It consist of 3 parts: headboard, platform, and the base. The three parts are atatched via bolts through the vertical headboard posts. The platform is one large piece and is not apartment friendly; I have been fortunate enough it has fit inside everywhere Ive lived and it's traveled all across the country.
We all have done something for someone we thought we loved right? The headboard was designed to offer storage behind the mirrors and below with a secret storage compartment. The mirrors were etched and filled with a fluorescent paint. The panel with the horizontal elephant was intended to sit right above the mattress and fold inward providing storage for what ever one may need.
Ever curious how your glasses are made in an hour? Link below is to a Imgur gallary explaining each picture.
My first vehicle - 2001 Honda Civic - and the interior mods and sound system I installed.
The evolution of my desks over time.
I created scripts using Java, Excel and AutoHotKey to do tasks within the game Idle Online Universe. To accomplish this I used AutoHotKey to find pixel positions and colors of all points of interactions for different asks. After storing these all into an excel file I wrote a Java program to parse the file and depending on the presence of a pixel color, write to a file containing AutoHotKey functions. With the resulting files I could easily copy commands in desired order to a new AutoHotKey script to build complex actions.
This allowed me to play 6 accounts at once and using keybindings in AHK to execute diverse tasks across all accounts. Using functionally of AutoHotKey I was able to write conditions to track in game window and start an early state identification system.
IdleFunctionsIndividual.ahk contains individual lines for each function. Using these in combination with one another will build complex tasks to be performed by AutoHotKey.
IdleFunctions_Java.ahk contains the actual functions, these functions need to be present in your FINAL .ahk file to be ran. The commands from the previous file can be copied within this file for specific bindings to create your own custom scripts.
IdleFunctions.ahk is a file I have started to construct and test various tasks. On line 2957 you will notice a command HoldEnter, this takes a number of times 'enter' will be held 'pressed' as input. This can be used for Mining and Woodcutting with ease. Line 2972 is what I used to switch between my different browsers/windows. This configuration is designed with 1080 resolution, first 10 windows being the game.
The input parameters x and y are the pixel coordinates of the top left corner of the game in your browser at 100% zoom.
Speed will determine the time between each click, this can be easily adjusted for your lag and ping.
Pixel will be defined by the line of code above the command, this will be predetermined from the excel file. The function will check the color for position passed in and compared to what it should be.
Functions with the menu parameter are my work in progress, these accept a "true" assuming the menu is present and checks if it exists based on various pixel locations unique to it.
My current main task is on line 2747, here you can see me declare my speed, x, y and set my CoordMode. It currently loops through each window and uses GAME_CHECK to see if the menu is on menu selection or wave change, then changes to menu selection.
Please be aware to add esc::ExitApp to the end of your script.
IdleFunctionsIndivual.Ahk IdleFunctions_Java.Ahk IdleFunctions.Ahk